一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言語(yǔ)法擴(kuò)展

汽車(chē)電子技術(shù) ? 來(lái)源:宅學(xué)部落 ? 作者: 王利濤 ? 2023-02-17 09:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux 內(nèi)核驅(qū)動(dòng)中的奇怪語(yǔ)法

大家在看一些 GNU 開(kāi)源軟件,或者閱讀 Linux 內(nèi)核、驅(qū)動(dòng)源碼時(shí)會(huì)發(fā)現(xiàn),在 Linux 內(nèi)核源碼中,有大量的 C 程序看起來(lái)“怪怪的”。說(shuō)它是C語(yǔ)言吧,貌似又跟教材中的寫(xiě)法不太一樣;說(shuō)它不是 C 語(yǔ)言呢,但是這些程序確確實(shí)實(shí)是在一個(gè) C 文件中。此時(shí),你肯定懷疑你看到的是一個(gè)“假的 C 語(yǔ)言”!

比如,下面的宏定義:

#define mult_frac(x, numer, denom)({\\
typeof(x) quot = (x) / (denom);\\        
typeof(x) rem  = (x) % (denom);\\
(quot * (numer)) + ((rem * (numer)) / (denom));\\
})
#define ftrace_vprintk(fmt, vargs)\\
do {\\    
if (__builtin_constant_p(fmt)) {\\        
static const char *trace_printk_fmt __used \\
  __attribute__((section("__trace_printk_fmt"))) = \\
  __builtin_constant_p(fmt) ? fmt : NULL; \\
  __ftrace_vbprintk(_THIS_IP_, trace_printk_fmt, vargs);\\
  } 
else \\
  __ftrace_vprintk(_THIS_IP_, fmt, vargs);\\
} while (0)

字符驅(qū)動(dòng)的填充:

static const struct 
file_operations 
lowpan_control_fops = {
.open =lowpan_control_open,
.read = seq_read,
.write=lowpan_control_write,
 .llseek = seq_lseek,
 .release = single_release,
 };

內(nèi)核中實(shí)現(xiàn)打印功能的宏定義:

#define pr_info(fmt, ...)\\
__pr(__pr_info, fmt, ##__VA_ARGS__)

#define pr_debug(fmt, ...)\\
__pr(__pr_debug, fmt, ##__VA_ARGS__)

你沒(méi)有看錯(cuò),這些其實(shí)也是 C 語(yǔ)言,但并不是標(biāo)準(zhǔn)的 C 語(yǔ)言語(yǔ)法,而是我們 Linux 內(nèi)核使用的 GNU C 編譯器擴(kuò)展的一些 C 語(yǔ)言語(yǔ)法。這些語(yǔ)法在 C 語(yǔ)言教材或資料中一般不會(huì)提及,所以你才會(huì)似曾相識(shí)而又感到陌生,看起來(lái)感覺(jué)“怪怪的”。我們?cè)谧?Linux 驅(qū)動(dòng)開(kāi)發(fā),或者閱讀 Linux 內(nèi)核源碼過(guò)程中,會(huì)經(jīng)常遇到這些“稀奇古怪”的用法,如果不去了解這些特殊語(yǔ)法的具體含義,可能就對(duì)代碼的理解造成一定障礙。

本文和接下來(lái)的幾篇文章,將帶領(lǐng)大家一起去了解 Linux 內(nèi)核或者 GNU 開(kāi)源軟件中,常用的一些 C 語(yǔ)言特殊語(yǔ)法擴(kuò)展,掃除閱讀 Linux 內(nèi)核或 GNU 開(kāi)源軟件時(shí),這些擴(kuò)展特性帶給我們的語(yǔ)法閱讀障礙和困惑。

C 語(yǔ)言標(biāo)準(zhǔn)和編譯器

在進(jìn)入正式學(xué)習(xí)之前,先給大家普及一下 C 標(biāo)準(zhǔn)的概念。在學(xué)習(xí) C 語(yǔ)言時(shí),大家在教材或資料上,或多或少可能見(jiàn)到過(guò)“ANSI C”的字眼??赡墚?dāng)時(shí)沒(méi)有太在意,其實(shí)“ANSI C” 表示的就是 C 語(yǔ)言標(biāo)準(zhǔn)。

