1樓:C語言答疑課堂
我覺得有3個地方使用巨集會更佳:
1.與跨平台有關的型別使用巨集;
2.printf函式要使用可變引數時,如:#define MY_PARA(...) printf(__VA_ARGS__)
3.迴圈中如果要呼叫函式的話,盡量用巨集來替換函式,減小系統的開銷。
2樓:哦乎
#define MALLOC(n,type) ((type*)malloc((n)*sizeof(type)))
因為巨集與型別無關,所以這是函式沒法做到的。
3樓:盧卡斯
1. stringizing
2. token pasting
3. string concatenation以上3個功能是只能用巨集實現的!
4樓:Xinyu Tan
為什麼沒有人提protothreads !!!
#include "pt.h"
struct pt pt;
struct timer timer;
PT_THREAD(example(struct pt *pt))
5樓:James Swineson
以前寫作業的時候實現過乙個將就能用的 try/cache 異常處理,語法糖部分用巨集完成。
有了它以後讀寫資料庫寫起來嗷嗷爽。
6樓:Conley
超級經典的linux contain_of輸入結構體成員取出結構體指標http://
m.blog.csdn.net/article
/details?id=14649119
7樓:陳小楞
1. 不同目標的呼叫:
#ifdef _ARM_
#define foo() armbar()#else //x86
#define foo() x86bar()#endif
2. 除錯版和發布版功能區別
#ifder DEBUG
#define PRINT_LOG() REALPRINT()#else //release version#define PRINT_LOG() EMPTY()#endif
3. 標頭檔案重複引用保護
#ifndef _FOO_H_
#define _FOO_H_
#endif
8樓:dyntkj
/* No explaination */#define STR(x) #x#define XSTR(x) STR(x)#define GLUE(x,y) x##y#define XGLUE(x,y) GLUE(x,y)/* __FILE__, __LINE__ && assert */#ifndef NDEBUG
#define assert(x) ((x)?(void)0:__assert(#x, __FILE__, __LINE__))
#else
#define assert(x)
#endif
/* to make another "language" */#define loop for(;;)
loop
9樓:高天
1. 寫log的時候的__LINE__
#define PRINT_LOG(x
if(x
printf("Line %d\n". __LINE__); \2. 靜態變數的initialization #define PIN1 (1<<1)
3. C裡的類似泛型的東西
#define NEW(type) ( (type*) calloc(1, sizeof(type)) )
4. 真正編譯期間的流程控制和平台控制
#if __PPC__
doPPCStuff
()#elif __ARM__
doARMStuff
()#endif
在C語言中,函式呼叫前是否必須先宣告?
大江 我的理解是,所呼叫函式可能的返回值型別不同占用的記憶體空間大小不一樣的,而返回值是需要放在臨時空間裡的,所以你需要告訴編譯器需要多少的記憶體空間,比如int需要4位元組,double需要8位元組,如果不寫,編譯器假定留出最通用的4位元組給臨時變數。當然這跟規範和標準以及編譯器的實現有關。如果以...
在C語言中, a N 與 a N 有什麼區別?
知了 剛好有看過這裡,嘗試著回答一下。這其實和C語言運算子優先順序有關,弄懂這一點就會比較清楚,這裡涉及兩個運算子,下標引用和間接訪問 下標引用運算子優先順序高於間接引用,所以 a N 首先是乙個陣列,而陣列的元素是指標 加上小括號之後,即在 a N 中,要先進行 運算,所以a是乙個指標,指向乙個具...
在C語言中,如何安全地使用void ?
Lvcs 靈活接收資料型別,可以試試使用巨集定義而不用函式 舉個例子 判斷兩個數哪個大 define MAX a,b a b a b 使用巨集定義可以靈活接收各種型別的 a b,而使用函式判斷的話就需要事先設定傳入引數的型別了。 劉燦 傳遞指標同時提供區域長度 不用0來標識字串或區域結束 以typd...