開發的坑 C語言開發100坑

2021-10-25 13:05:50 字數 2359 閱讀 1410

c語言開發的****: (早關注我的鳥兒,有蟲吃)

坑0:**是如何變成可執行程式的?

源**:

#include int main()

預編譯:

gcc -e hello.c -o hello.i
編譯:

gcc -s hello.i -o hello.s
彙編:

gcc -c hello.s -o hello.o

gcc hello.o -o hello
疑問:printf的函式實現在**呢?

其實是動態鏈結庫libc.so.6,可通過ldd命令檢視。

坑1:預處理中的坑?

#ifndef _mod_sec_

#include "sec.h"

#endif

#define sec_len 1024

#define sec_timer 100

坑2:靜態區域性變數和普通區域性變數的坑?

static 靜態區域性變數只初始化一次,再次呼叫函式它還在。

普通區域性變數出了函式就沒了,再次呼叫函式會重新初始化。
坑3:靜態全域性變數和普通全域性變數的坑?

static 靜態全域性變數放在.c檔案中,其他檔案無法直接訪問,想訪問需要實現get 介面

普通全域性變數放在.c檔案中,其他檔案中想訪問,需要通過extern 申明
坑4:位元組對齊的坑?

typedef struct tagaisec

ai_sec_s;

sizeof(ai_sec_s);//大小等於 8

typedef struct tagaisec

ai_sec_s;

ai_sec_s stai1;

ai_sec_s stai2;

stai1.ailx0 = 0;

stai1.ailx1 = 'a';

stai2.ailx0 = 0;

stai2.ailx1 = 'a';

memcmp(&stai1,&stai2,sizeof(ai_sec_s));// 不等於0

坑5:sizeof 和 strlen 求大小的坑?

char hack = "ailx10";

char *p = hack;

sizeof(hack); // 等於6

sizeof(p); //等於8

void foo(char hack[1024])

char hack = "hack-ailx10";

foo(hack);

// 所以老鐵,向函式中傳遞陣列的時候,傳遞的實際是指標,你需要另乙個引數指定陣列的大小。

#include #include #define ai_hack_len_1 strlen("ai_hack_len")  // 11

#define ai_hack_len_2 sizeof("ai_hack_len") // 12

int main()

// 所以老鐵,sizeof 求字串長度是實際長度要大1,因為字串結尾的0也算進去啦。

坑6:字串陣列與字串指標的坑?

c 語言常見問題集 (中文)​c-faq-chn.sourceforge.net

坑100: 當程式莫名其妙掛掉了怎麼辦?

謝謝閱讀~

Flutter開發的坑

現象flutter建立專案失敗could not find an option named androidx 解決辦法 flutter update force dependencies 分包處理 protected void attachbasecontext context base 此時要去掉...

樹莓派c 開發踩坑

這幾年用慣了高階語言,c 當年還是c99標準的,尋思這回用用c 最新的特性看看,比如在高階語言中的明顯降低耦合性的自定義事件,這是第乙個坑。首先想到的是個函式指標的巨集 typedef void eventfun eventtype,void 寫完之後發現只能用於靜態函式,看了看c 11特性裡面的 ...

C 串列埠開發填坑記

串列埠雖然簡單,但是想要做得 耐用 還是要花些心思!本文把開發中遇到的問題總結,希望能幫到各位小夥伴。因為,串列埠接收和介面顯示更新不屬於同一執行緒,如果在接收到串列埠資料後就直接更新到ui,報錯 解決方案 this begininvoke eventhandler delegate region ...