什么是 C 語(yǔ)言標(biāo)準(zhǔn)呢?我們生活的現(xiàn)實(shí)世界,就是由各種標(biāo)準(zhǔn)構(gòu)成的,正是這些標(biāo)準(zhǔn),我們的社會(huì)才會(huì)有條不紊的運(yùn)行。比如我們過(guò)馬路,遵循的交通規(guī)則就是一個(gè)標(biāo)準(zhǔn):紅燈停,綠燈行,黃燈亮了等一等。當(dāng)行人和司機(jī)都遵循這個(gè)默認(rèn)的標(biāo)準(zhǔn)時(shí),我們的交通系統(tǒng)才會(huì)順暢運(yùn)行。電腦中的 USB 接口也是一種標(biāo)準(zhǔn),當(dāng)大家生產(chǎn)的 USB 產(chǎn)品都遵循 USB 協(xié)議這種通信標(biāo)準(zhǔn)時(shí),我們的手機(jī)、U 盤(pán)、USB 攝像頭、USB 網(wǎng)卡才可以在各種電腦設(shè)備上互插互拔。2G、3G、4G 也是一種標(biāo)準(zhǔn),當(dāng)不同廠家生產(chǎn)的基帶芯片都遵循這種通信標(biāo)準(zhǔn),我們所用的不同品牌、不同操作系統(tǒng)的手機(jī)才可能互相打電話、互相發(fā)微信、互相給對(duì)方點(diǎn)贊。

同樣,C 語(yǔ)言也有它自己的標(biāo)準(zhǔn)。我們知道,C 語(yǔ)言程序需要通過(guò)編譯器,編譯生成二進(jìn)制指令,才能在我們的電腦上運(yùn)行。在 C 語(yǔ)言剛發(fā)布的早期,各大編譯器廠商開(kāi)發(fā)自己的編譯器時(shí),各自開(kāi)發(fā),各自維護(hù),時(shí)間久了,就會(huì)變得比較混亂。這就會(huì)造成這樣一種局面:程序員寫(xiě)的程序,在一個(gè)編譯器上編譯通過(guò),在另一個(gè)編譯器編譯通不過(guò)。大家按各自的習(xí)慣來(lái),誰(shuí)也不服誰(shuí),就像春秋戰(zhàn)國(guó)時(shí)代:不同的貨幣、不同的度量衡,不同的文字,都是中國(guó)人,因?yàn)闃?biāo)準(zhǔn)不統(tǒng)一,所以交流起來(lái)很麻煩,這樣下去也不是辦法啊。

后來(lái) ANSI(AMERICAN NATIONAL STANDARDS INSTITUTE: 美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì),簡(jiǎn)稱(chēng) ANSI)出山了,聯(lián)合 ISO(國(guó)際化標(biāo)準(zhǔn)組織)召集各個(gè)編譯器廠商大佬,各種技術(shù)團(tuán)體,一起喝個(gè)茶、開(kāi)個(gè)碰頭會(huì),開(kāi)始啟動(dòng) C 語(yǔ)言的標(biāo)準(zhǔn)化工作。期間各種大佬之間也是矛盾重重,充滿(mǎn)各種爭(zhēng)議,但功夫不負(fù)有心人,經(jīng)過(guò)艱難的磋商,終于在1989年達(dá)成一致,發(fā)布了 C 語(yǔ)言標(biāo)準(zhǔn),后來(lái)第二年又做了一些改進(jìn)。于是,就像秦始皇統(tǒng)一六國(guó)、統(tǒng)一文字和度量衡一樣,C 語(yǔ)言標(biāo)準(zhǔn)終于問(wèn)世了!因?yàn)槭窃?1989 年發(fā)布的,所以人們一般稱(chēng)其為 C89 或 C90 標(biāo)準(zhǔn),或者叫做 ANSI C。

C 標(biāo)準(zhǔn)內(nèi)容

C 標(biāo)準(zhǔn)里主要講了什么?

C 標(biāo)準(zhǔn)英文文檔,洋洋灑灑幾百頁(yè),講了很多東西,但總體歸納起來(lái),主要就是 C 語(yǔ)言編程的一些語(yǔ)法慣例,比如:

  • 定義各種關(guān)鍵字、數(shù)據(jù)類(lèi)型
  • 定義各種運(yùn)算規(guī)則
  • 各種運(yùn)算符的優(yōu)先級(jí)和結(jié)合性
  • 數(shù)據(jù)類(lèi)型轉(zhuǎn)換
  • 變量的作用域
  • 函數(shù)原型
  • 函數(shù)嵌套層數(shù)
  • 函數(shù)參數(shù)個(gè)數(shù)限制
  • 標(biāo)準(zhǔn)庫(kù)函數(shù)

