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