有個小伙伴在我們的嵌入式交流群里發了類似下面的一張圖,
頓時引起一陣騷動,我把源代碼再附上,
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語言編程。
全文完。
原文標題:一個風騷的C語言操作
文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
嵌入式
+關注
關注
5092文章
19178瀏覽量
307698 -
C語言
+關注
關注
180文章
7614瀏覽量
137725
原文標題:一個風騷的C語言操作
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
使用STM32單片機可以進行SPI通訊,一段時間可以正常工作,一段時間沒有數值,這是什么問題?
ADS1013采集運放輸出數據,一段時間后變的很低是為什么?
ADS1220運行一段時間后出現ADC = -1 的錯值,怎么解決?
TLV5633IPW使用一段時間就壞了,為什么?
風機運行一段時間跳閘的原因
如何讓蜂鳴器響一段時間停止
相間距離保護的一段保護范圍介紹
請問ad9910芯片的ram模式在接收數據時為什么會出現一段方波?
VL53L0在使用一段時間后無法讀取數據如何解決?
用IAR給STM8編程的每次下載完之后要給它加密,可以在程序里面寫一段代碼加密嗎?
請問STM8中的RAM會像51系列一樣有一段初始化清零代碼嗎?
STM8串口工作一段時間后出現通訊異常的原因?
算力簡史,是一段波瀾壯闊的歷史
![算力簡史,是<b class='flag-5'>一段</b>波瀾壯闊的歷史](https://file.elecfans.com/web2/M00/6D/35/poYBAGM1MoCAWOOXAAAqWi8Xt8w214.png)
評論