C 標(biāo)準(zhǔn)發(fā)布后,大家都遵守這個(gè)標(biāo)準(zhǔn):程序員開(kāi)發(fā)程序時(shí),按照這種標(biāo)準(zhǔn)寫(xiě);編譯器廠商開(kāi)發(fā)編譯器時(shí),也按照這種標(biāo)準(zhǔn)去解析、翻譯程序。不同的編譯器廠商支持統(tǒng)一的標(biāo)準(zhǔn),這樣大家寫(xiě)的程序,使用不同的編譯器,都可以正確編譯、運(yùn)行,大大提高程序的開(kāi)發(fā)效率,推動(dòng)了 IT 行業(yè)的發(fā)展。

C 標(biāo)準(zhǔn)的發(fā)展過(guò)程

C 標(biāo)準(zhǔn)并不是永遠(yuǎn)不變的,就跟移動(dòng)通信一樣,也是從 2G、3G、4G 到 5G 不斷發(fā)展變化的。C 標(biāo)準(zhǔn)也經(jīng)歷了下面四個(gè)階段:

  • K&R C
  • ANSI C
  • C99
  • C11

K&R C

K&R C 一般也稱(chēng)為傳統(tǒng) C。在 C 標(biāo)準(zhǔn)沒(méi)有統(tǒng)一之前,C 語(yǔ)言的作者 Dennis Ritchie 和 Brian Kernighan 合作寫(xiě)了一本書(shū)《C 程序設(shè)計(jì)語(yǔ)言》。早期程序員編程,這本書(shū)可以說(shuō)是絕對(duì)權(quán)威。這本書(shū)很薄,內(nèi)容精煉,主要介紹了 C 語(yǔ)言的基本使用方法。后來(lái)《C 程序設(shè)計(jì)語(yǔ)言》第二版問(wèn)世,做了一些修改:比如新增 unsigned int、long int、struct 等數(shù)據(jù)類(lèi)型;把運(yùn)算符 =+/=- 修改為 +=/-=,避免運(yùn)算符帶來(lái)的一些歧義和 Bug。這本書(shū)可以看作是 ANSI 標(biāo)準(zhǔn)的雛形。但早期的 C 語(yǔ)言還是很簡(jiǎn)單的,比如還沒(méi)有定義標(biāo)準(zhǔn)庫(kù)函數(shù)、沒(méi)有預(yù)處理命令等。

ANSI C

ANSI C 是 ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))在 K&R C 的基礎(chǔ)上,統(tǒng)一了各大編譯器廠商的不同標(biāo)準(zhǔn),并對(duì) C 語(yǔ)言語(yǔ)法和特性做了一些擴(kuò)展,而發(fā)布的一個(gè)標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)一般也叫做 C89/C90,也是目前各種編譯器默認(rèn)支持的 C 語(yǔ)言標(biāo)準(zhǔn)。ANSI C 主要新增了以下特性:

  • 增加 signed、volatile、const 關(guān)鍵字
  • 增加 void* 數(shù)據(jù)類(lèi)型
  • 增加預(yù)處理器命令
  • 增加寬字符、寬字符串
  • 定義了 C 標(biāo)準(zhǔn)庫(kù)
  • ……

C99 標(biāo)準(zhǔn)

C99 標(biāo)準(zhǔn)是 ANSI 1999 年在 C89 標(biāo)準(zhǔn)的基礎(chǔ)上新發(fā)布的一個(gè)標(biāo)準(zhǔn),該標(biāo)準(zhǔn)對(duì) ANSI C 標(biāo)準(zhǔn)做了一些擴(kuò)充,比如新增一些關(guān)鍵字,支持新的數(shù)據(jù)類(lèi)型:

  • 布爾型:_Bool
  • 復(fù)數(shù):_Complex
  • 虛數(shù):_Imaginary
  • 內(nèi)聯(lián):inline
  • 指針修飾符:restrict
  • 支持long long、long double數(shù)據(jù)類(lèi)型
  • 支持變長(zhǎng)數(shù)組
  • 允許對(duì)結(jié)構(gòu)體特定成員賦值
  • 支持16進(jìn)制浮點(diǎn)數(shù)、float _Complex等數(shù)據(jù)類(lèi)型
  • ……

