专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
51好读  ›  专栏  ›  嵌入式微处理器

一个风骚的C语言操作

嵌入式微处理器  · 公众号  ·  · 2024-06-13 13:30

正文

之前有个小伙伴在交流群里发了类似下面的一张图:
顿时引起一阵骚动:
我把源代码再附上给大家看一下。
main.c 如下:
#include 
#include 

static char city_name[][20] = { 
 #include "city.h" 
 };
 
int main(void) {
        printf("%s", city_name[0]);
}
city.h 如下:
"北京",
"上海",
"广州"
这段代码风骚的地方是, 在C语言里的数组里,使用了一个#include的操作。 说实话,我长这么大也是第一次见。

不过,有个小伙伴表示不服,他立刻在自己的电脑上编译了一把,尴尬的是没有编译通过……

他也把自己的代码贴上来了:

问题出在什么地方呢?看到这里,你可以暂停10秒钟,想一下原因。

后来,该同学自己找到了问题:

问题在于 #include “city.h”必须单独起一行。

那么,为什么#include 必须要单独起一行? 为此, 我把落了一层灰的《C和指针》书拿出来翻了一遍,楞是没找到说明!

最后,在谷歌上找到一个人的回答:

#必须是一行中的首个非空格字符,也就是说#前面可以有空格,但是不能有其他字符。

这个问题先这么告一段落吧。

后来群里的一个同学又提出了疑问:

他觉得这个city.h写的不符合C规则,刚一看好像是这么回事,一般的头文件也没有这么写的,不过事实上没人规定头文件应该怎么写,只要包含后的c文件符合语法规则就可以。
另外,#include 包含的文件也不一定是后缀为.h的文件,什么后缀格式的文件都可以。

用上述方法也有好处, 方便更新数组内容,直观。

此外,如果用gcc编译的话,gcc 使用-E 参数可以帮你展开宏定义和头文件。

最后,这位同学感慨了一句: 毕业找工作,精通c语言;两年后、掌握c语言;五年后,了解c语言。

我也找了一下当年自己找工作的简历:
他说的没错,我第一条写的就是精通C语言编程……

END

来源:TopSemic嵌入式


版权归原作者所有,如有侵权,请联系删除







请到「今天看啥」查看全文