一個風騷的C語言操作引起的軒然大波!

一個風騷的C語言操作引起的軒然大波!

有個小伙伴在我們的交流群裡發了類似下面的一張圖:

頓時引起一陣騷動,

我把源代碼再附上,

main.c 如下:

#include<stdio.h>#include<string.h>staticcharcity_name[][20]={#include"city.h"};intmain(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 參數可以幫你展開宏定義和頭文件。

最後會長同學感慨了一句:

What do you think?

Written by marketer

速賣通平台小談

Python 優秀代碼編寫