一个风骚的C语言操作

简介: 一个风骚的C语言操作

有个小伙伴在我们的嵌入式交流群里发了类似下面的一张图,

顿时引起一阵骚动,

我把源代码再附上,

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的操作,我长这么大也是第一次见。

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

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

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

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

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

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

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

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

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

后来群里的会长同学又提出了疑问,

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

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

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

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

我找了一下2013年自己找工作的简历:

他说的没错,我第一条写的就是精通C语言编程...。

全文完。


相关文章
|
6月前
|
Linux C语言
Linux系统下C语言的队列操作
Linux系统下C语言的队列操作
127 0
|
6月前
|
算法 C语言
【专业解码】递归求和在C语言中的神操作!只需1秒,你也能轻松开挂
【专业解码】递归求和在C语言中的神操作!只需1秒,你也能轻松开挂
|
6月前
|
编译器 C语言
嵌入式C语言变量、数组、指针初始化的多种操作
嵌入式C语言变量、数组、指针初始化的多种操作
49 0
|
6月前
|
C语言
C语言内存及堆栈操作
C语言内存及堆栈操作
33 0
|
11月前
|
C语言
三子棋真是太神奇啦~~~C语言三子棋小游戏详解,具体到每一步操作的解释说明,不信你学不会!
三子棋真是太神奇啦~~~C语言三子棋小游戏详解,具体到每一步操作的解释说明,不信你学不会!
58 2
|
4月前
|
语音技术 C语言 Windows
语音识别------ffmpeg的使用01,ffmpeg的安装,会做PPT很好,ffmpeg不具备直接使用,只可以操作解码数据,ffmpeg用C语言写的,得学C语言,ffmpeg的安装
语音识别------ffmpeg的使用01,ffmpeg的安装,会做PPT很好,ffmpeg不具备直接使用,只可以操作解码数据,ffmpeg用C语言写的,得学C语言,ffmpeg的安装
|
5月前
|
C语言
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
|
6月前
|
存储 C语言
c语言:文件处理操作-3
c语言:文件处理操作
45 0
|
6月前
|
C语言 C++
c语言:文件处理操作-2
c语言:文件处理操作
42 0
|
6月前
|
存储 编译器 C语言
c语言:文件处理操作-1
c语言:文件处理操作
30 0