2014-01-20 2 views
2

Почему я получаю сообщение об ошибке, если я определяю константу как это? Определение констант с '.' token

#‎define‬ F.NAME "First" 
#define L.NAME "Second" 
printf("%s %s\n", F.NAME, L.NAME); 

Но каждая вещь проходит гладко, если я это сделать

#define F_NAME "First" 
#define L_NAME "Second" 
printf("%s %s\n", F_NAME, L_NAME); 

Ошибка у меня есть.

Warning: missing white space after the macro name 
Error: expected expressions before '.' token 

Почему я не могу определить константы с '.' ?

+1

Потому что это запрещено. – Macmade

+0

Почему вы думаете, что вы не должны * получить сообщение об ошибке? Точно так же вы ожидаете '#define ~~; My * Goofy # $ ymb0l ~~ 42' должен работать? Почему или почему нет? – abelenky

ответ

2

Поскольку имя макроса должно быть идентификатором, а идентификаторы могут содержать только символы подчеркивания, столицы и маленькие буквы и цифры. Точка используется для элементов структуры.

+0

Кроме того, идентификаторы должны начинаться с nondigit. '1foo' не является идентификатором, но' foo1' является – Brandin

5

Потому что спецификация этого не позволяет. Периоды и большинство других специальных символов (кроме _) не допускаются.

Идентификатор представляет собой последовательность нецифровой символов (включая символ подчеркивания _, в строчных и заглавных букв латинского алфавита, и другие символы) и цифр, которое обозначает один или более объектов, как описано в разделе 6.2.1. Строчные и прописные буквы различны. Не существует определенного предела максимальной длины идентификатора.

Из раздела 6.4.2.1 спецификации C99.

2

Потому что . не может использоваться в пределах имени переменной/идентификатора.

enter image description here

2

Поскольку имя макроса должно быть идентификатором, а также идентификаторы не могут содержать . характер.

Смежные вопросы