为什么在声明结构体变量名时不能使用连字符?

ksh*_*ire 1 c structure

结构体生日{ int day:6; }生日;

在声明b-day为结构时,它显示以下错误:

error: expected ':', ',', ';', '}' or '__attribute__' before '-' token|
Run Code Online (Sandbox Code Playgroud)

但是从变量名中删除连字符后它就可以工作了,为什么呢?

Eri*_*hil 5

连字符用作减法和求反运算符,因此不能在变量名中使用。(变量是否用于结构体或其他类型无关紧要。)

\n

如果你有:

\n
int a = 1;\nint b = 2;\nint a-b = 3;\nprintf("%d\\n", a-b);\n
Run Code Online (Sandbox Code Playgroud)\n

那么我们对于是打印 \xe2\x80\x9c-1\xe2\x80\x9d 来表示a负数b还是打印 \xe2\x80\x9c3\xe2\x80\x9d 表示变量会产生歧义a-b

\n