2014-01-20 39 views
2

如果我定義這樣的常數,爲什麼會出現錯誤? 用'。'定義常量代幣

#‎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 ~~;我*高飛#$ ymb0l ~~ 42'應該工作嗎?爲什麼或者爲什麼不? – abelenky

回答

2

由於宏名稱必須是標識符,並且標識符只能包含下劃線,大寫和小寫字母和數字。點用於結構的元素。

+0

此外,標識符必須以非數字開頭。 '1foo'不是一個標識符,而是'foo1' – Brandin

5

因爲規範不允許。期間和大多數其他特殊字符(_除外)是不允許的。

標識符是一系列非數字字符(包括下劃線_,小寫和大寫拉丁字母以及其他字符)和數字,它們指定了6.2.1中描述的一個或多個實體。小寫字母和大寫字母是不同的。對標識符的最大長度沒有特別的限制。

從C99規範的§6.4.2.1。

2

因爲.不能在變量/標識符名稱中使用。

enter image description here

2

由於一個宏名稱必須是一個標識符,和標識符不能包含.字符。