#include
#include
static char city_name[][20] = {
#include "city.h"
};
int main(void) {
printf("%s", city_name[0]);
}
这段代码风骚的地方是,
在C语言里的数组里,使用了一个#include的操作。
说实话,我长这么大也是第一次见。
不过,有个小伙伴表示不服,他立刻在自己的电脑上编译了一把,尴尬的是没有编译通过……
问题出在什么地方呢?看到这里,你可以暂停10秒钟,想一下原因。
后来,该同学自己找到了问题:
问题在于
#include “city.h”必须单独起一行。
那么,为什么#include 必须要单独起一行?
为此,
我把落了一层灰的《C和指针》书拿出来翻了一遍,楞是没找到说明!
最后,在谷歌上找到一个人的回答:
#必须是一行中的首个非空格字符,也就是说#前面可以有空格,但是不能有其他字符。
这个问题先这么告一段落吧。
后来群里的一个同学又提出了疑问:
他觉得这个city.h写的不符合C规则,刚一看好像是这么回事,一般的头文件也没有这么写的,不过事实上没人规定头文件应该怎么写,只要包含后的c文件符合语法规则就可以。
另外,#include 包含的文件也不一定是后缀为.h的文件,什么后缀格式的文件都可以。
用上述方法也有好处,
方便更新数组内容,直观。
此外,如果用gcc编译的话,gcc 使用-E 参数可以帮你展开宏定义和头文件。
最后,这位同学感慨了一句:
毕业找工作,精通c语言;两年后、掌握c语言;五年后,了解c语言。
来源:TopSemic嵌入式
版权归原作者所有,如有侵权,请联系删除
。