1. 奇特语法
inline inline inline void func() {}
int a = 1;
const const const b = 2;
volatile volatile volatile int c = 3;
int *restrict restrict restrict d = &a;
2. 原理浅析
至于为什么只有const、inline、volatile、restrict这些关键字能够重复出现而不会出现语法错误,好吧,C99标准上也没有说明原因,我也就不得而知。或者是由于某些原因没有实现,或者是没有必要实现。
不过,C99标准中第6.7.3 Type qualifiers一节以及第6.7.4 Function specifiers一节分别提及到const、volatile、restrict和inline,说明了:若这些限定词直接或通过typedef间接出现多次,其行为和只出现一次是一样的。
所以,上面的语法看起来虽然和平常的写法有些差异,但不过只是无意义的行为而已。
对于restrict关键字,使用GCC编译时,要加-std=c99选项方可编译通过。