在C語言中,哪些事情必須用巨集才能做到?

時間 2021-05-31 14:15:33

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