C # определение оператора с # в имени макроса - PullRequest
1 голос
/ 27 ноября 2011

Можно ли как-то объявить оператор #define следующим образом?

    #define #Name# struct->name

Я получаю сообщение об ошибке "ошибка: имена макросов должны быть идентификаторами", которые, как я знаю, связаны с символом #.Есть ли способ разрешить использование символа #?

Ответы [ 2 ]

7 голосов
/ 27 ноября 2011

Нет.Имя макроса должно быть идентификатором, и # не может появляться в идентификаторе.

0 голосов
/ 27 ноября 2011

Имена макросов должны быть идентификаторами, что означает:

  1. Должен начинаться с буквы или подчеркивания.
  2. Может содержать только буквы, цифры и подчеркивания.

Но более важной проблемой является то, что я не думаю, что все равно будет делать то, что вы хотите. Если бы #define #Name# struct->name были приняты, это не означало бы, что #foo# превратится в struct->foo (что, я полагаю, то, что вы хотите. Если я ошибаюсь и вы просто хотите, чтобы это работало для #Name#, тогда просто сделайте что-то вроде XNameX.) Это будет работать только для точного литерала #Name#. Вместо этого вы хотите создать макрос, который принимает аргумент, такой как:

 #define X(name) struct->name

Это преобразует X(foo) в struct->foo.

...