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 ...