那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何提升C編程能力

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-06-09 10:24 ? 次閱讀

前言

目前C語言被應用得最多的估計就是嵌入式了,在學校學習完C語言,考完等級考試之后,可能就會覺得自己的C語言掌握的還可以了。但這其實只能算入門,像結構體,指針等內容還有很多東西需要去深究,還有GNU的一些補充語法。接下來,我們來探討一下如何提升!

打怪升級

1. C語言三劍客

C語言經典三劍客《C和指針》《C陷阱與缺陷》《C專家編程》,這三本書相信很多人都聽過。對于想提升C編程能力,這三本是絕對要去閱讀一下的。單純閱讀肯定很枯燥,所以閱讀過程中還是要去動動手的。這三本書的章節其實也沒什么必然的關聯性,所以建議大家可以挑著看,最近想看研究一下指針,就看"指針"的章節, 想研究動態內存分配, 就看"動態內存分配"章節。畢竟這不是入門書籍。

2. GNU C語法

首先我們先來了解一些概念,ANSI C 、POSIX C、GNU C到底是啥?之間到底有啥關系?

  • ANSI C :由美國國家標準局為C語言制定了一套完整的國際標準語法,稱為ANSI C,作為C語言最初的標準。

  • POSIX C :POSIX中文翻譯:可移植操作系統接口,POSIX標準的誕生是為了統一個操作系統的接口,方便開發者開發程序,寫出可移植的代碼程序

  • GNU C:GNU的C函數庫,其實就是glibc,它是Linux上最重要的函數庫,它定義了 ANSI C 標準指定的所有的庫函數,以及由POSIX或其他UNIX操作系統變種指定的附加特色,還包括有與GNU系統相關的擴展。

OK, 有了上面的概念之后。你可能會明白為什么有時候會看到一些奇怪的語法,然后去查課本又找不到。目前大學里的課本是按ANSI C來編寫的,都是標準的C語言語法。所以也不用課本垃圾,語法編寫不完整!

回到GNU C上面,GUN C提供了一些新的語法功能,對于做Linux開發的,肯定是必須要接觸的。比如:GNU C支持零長度數組。


