91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级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編程能力

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-06-09 10:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

目前C語(yǔ)言被應(yīng)用得最多的估計(jì)就是嵌入式了,在學(xué)校學(xué)習(xí)完C語(yǔ)言,考完等級(jí)考試之后,可能就會(huì)覺(jué)得自己的C語(yǔ)言掌握的還可以了。但這其實(shí)只能算入門(mén),像結(jié)構(gòu)體,指針等內(nèi)容還有很多東西需要去深究,還有GNU的一些補(bǔ)充語(yǔ)法。接下來(lái),我們來(lái)探討一下如何提升!

打怪升級(jí)

1. C語(yǔ)言三劍客

C語(yǔ)言經(jīng)典三劍客《C和指針》《C陷阱與缺陷》《C專家編程》,這三本書(shū)相信很多人都聽(tīng)過(guò)。對(duì)于想提升C編程能力,這三本是絕對(duì)要去閱讀一下的。單純閱讀肯定很枯燥,所以閱讀過(guò)程中還是要去動(dòng)動(dòng)手的。這三本書(shū)的章節(jié)其實(shí)也沒(méi)什么必然的關(guān)聯(lián)性,所以建議大家可以挑著看,最近想看研究一下指針,就看"指針"的章節(jié), 想研究動(dòng)態(tài)內(nèi)存分配, 就看"動(dòng)態(tài)內(nèi)存分配"章節(jié)。畢竟這不是入門(mén)書(shū)籍。

2. GNU C語(yǔ)法

首先我們先來(lái)了解一些概念,ANSI C 、POSIX C、GNU C到底是啥?之間到底有啥關(guān)系?

  • ANSI C :由美國(guó)國(guó)家標(biāo)準(zhǔn)局為C語(yǔ)言制定了一套完整的國(guó)際標(biāo)準(zhǔn)語(yǔ)法,稱為ANSI C,作為C語(yǔ)言最初的標(biāo)準(zhǔn)。

  • POSIX C :POSIX中文翻譯:可移植操作系統(tǒng)接口,POSIX標(biāo)準(zhǔn)的誕生是為了統(tǒng)一個(gè)操作系統(tǒng)的接口,方便開(kāi)發(fā)者開(kāi)發(fā)程序,寫(xiě)出可移植的代碼程序

  • GNU C:GNU的C函數(shù)庫(kù),其實(shí)就是glibc,它是Linux上最重要的函數(shù)庫(kù),它定義了 ANSI C 標(biāo)準(zhǔn)指定的所有的庫(kù)函數(shù),以及由POSIX或其他UNIX操作系統(tǒng)變種指定的附加特色,還包括有與GNU系統(tǒng)相關(guān)的擴(kuò)展。

OK, 有了上面的概念之后。你可能會(huì)明白為什么有時(shí)候會(huì)看到一些奇怪的語(yǔ)法,然后去查課本又找不到。目前大學(xué)里的課本是按ANSI C來(lái)編寫(xiě)的,都是標(biāo)準(zhǔn)的C語(yǔ)言語(yǔ)法。所以也不用課本垃圾,語(yǔ)法編寫(xiě)不完整!

回到GNU C上面,GUN C提供了一些新的語(yǔ)法功能,對(duì)于做Linux開(kāi)發(fā)的,肯定是必須要接觸的。比如:GNU C支持零長(zhǎng)度數(shù)組。