除此之外,C99 標(biāo)準(zhǔn)也借鑒其它語(yǔ)言的一些優(yōu)點(diǎn),對(duì)語(yǔ)法和函數(shù)做了一系列改進(jìn),大大方便了程序員開(kāi)發(fā)程序,比如:

  • 變量聲明可以放代碼塊的任何地方。ANSI C 規(guī)定變量的聲明要全部寫(xiě)在函數(shù)語(yǔ)句的最前面,否則就會(huì)報(bào)編譯錯(cuò)誤?,F(xiàn)在不需要這樣寫(xiě)了,哪里需要使用變量,在哪里直接聲明使用即可;
  • 源程序每行最大支持4095個(gè)字節(jié)。這個(gè)貌似足夠用了,沒(méi)有什么程序能復(fù)雜到一行程序有4KB個(gè)字符;
  • 支持//單行注釋。ANSI C使用/**/沒(méi)有C++的//注釋方便,所以 C99 新標(biāo)準(zhǔn)借鑒過(guò)來(lái)了,也開(kāi)始支持這種注釋方式;
  • 標(biāo)準(zhǔn)庫(kù)新增了一些頭文件:如 stdbool.h、complex.h、stdarg.h、fenv.h 等。大家在 C 語(yǔ)言中經(jīng)常返回的 true、false,其實(shí)這也是 C++ 里面定義的 bool 類(lèi)型。那為什么我們經(jīng)常這樣寫(xiě),而編器編譯程序時(shí)沒(méi)有報(bào)錯(cuò)呢,這是因?yàn)樵缙诖蠹揖幊淌褂玫亩际?VC++6.0 系列,是 C++ 編譯器。還有一種可能就是有些 IDE 對(duì)這個(gè)數(shù)據(jù)類(lèi)型的數(shù)據(jù)做了封裝。

C11 新標(biāo)準(zhǔn)

C11 標(biāo)準(zhǔn)是2011年發(fā)布的最新 C 語(yǔ)言標(biāo)準(zhǔn),修改了 C 語(yǔ)言標(biāo)準(zhǔn)的一些 Bug、新增了一些特性:

  • 增加 _Noreturn,聲明函數(shù)無(wú)返回值;
  • 增加_Generic:支持泛型編程;
  • 修改了標(biāo)準(zhǔn)庫(kù)函數(shù)的一些 Bug:如 gets( )函數(shù)被 gets_s() 函數(shù)代替;
  • 新增文件鎖功能;
  • 支持多線程;
  • ……

從 C11 標(biāo)準(zhǔn)的修改內(nèi)容來(lái)看,也慢慢察覺(jué)到 C 語(yǔ)言未來(lái)的發(fā)展趨勢(shì):C 語(yǔ)言現(xiàn)在也在借鑒現(xiàn)在編程語(yǔ)言的優(yōu)點(diǎn),不斷添加到自己的標(biāo)準(zhǔn)里面。比如現(xiàn)代編程語(yǔ)言的多線程、字符串、泛型編程等,C 語(yǔ)言最新的標(biāo)準(zhǔn)都支持。但是這樣下去,C 語(yǔ)言是不是還能保持她“簡(jiǎn)單就是美”的優(yōu)雅特色呢,我們只能慢慢期待了。但至少目前我們不用擔(dān)心這些,因?yàn)?C11 新發(fā)布的標(biāo)準(zhǔn),目前絕大多數(shù)編譯器還不支持,所以我們暫時(shí)還用不到。

編譯器對(duì) C 標(biāo)準(zhǔn)的支持

標(biāo)準(zhǔn)是一回事,各種編譯器支不支持是另一回事,這一點(diǎn),大家要搞清楚。這就跟手機(jī)一樣,不同時(shí)期發(fā)布的手機(jī)對(duì)通信標(biāo)準(zhǔn)支持也不一樣。早期的手機(jī)可能只支持 2G 通信,后來(lái)支持 3G,現(xiàn)在發(fā)布的新款手機(jī)基本上都支持 4G了,而且可以兼容 2G/3G。

