有个小伙伴在我们的交流群里发了类似下面的一张图:
![](https://upload-images.jianshu.io/upload_images/24175598-c0ae138115bc3ba6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
顿时引起一阵骚动,
![](https://upload-images.jianshu.io/upload_images/24175598-1c0ab4b4ebe6e1a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我把源代码再附上,
main.c 如下:
#include <stdio.h> #include <string.h> static char city_name[][20] = { #include "city.h" }; int main(void) { printf("%s", city_name[0]); }
city.h 如下:
"北京",
"上海",
"广州"
这段代码风骚的地方是在C语言里的数组里使用了一个#include的操作,我长这么大也是第一次见。
不过有个小伙伴表示不服,他立刻在自己的电脑上编译了一把,尴尬的是没有编译通过:
![](https://upload-images.jianshu.io/upload_images/24175598-c152bd441c16fa8a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
他也把自己的代码贴上来了:
![](https://upload-images.jianshu.io/upload_images/24175598-b4a77433f470a52f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
问题出在什么地方呢?看到这里,你可以暂停10秒钟,想一下原因。
后来该同学自己找到了问题,
![](https://upload-images.jianshu.io/upload_images/24175598-6b62f1664b011210.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
问题在于 #include “city.h” 必须单独起一行。
那么问题又来了,为什么#include 必须要单独起一行?为此我把落了一层灰的《C和指针》书拿出来翻了一遍,楞是没找到说明。
最后在谷歌上找到一个人的回答:
![](https://upload-images.jianshu.io/upload_images/24175598-3846fa10424ecbfe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#必须是一行中的首个非空格字符,也就是说#前面可以有空格,但是不能有其他字符。
这个问题先这么告一段落吧。
后来群里的会长同学又提出了疑问,
![](https://upload-images.jianshu.io/upload_images/24175598-488129a70534281a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
他觉得这个city.h写的不符合C规则,刚一看好像是这么回事,一般的头文件也没有这么写的,不过事实上没人规定头文件应该怎么写,只要包含后的c文件符合语法规则就可以。另外#include 包含的文件也不一定是后缀为.h的文件,什么后缀格式的文件都可以。
用上述方法也有好处,方便更新数组内容,直观。
此外如果用gcc编译的话,gcc 使用-E 参数可以帮你展开宏定义和头文件。
![](https://upload-images.jianshu.io/upload_images/24175598-00fea7394c8fd547.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/24175598-e9c5dfee775261d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/24175598-b7da7c9c0093d537.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后会长同学感慨了一句:毕业找工作,精通c语言;两年后、掌握c语言;五年后,了解c语言。