typedef struct test1{    int len;    char a[0];    // 零長(zhǎng)度數(shù)組}TEST1;

這個(gè)時(shí)候數(shù)組是不占用內(nèi)存的,如果聲明指針是會(huì)占用內(nèi)存的。這玩意有什么作用呢?簡(jiǎn)單看一下下面的代碼:


#include#include #include 
typedef struct test1{  int a;  char b[0]; //零長(zhǎng)度數(shù)組}TEST1;

int main(){  char str[] = "helloworld";//malloc分配空間  TEST1* test1 = (TEST1*)malloc(sizeof(TEST1) + 20);  printf("%p
", &(test1->a));  printf("%p
", (test1->b));  //字符串復(fù)制  memcpy(test1->b, str, sizeof(str));  printf("%s
", test1->b);}

這個(gè)時(shí)候我們就可以通過(guò)結(jié)構(gòu)體(TEST1)成員b去訪問(wèn)后面的地址了。它更多是被用在長(zhǎng)度不確定的數(shù)據(jù)上。大家還可以去思考對(duì)比一下和指針的差異!

3.閱讀開(kāi)源代碼

個(gè)人認(rèn)為,閱讀一下好的開(kāi)源代碼或者原廠提供的一些SDK,對(duì)于個(gè)人編碼能力會(huì)有很大提升。學(xué)習(xí)他們一些好的編碼規(guī)范和整體架構(gòu)設(shè)計(jì)理念,最最經(jīng)典的當(dāng)然就是Linux系統(tǒng)了。其實(shí)閱讀源碼并不一定要完全理解代碼功能之類的 ,我們更多是去學(xué)習(xí)為什么這么寫(xiě), 這么寫(xiě)用什么好處。當(dāng)然了,也并不是所有都是好的,我們也是取其精華去其糟粕嘛!

來(lái)看個(gè)小例子


#defineMAX(a,b)((a)>(b)?(a):(b))int max( int a, int b){return((a>b)?a:b);}

上面是要對(duì)比兩個(gè)數(shù)的大小,一個(gè)是用宏實(shí)現(xiàn),一個(gè)使用函數(shù)實(shí)現(xiàn)。你覺(jué)得哪個(gè)比較好?

首先,宏會(huì)比較簡(jiǎn)潔;然后宏可以傳遞各種類型的參數(shù),而函數(shù)只能傳遞int類型的;最后函數(shù)調(diào)用會(huì)帶來(lái)額外的開(kāi)銷,它需要開(kāi)辟一片??臻g,記錄返回地址,將形參壓棧,從函數(shù)返回還要釋放堆棧。

但是宏也有缺點(diǎn),宏在預(yù)編譯時(shí)會(huì)拷貝到所有調(diào)用的位置,這樣就會(huì)使編譯出來(lái)的文件變大。

所以這需要看實(shí)際情況來(lái)選擇了,這個(gè)東西我也是在Linux源碼上發(fā)現(xiàn)的,Linux最近更新的版本很經(jīng)常將一些函數(shù)替換成宏的形式。所以多閱讀,多思考,會(huì)提升很快的!

4. 多踩坑,多思考

這東西說(shuō)起來(lái)很虛,實(shí)踐出真知!只有在做項(xiàng)目的時(shí)候,你才會(huì)知道,原來(lái)某些東西組合起來(lái)一起用會(huì)有這么多坑。還有就是多思考,多總結(jié),這絕對(duì)會(huì)事半功倍!不要覺(jué)得,反正是“面向?yàn)g覽器編程”,記那么多干嘛。

審核編輯 :李倩

聲明:本文內(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)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7402

    瀏覽量

    129342
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7644

    瀏覽量

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

    關(guān)注

    0

    文章

    144

    瀏覽量

    18323

原文標(biāo)題:如何提高C編程能力

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    10AX022C3U19I2SG現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)芯片

    10AX022C3U19I2SG現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)芯片10AX022C3U19I2SG是英特爾(Intel)旗下Arria 10 GX系列的一款FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)器
    發(fā)表于 02-27 09:31

    音頻應(yīng)用的利器:DS4420 I2C編程增益放大器

    音頻應(yīng)用的利器:DS4420 I2C編程增益放大器 在音頻應(yīng)用領(lǐng)域,一款性能出色的放大器對(duì)于提升音質(zhì)和實(shí)現(xiàn)精準(zhǔn)控制至關(guān)重要。今天,我們就來(lái)深入了解一下Dallas Semiconductor
    的頭像 發(fā)表于 01-15 09:25 ?285次閱讀

    嵌入式應(yīng)掌握的幾種能力

    1. 編程語(yǔ)言 基本掌握嵌入式必備的編程語(yǔ)言。C語(yǔ)言為主,C++為輔。在資源有限的情況下,大多數(shù)嵌入式產(chǎn)品還是使用C語(yǔ)言為主的,特別是底層
    發(fā)表于 12-08 06:05

    C語(yǔ)言的編程技巧

    設(shè)計(jì),分層開(kāi)發(fā)代碼,便于理解和維護(hù)。 ?8、避免使用GOTO語(yǔ)句?:盡管GOTO語(yǔ)句在某些情況下仍然有用,但現(xiàn)代編程更傾向于使用函數(shù)和循環(huán)控制結(jié)構(gòu),以提高代碼的可讀性和維護(hù)性。 ?9、利用C語(yǔ)言的靈活性
    發(fā)表于 11-27 06:46

    一文了解Mojo編程語(yǔ)言

    Mojo 是一種由 Modular AI 公司開(kāi)發(fā)的編程語(yǔ)言,旨在將 Python 的易用性與 C 語(yǔ)言的高性能相結(jié)合,特別適合人工智能(AI)、高性能計(jì)算(HPC)和系統(tǒng)級(jí)編程場(chǎng)景。以下是關(guān)于
    發(fā)表于 11-07 05:59

    芯盾時(shí)代助力遼寧某銀行提升移動(dòng)端安全防護(hù)能力

    芯盾時(shí)代中標(biāo)遼寧某銀行!芯盾時(shí)代設(shè)備指紋技術(shù)具備高精度的設(shè)備識(shí)別能力,通過(guò)基于自主研發(fā)的算法,結(jié)合后臺(tái)設(shè)備信息,為設(shè)備產(chǎn)生專有的ID,能夠幫助銀行提升移動(dòng)端安全防護(hù)能力,精準(zhǔn)區(qū)分合法與風(fēng)險(xiǎn)行為。
    的頭像 發(fā)表于 10-31 09:48 ?552次閱讀
    芯盾時(shí)代助力遼寧某銀行<b class='flag-5'>提升</b>移動(dòng)端安全防護(hù)<b class='flag-5'>能力</b>

    電網(wǎng)結(jié)構(gòu)優(yōu)化具體是如何提升新能源發(fā)電的消納能力的?

    電網(wǎng)結(jié)構(gòu)優(yōu)化提升新能源消納能力的核心邏輯,是 針對(duì)新能源消納的核心痛點(diǎn)(時(shí)空分布不均、出力波動(dòng)大、并網(wǎng)通道不足、局部承載有限),通過(guò)重構(gòu)電網(wǎng)的 “輸送路徑、分配方式、平衡機(jī)制、調(diào)節(jié)能力”,構(gòu)建 “能
    的頭像 發(fā)表于 10-14 17:40 ?1171次閱讀

    技能+1!如何在樹(shù)莓派上使用C++控制GPIO?

    和PiGPIO等庫(kù),C++可用于編程控制樹(shù)莓派的GPIO引腳。它提供了更好的性能和控制能力,非常適合對(duì)速度和精度要求較高的硬件項(xiàng)目。在樹(shù)莓派社區(qū)中,關(guān)于“Python
    的頭像 發(fā)表于 08-06 15:33 ?4165次閱讀
    技能+1!如何在樹(shù)莓派上使用<b class='flag-5'>C</b>++控制GPIO?

    在STM32F103c8上做DLQR最優(yōu)控制算法的C編程資料

    這是我近期做的一個(gè)項(xiàng)目--基于STM32F103c8的DLQR控制算法的C編程,涉及DLQR最優(yōu)控制算法、嵌入式STM32F103編程、CMSIS-DSP庫(kù)使用。? ??附有完整的程序
    發(fā)表于 07-23 15:30 ?0次下載

    D3502C:低靜態(tài)電流設(shè)計(jì),延長(zhǎng)設(shè)備續(xù)航能力

    ? ? ? ? 在當(dāng)今電子設(shè)備日益便攜化和智能化的背景下,電源管理芯片的低功耗設(shè)計(jì)成為提升設(shè)備續(xù)航能力的關(guān)鍵因素之一。D3502C?高壓降壓轉(zhuǎn)換器,憑借其低靜態(tài)電流設(shè)計(jì),顯著延長(zhǎng)了電池供電設(shè)備
    的頭像 發(fā)表于 07-14 14:53 ?615次閱讀

    深入理解C語(yǔ)言:函數(shù)—編程中的“積木塊”藝術(shù)

    編程的世界里,函數(shù)就像建筑中的“積木塊”——它們是構(gòu)建復(fù)雜程序的基石。通過(guò)靈活組合這些模塊,開(kāi)發(fā)者能打造出功能強(qiáng)大且結(jié)構(gòu)清晰的代碼。函數(shù)之所以成為C語(yǔ)言的核心,正是因?yàn)樗鉀Q了編程中的三大關(guān)
    的頭像 發(fā)表于 06-30 17:26 ?1882次閱讀
    深入理解<b class='flag-5'>C</b>語(yǔ)言:函數(shù)—<b class='flag-5'>編程</b>中的“積木塊”藝術(shù)

    DevEco CodeGenie 鴻蒙AI 輔助編程初次使用

    一、工具概述與核心能力 DevEco CodeGenie 是集成在 DevEco Studio 中的 AI 輔助編程插件,專為 HarmonyOS 應(yīng)用開(kāi)發(fā)設(shè)計(jì),提供三大核心能力: 智能知識(shí)問(wèn)答
    的頭像 發(fā)表于 06-26 08:48 ?928次閱讀

    單片機(jī)c語(yǔ)言編程實(shí)例大全

    單片機(jī)c語(yǔ)言編程實(shí)例大全_18
    發(fā)表于 04-30 16:11 ?7次下載

    如何提升自己的電路設(shè)計(jì)能力,以及編程能力

    想自己設(shè)計(jì)一個(gè)電路,但是不知道如何開(kāi)始,需要哪些流程,電路相關(guān)的知識(shí)融合不到一起去,求教
    發(fā)表于 04-09 16:08

    接入DeepSeek后智慧場(chǎng)館的能力提升

    的飛躍。以下是DeepSeek賦能智慧場(chǎng)館后的核心能力提升: 1. 認(rèn)知智能升級(jí),實(shí)現(xiàn)更自然的交互體驗(yàn) 智能語(yǔ)音助手2.0:基于DeepSeek強(qiáng)大的NLP能力,場(chǎng)館智能客服可支持多輪復(fù)雜對(duì)話,準(zhǔn)確理解模糊語(yǔ)義(如"離我最近的洗
    的頭像 發(fā)表于 04-02 11:57 ?597次閱讀