現(xiàn)在 5G 標(biāo)準(zhǔn)正在研發(fā),快發(fā)布了,據(jù)說(shuō) 2019 年發(fā)布,2020 年商用。但是目前還沒(méi)有手機(jī)支持 5G 通信,就跟現(xiàn)在沒(méi)有編譯器支持 C11 標(biāo)準(zhǔn)一樣。

不同編譯器,甚至對(duì) C 標(biāo)準(zhǔn)的支持也不一樣。有的編譯器只支持 ANSI C,這是目前默認(rèn)的 C 標(biāo)準(zhǔn)。有的編譯器可以支持 C99,或者支持 C99 標(biāo)準(zhǔn)的部分特性。目前對(duì) C99 標(biāo)準(zhǔn)支持最好的是 GNU C 編譯器,據(jù)說(shuō)可以支持 C99標(biāo)準(zhǔn)99%的新增特性。

編譯器對(duì) C 標(biāo)準(zhǔn)的擴(kuò)展

不同編譯器,出于開(kāi)發(fā)環(huán)境、硬件平臺(tái)、性能優(yōu)化的需要,除了支持 C 標(biāo)準(zhǔn)外,還會(huì)自己做一些擴(kuò)展。

51單片機(jī)上用 C 語(yǔ)言開(kāi)發(fā)程序,我們經(jīng)常使用 Keil for C51 集成開(kāi)發(fā)環(huán)境。你會(huì)發(fā)現(xiàn) Keil for C51 或其他 IDE 里的 C 編譯器會(huì)對(duì) C 語(yǔ)言標(biāo)準(zhǔn)作很多擴(kuò)展。比如增加各種關(guān)鍵字:

  • data:RAM 的低128B空間,單周期直接尋址;
  • code:表示程序存儲(chǔ)區(qū);
  • bit:位變量,常用來(lái)定義單片機(jī)的 P0~P3 管腳;
  • sbit:特殊功能位變量;
  • sfr:特殊功能寄存器;
  • reentrant:重入函數(shù)聲明。

如果你在程序中使用以上這些關(guān)鍵字,那么你的程序就只能使用51編譯器來(lái)編譯運(yùn)行,你使用其它的編譯器,比如 VC++6.0,是編譯通不過(guò)的。

同樣的道理,GCC 編譯器,也對(duì) C 標(biāo)準(zhǔn)做了很多擴(kuò)展:

  • 零長(zhǎng)度數(shù)組
  • 語(yǔ)句表達(dá)式
  • 內(nèi)建函數(shù)
  • __attribute__特殊屬性聲明
  • 標(biāo)號(hào)元素
  • case 范圍
  • ...

比如支持零長(zhǎng)度數(shù)組。這些新增的特性,C 標(biāo)準(zhǔn)目前是不支持的,其它編譯器也不支持。如果你在程序中定義一個(gè)零長(zhǎng)度數(shù)組:

int a[0];

只能使用 GCC 編譯器才能正確編譯,使用 VC++ 6.0編譯器編譯可能就通不過(guò),因?yàn)槲④浀?C++ 編譯器不支持這個(gè)特性。

教程主要內(nèi)容

本文是《C語(yǔ)言嵌入式Linux高級(jí)編程》第5期:Linux內(nèi)核中GNU C語(yǔ)法擴(kuò)展視頻教程的文本預(yù)覽版,如果想系統(tǒng)學(xué)習(xí)一下C語(yǔ)言標(biāo)準(zhǔn)及Linux內(nèi)核中的GNU C擴(kuò)展語(yǔ)法,可以到51CTO學(xué)院或CSDN學(xué)院搜索講師名字:“王利濤”,即可觀看相關(guān)教程?;蛘咴诎俣戎?,直接搜索“王利濤”也可以找到相關(guān)視頻教程。

在 GNU 開(kāi)源軟件、Linux 內(nèi)核中會(huì)大量使用 GCC 自己擴(kuò)展的語(yǔ)法,這會(huì)對(duì)我們理解開(kāi)源軟件、Linux 內(nèi)核代碼帶來(lái)一定障礙和困擾。本教程主要介紹 GNU C 對(duì) C 標(biāo)準(zhǔn)擴(kuò)展的一些常用語(yǔ)法和使用。終極目標(biāo)是看懂 Linux 內(nèi)核驅(qū)動(dòng)、GNU 開(kāi)源軟件中這些特殊語(yǔ)法的應(yīng)用,掃除這些特殊語(yǔ)法對(duì)我們理解內(nèi)核代碼帶來(lái)的困擾和障礙。