typedef struct test1{    int len;    char a[0];    // 零長度數組}TEST1;

這個時候數組是不占用內存的,如果聲明指針是會占用內存的。這玩意有什么作用呢?簡單看一下下面的代碼:


#include#include #include 
typedef struct test1{  int a;  char b[0]; //零長度數組}TEST1;

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

這個時候我們就可以通過結構體(TEST1)成員b去訪問后面的地址了。它更多是被用在長度不確定的數據上。大家還可以去思考對比一下和指針的差異!

3.閱讀開源代碼

個人認為,閱讀一下好的開源代碼或者原廠提供的一些SDK,對于個人編碼能力會有很大提升。學習他們一些好的編碼規范和整體架構設計理念,最最經典的當然就是Linux系統了。其實閱讀源碼并不一定要完全理解代碼功能之類的 ,我們更多是去學習為什么這么寫, 這么寫用什么好處。當然了,也并不是所有都是好的,我們也是取其精華去其糟粕嘛!

來看個小例子


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

上面是要對比兩個數的大小,一個是用宏實現,一個使用函數實現。你覺得哪個比較好

首先,宏會比較簡潔;然后宏可以傳遞各種類型的參數,而函數只能傳遞int類型的;最后函數調用會帶來額外的開銷,它需要開辟一片棧空間,記錄返回地址,將形參壓棧,從函數返回還要釋放堆棧。

但是宏也有缺點,宏在預編譯時會拷貝到所有調用的位置,這樣就會使編譯出來的文件變大。

所以這需要看實際情況來選擇了,這個東西我也是在Linux源碼上發現的,Linux最近更新的版本很經常將一些函數替換成宏的形式。所以多閱讀,多思考,會提升很快的!

4. 多踩坑,多思考

這東西說起來很虛,實踐出真知!只有在做項目的時候,你才會知道,原來某些東西組合起來一起用會有這么多坑。還有就是多思考,多總結,這絕對會事半功倍!不要覺得,反正是“面向瀏覽器編程”,記那么多干嘛。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6896

    瀏覽量

    123756
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137738
  • GNU
    GNU
    +關注

    關注

    0

    文章

    143

    瀏覽量

    17542

原文標題:如何提高C編程能力

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    云知學院開展AI賦能專項能力提升培訓

    為順應時代潮流趨勢,提升員工的工作效率和生產力,培養員工從“能用”到“善用”生成式人工智能工具的能力,近日,元翔廈門空港邀請云知學院開展AI賦能專項能力提升培訓。
    的頭像 發表于 11-21 14:10 ?241次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的
    的頭像 發表于 11-01 16:51 ?473次閱讀

    對TMS320VC5503/C5506/C5507/C5509/C5509A I2C外設進行編程

    電子發燒友網站提供《對TMS320VC5503/C5506/C5507/C5509/C5509A I2C外設進行
    發表于 10-18 09:53 ?0次下載
    對TMS320VC5503/<b class='flag-5'>C</b>5506/<b class='flag-5'>C</b>5507/<b class='flag-5'>C</b>5509/<b class='flag-5'>C</b>5509A I2<b class='flag-5'>C</b>外設進行<b class='flag-5'>編程</b>

    TMS320C24x/C240x CAN的編程示例

    電子發燒友網站提供《TMS320C24x/C240x CAN的編程示例.pdf》資料免費下載
    發表于 10-17 09:30 ?0次下載
    TMS320<b class='flag-5'>C</b>24x/<b class='flag-5'>C</b>240x CAN的<b class='flag-5'>編程</b>示例

    C/C中對TMS320x28xx和28xxx外設進行編程

    電子發燒友網站提供《在C/C中對TMS320x28xx和28xxx外設進行編程.pdf》資料免費下載
    發表于 10-16 10:28 ?0次下載
    在<b class='flag-5'>C</b>/<b class='flag-5'>C</b>中對TMS320x28xx和28xxx外設進行<b class='flag-5'>編程</b>

    C2000?微控制器的USB閃存編程

    電子發燒友網站提供《C2000?微控制器的USB閃存編程.pdf》資料免費下載
    發表于 09-26 11:30 ?0次下載
    <b class='flag-5'>C</b>2000?微控制器的USB閃存<b class='flag-5'>編程</b>

    embOS的MISRA-C:2012一致性

    MISRA C是汽車工業軟件可靠性協會(MISRA)開發的一套針對C編程語言的軟件開發指南,目的是提升嵌入式系統的安全性和可移植性。2012發布的MISRA
    的頭像 發表于 08-20 11:35 ?585次閱讀

    智慧水利山洪災害防御能力提升系統

    一、背景隨著科技的快速發展,智慧水利技術逐漸成為解決水資源管理、水環境保護以及水災防治等問題的關鍵手段。其中,智慧水利山洪災害防御能力提升系統,作為智慧水利的重要組成部分,其在保障人民生命財產安全
    的頭像 發表于 08-05 14:42 ?335次閱讀
    智慧水利山洪災害防御<b class='flag-5'>能力</b><b class='flag-5'>提升</b>系統

    如何提高LoRa抗干擾能力提升通信質量的幾種技術分享

    LoRa(Long?Range)技術憑借其遠距離傳輸、低功耗和高抗干擾能力,在物聯網(IoT)領域得到了廣泛應用。 LoRa技術 強大的抗干擾能力不僅提高了信號的穩定性和通信距離,還提升了數據
    的頭像 發表于 07-23 18:37 ?1479次閱讀

    如何提升嵌入式編程能力?

    如何提升嵌入式編程能力? 要提升嵌入式編程能力,可以從以下幾點學習: 1. 理解硬件:熟悉你正
    發表于 06-21 10:01

    PLC編程語言和C語言的區別

    在工業自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言和C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯
    的頭像 發表于 06-14 17:11 ?3243次閱讀

    如何提升代碼質量與效率的秘訣

    提高編程能力其實沒有捷徑,最佳方式就是多寫代碼。 不過,除了寫大量代碼,提升編程能力還需要大量閱讀別人寫的代碼。
    的頭像 發表于 04-28 14:53 ?452次閱讀
    如何<b class='flag-5'>提升</b>代碼質量與效率的秘訣

    分布式智慧終端提升環保監測能力的成功案例

    訊維分布式智慧終端在提升環保監測能力方面的成功案例,可能涉及其在不同環保監測場景中的應用和實際效果。以下是一個假設性的成功案例,以展示訊維分布式智慧終端如何在實際操作中提升環保監測能力
    的頭像 發表于 04-08 15:29 ?411次閱讀

    如何成為一名嵌入式C語言高手?

    文獻、參加相關的培訓課程、關注行業動態和參與技術討論是不可或缺的。同時,我們也要勇于挑戰自己,接觸一些復雜的嵌入式項目,通過實踐不斷提升自己的編程能力和解決問題的能力。 總結來說,成為
    發表于 04-07 16:03

    如何成為一名嵌入式C語言高手?

    文獻、參加相關的培訓課程、關注行業動態和參與技術討論是不可或缺的。同時,我們也要勇于挑戰自己,接觸一些復雜的嵌入式項目,通過實踐不斷提升自己的編程能力和解決問題的能力。 總結來說,成為
    發表于 03-25 14:12
    金榜百家乐的玩法技巧和规则| 呼伦贝尔市| 金榜百家乐官网的玩法技巧和规则 | 百家乐经典路单| 加多宝百家乐官网的玩法技巧和规则 | 大发888官网用户登录| 百家乐平台出租家乐平台出租| 百家乐官网水晶筹码| 德州扑克大盲注| 百家乐娱乐网送68元| 百家乐投注开户| 杨公风水24山分金水法| 百家乐官网封号| 百家乐官网心得分享| 巨野县| 汉百家乐春| 网上百家乐| 武汉百家乐赌具| 百家乐怎样玩的| 百家乐电子路单破解| 百家乐官网庄牌| 乐天百家乐官网的玩法技巧和规则 | 视频百家乐官网网站| 赌场百家乐官网是如何玩| 万山特区| 顶级赌场网址| 网上赌博网站| 原平市| 金沙百家乐官网娱乐城场| 体球网足球比分| 云安县| 太阳城百家乐官网杀猪吗| 百家乐官网的必赢术| 百家乐官网筹码方| 百家乐官网国际娱乐城| 百家乐官网现金网平台排行榜| 百家乐官网赌博娱乐| 易胜博百家乐官网作弊| 娱乐百家乐官网可以代理吗| 百家乐有赢钱公式吗| 百家乐换人|