C define 行為未知的重定義

2021-08-09 22:31:00 字數 486 閱讀 3704

#define malloc(quantity,type) (type* )alloc((quantity)*sizeof(type))
//#define malloc(size) alloc(size)       //error,這裡出現了重名的巨集

今天在使用巨集的時候,定義了兩個同名不同引數列表的巨集,本以為可以完美執行卻出現了在出現了錯誤之後排查了半天才定位到這裡

再複習一下c中有關巨集的知識:

#define 機制包括了乙個規定,允許把引數替換到文字中,這種實現通常稱為巨集(macro)或定義巨集(defined macro),下面是巨集的宣告方式:

#define name(parameter-list) stuff

注意,一旦出現了兩個同name的巨集,則就為重定義,這種巨集重定義的行為是未知的,無法保證編譯器一定會執行你所希望的那個巨集

C 定義未知元素個數的陣列

1 使用動態記憶體分配方法 c 申請動態記憶體 int arraysize 定義元素個數 cin arraysize 輸入元素個數 int p 指標指向乙個陣列 p new int arraysize 動態分配記憶體 delete p 最後釋放記憶體空間 c語言申請動態記憶體 int arraysi...

c 中的重定義,重包含。

1.重定義的概念 乙個變數被直接或者間接多次定義導致的錯誤 導致重定義的三種情況 第一種 就是同乙個變數多次在乙個檔案中定義,例如 int a 1 int a 2 a就是 重定義 第二種 由於重複包含標頭檔案導致的變數的重定義,例如在a.h中定義了乙個變數 int a 3 後來b.h包含了a.h,並...

未定義的行為 i i

i i 1 先算出左邊的值,置為0 2 執行i 的 1操作.3 將左邊的值賦給i.2和3在不同編譯器中經過優化後有不同的執行順序。所以執行後i可能是0,可能是1.能執行不代表是正確的。這種寫法,是c標準嚴格禁止的。c標準裡,叫做未定義行為。在c c 中,為了少寫一行 或者為了和某條彙編語句對應,這顆...