一個(gè)風(fēng)騷的C語言操作
有個(gè)小伙伴在我們的嵌入式交流群里發(fā)了類似下面的一張圖,


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 如下:
"北京",
"上海",
"廣州"這段代碼風(fēng)騷的地方是在C語言里的數(shù)組里使用了一個(gè)#include的操作,我長這么大也是第一次見。
不過有個(gè)小伙伴表示不服,他立刻在自己的電腦上編譯了一把,尷尬的是沒有編譯通過


問題出在什么地方呢?看到這里,你可以暫停10秒鐘,想一下原因。
后來該同學(xué)自己找到了問題,

問題在于#include “city.h”必須單獨(dú)起一行。
那么問題又來了,為什么#include 必須要單獨(dú)起一行?為此我把落了一層灰的《C和指針》書拿出來翻了一遍,楞是沒找到說明。
最后在谷歌上找到一個(gè)人的回答:

#必須是一行中的首個(gè)非空格字符,也就是說#前面可以有空格,但是不能有其他字符。
這個(gè)問題先這么告一段落吧。
后來群里的會(huì)長同學(xué)又提出了疑問,

他覺得這個(gè)city.h寫的不符合C規(guī)則,剛一看好像是這么回事,一般的頭文件也沒有這么寫的,不過事實(shí)上沒人規(guī)定頭文件應(yīng)該怎么寫,只要包含后的c文件符合語法規(guī)則就可以。另外#include 包含的文件也不一定是后綴為.h的文件,什么后綴格式的文件都可以。
用上述方法也有好處,方便更新數(shù)組內(nèi)容,直觀。
此外如果用gcc編譯的話,gcc 使用-E 參數(shù)可以幫你展開宏定義和頭文件。



最后會(huì)長同學(xué)感慨了一句:畢業(yè)找工作,精通c語言;兩年后、掌握c語言;五年后,了解c語言。
我找了一下2013年自己找工作的簡歷:

他說的沒錯(cuò),我第一條寫的就是精通C語言編程...。

全文完。
歡迎關(guān)注我們,與大家一起成長!

