久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

宏總結(jié)

 vclyin 2009-12-22
1 條件include
如下
CODE

#ifndef MAIN_H_
#define MAIN_H_

其它內(nèi)容

#endif

上面在看到頭文件時會看到 作用就是阻止這個頭文件被多次include
多次include就會出現(xiàn)重復的定義情況 所以需要在每個頭文件中都使用這個定義

如果還不是很了解要怎樣使用 可以看看 c的標準頭文件 如fcntl.h

2 條件編譯

如下
CODE

#ifdef _DEBUG
printf("this debug info\n");
#endif

如果沒有定義_DEBUG宏的話 那么上面那一行是不會編譯進去的
但是定義了_DEBUG后 上面那行就會編譯進去 可以寫個簡單的程序測試
CODE

#include <stdio.h>
int main()
{
#ifdef _DEBUG
printf("hello world\n");
#else
printf("no debug");
#endif
return 0;
}


第一次使用 gcc -D_DEBUG main.c
第二次使用 gcc main.c

運行兩次的結(jié)果看
3 定義為某個值 以便后面修改這個值時不用修改其它地方代碼 只要修改這個宏的定義就可以了

如一個軟件的多語言版本等

如下

CODE

#include <stdio.h>
#define PRINT_STR "你好 DD"
main(){
printf(PRINT_STR);
return 0;
}


編譯時 會把PRINT_STR代替成"你好 DD"

以后想修改時就方便了


另外也可以定義為函數(shù)
#include <stdio.h>

#ifdef _DEBUG
#define A(x) a(x)
#else
#define A(x) b(x)
#endif

int a(int x)
{
return x+1;
}

int b(int x){
return x+100;
}

int main(){
printf ("A(10) value is %d",A(10));
return 0;
}
[/code]

其實也可以定義成
#define A a


但是 定義成A(x)后 只有A后面帶一個(x)類型的 編譯器才會執(zhí)行替換 比較安全 可以保證只替換函數(shù)而不替換變量

第四個
可變參數(shù)宏

有些時候定義一個宏來代替某個函數(shù) 但是這個函數(shù)是可變參數(shù)的話 那就需要考慮辦法了

定義方法如下
CODE

#define PRINT(...) printf(__VA_ARGS__)
#include <stdio.h>
int main(){
PRINT("%d %s %s",1,"吃飯了嗎 smile MM:)","\n");
return 0;
}

第五個 宏組合

也就是## 和 #的用法
## 是連接符號 連接兩個宏
#是把名字代替成字符串

如下
CODE

#define s5(a) supper_ ## a
#include <stdio.h>
void supper_printf(const char* p )
{
printf("this is supper printf:\n%s\n",a);
}

int main()
{
s5(printf)("hello owrld");
return 0;
}


#用法如下
#include <stdio.h>
#define s(p) #p
int main(){
printf(s(p)"\n");
return 0;
}

運行一下就知道了

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多