本教程需要的學(xué)習(xí)環(huán)境

在本教程講解中,會(huì)使用一些 arm-linux-gnueabi-gcc 等命令用來(lái)編譯和反匯編程序。所以在學(xué)習(xí)本教程之前,確保你的電腦上有如下 Linux 環(huán)境或源代碼:

  • Linux學(xué)習(xí)環(huán)境:Ubuntu、Fedora等皆可;
  • arm-linux-gnueabi-gcc 交叉編譯工具;
  • Linux 內(nèi)核源碼:Linux 4.4.x
  • U-boot-2016.09 源代碼
備注

本教程是《C語(yǔ)言嵌入式Linux高級(jí)編程》第5期:Linux內(nèi)核中的GNU C語(yǔ)法擴(kuò)展,文本預(yù)覽版,如果想系統(tǒng)學(xué)習(xí)Linux內(nèi)核中的各種GNU C擴(kuò)展及使用技巧,可百度搜索:“王利濤”,到51CTO學(xué)院或CSDN學(xué)院點(diǎn)擊相關(guān)課程即可開(kāi)始系統(tǒng)學(xué)習(xí)。

如果您手頭暫時(shí)沒(méi)有 Linux 學(xué)習(xí)環(huán)境,也可以在 Windows 環(huán)境下安裝 C-Free 學(xué)習(xí)。教程中的 C 語(yǔ)言示例程序在 C-Free 環(huán)境下面也能編譯通過(guò)。當(dāng)然在這里,還是建議您使用虛擬機(jī)安裝一個(gè) Linux 學(xué)習(xí)環(huán)境,一個(gè)良好的環(huán)境更有利于我們的學(xué)習(xí),在安裝過(guò)程有什么疑惑,可以通過(guò)郵件(3284757626@qq.com)聯(lián)系,也可以加入QQ群(475504428),參與技術(shù)討論。

微信公眾號(hào):宅學(xué)部落

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140971
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    317

    瀏覽量

    22292
  • GNU
    GNU
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    17831
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言相關(guān)資料(編程規(guī)范,語(yǔ)法解析等等)

    眼不說(shuō),隔一段時(shí)間再看的時(shí)候?qū)嵲谑琴M(fèi)很大氣力;有一些基礎(chǔ)的C語(yǔ)言語(yǔ)法,或許你看過(guò)郭天祥的51那本書(shū)之后就沒(méi)有再深究過(guò)了,不是說(shuō)郭天祥大哥寫(xiě)的書(shū)不好,而是或許那些知識(shí)入門(mén)綽綽有余,但是我們有必要深究常用C
    發(fā)表于 12-23 17:19

    請(qǐng)問(wèn)下面的C語(yǔ)言語(yǔ)句表達(dá)什么意思?

    下面的C語(yǔ)言語(yǔ)句表達(dá)什么意思??
    發(fā)表于 11-01 04:14

    C語(yǔ)言語(yǔ)句的規(guī)則函數(shù)

    的,而C語(yǔ)言語(yǔ)句的規(guī)則函數(shù)返回的數(shù)據(jù)類(lèi)型+函數(shù)名+參數(shù)+函數(shù)主體所以這幾行代碼也就不難理解了。該函數(shù)類(lèi)型是void型,函數(shù)名稱(chēng)是Delay,_IO是類(lèi)型修飾符,指的是單片機(jī)的靜態(tài)IO口;uint_32_t是指32位的無(wú)符號(hào)整形變量;由for循環(huán)構(gòu)成了函數(shù)的主體,意思是32
    發(fā)表于 07-14 08:13

    Linux內(nèi)核中GNU C擴(kuò)展的一些常用C語(yǔ)言語(yǔ)法分析

    13.1 總結(jié)前面12節(jié)的課程,主要針對(duì) Linux 內(nèi)核中 GNU C 擴(kuò)展的一些常用 C 語(yǔ)言語(yǔ)法進(jìn)行了分析。GNU C 的這些
    發(fā)表于 12-14 06:29

    Linux內(nèi)核中的C語(yǔ)言語(yǔ)法擴(kuò)展

    收集一些感覺(jué)比較好的博客鏈接,方便以后再看Linux 內(nèi)核中的 C 語(yǔ)言語(yǔ)法擴(kuò)展Linux 內(nèi)核驅(qū)動(dòng)中的指定初始化宏構(gòu)造利器:語(yǔ)句表達(dá)式Linux 內(nèi)核第一宏:container_of零長(zhǎng)
    發(fā)表于 12-15 06:04

    YACC在ATLAS語(yǔ)言語(yǔ)法分析中的沖突消解研究

    對(duì)使用YACC工具進(jìn)行ATLAS語(yǔ)言語(yǔ)法分析過(guò)程中出現(xiàn)的大量沖突進(jìn)行了詳細(xì)的分類(lèi)討論與研究,給出了實(shí)現(xiàn)過(guò)程中出現(xiàn)的主要沖突類(lèi)型及相應(yīng)解決方案:文法符號(hào)的不斷自身循環(huán)產(chǎn)生
    發(fā)表于 09-08 15:30 ?0次下載

    C語(yǔ)言語(yǔ)法基礎(chǔ)

    發(fā)表于 07-06 15:18 ?7次下載

    C語(yǔ)言誤用易錯(cuò)知識(shí)點(diǎn)與基本語(yǔ)法匯總

    語(yǔ)言之所以能稱(chēng)之為語(yǔ)言,它肯定是一種工具一種相互交流相互通信相互傳達(dá)之間的意圖的工具,作為語(yǔ)言那肯定得有自己的語(yǔ)法,要想相互交流肯定得先學(xué)好它的語(yǔ)法
    發(fā)表于 05-05 15:32 ?2165次閱讀

    Prel語(yǔ)法C語(yǔ)言語(yǔ)法的異同綜述

    Prel語(yǔ)法C語(yǔ)言語(yǔ)法的異同綜述
    發(fā)表于 05-25 11:44 ?6次下載

    嵌入式系統(tǒng)常用的C語(yǔ)言基本語(yǔ)法概要

    嵌入式系統(tǒng)常用的C語(yǔ)言基本語(yǔ)法概要
    發(fā)表于 10-20 12:51 ?6次下載
    嵌入式系統(tǒng)常用的<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>基本<b class='flag-5'>語(yǔ)法</b>概要

    單片機(jī)中常用的C語(yǔ)言語(yǔ)句合集

    單片機(jī)中常用的C語(yǔ)言語(yǔ)句合集
    發(fā)表于 01-12 09:24 ?45次下載

    C語(yǔ)言有哪些語(yǔ)法技巧和功能

    C語(yǔ)言常常讓人覺(jué)得它所能表達(dá)的東西非常有限。它不具有類(lèi)似第一級(jí)函數(shù)和模式匹配這樣的高級(jí)功能。但是C非常簡(jiǎn)單,并且仍然有一些非常有用的語(yǔ)法技巧和功能,只是沒(méi)有多少人知道罷了。
    的頭像 發(fā)表于 03-10 17:42 ?2258次閱讀

    第九章 AVR C語(yǔ)言的應(yīng)用.PDF

    本教程講解的是AVR C語(yǔ)言編程,包括開(kāi)發(fā)環(huán)境、語(yǔ)言語(yǔ)法、特殊用法基礎(chǔ)知識(shí)的講解
    發(fā)表于 03-17 14:21 ?0次下載

    C語(yǔ)言_語(yǔ)句與位運(yùn)算基本練習(xí)

    總結(jié)C語(yǔ)言語(yǔ)句的幾個(gè)基本練習(xí)題,計(jì)算素?cái)?shù)、排序、求偶數(shù)和、可逆素?cái)?shù)、水仙花數(shù)、交換大小寫(xiě)、交換變量的值、位運(yùn)算、語(yǔ)法特性等知識(shí)點(diǎn)。
    的頭像 發(fā)表于 08-14 09:46 ?1368次閱讀

    初學(xué)C語(yǔ)言不了解的那些事~

    其實(shí)C語(yǔ)言語(yǔ)法非常簡(jiǎn)單,可以說(shuō)是目前主流編程語(yǔ)言語(yǔ)法點(diǎn)最少的一門(mén)編程語(yǔ)言了,然而C
    發(fā)表于 08-07 10:00 ?345次閱讀