C预编译处理
C語言預編譯處理包含三個方面,宏定義,與及條件編譯,文件包含
1.宏定義
解析:用一個指定的標志符來代表一個字符串
#define PI 3.141592653無參數宏定義
帶參數宏定義
#define ADD(a, b) a+b#與##
宏定義中,#表示將兩個字符串相連,可以理解為在宏兩邊加上引號:
#include <stdio.h> #define PRINT(w,h) printf("Your input is " #w #h "\n"); int main(int argc, char* args[]) {PRINT(3,4);return 0; }輸出結果為:
Your input is 34
帶#號參數的宏在展開后得到的結果是:
printf("Your input is " "3" "4" "\n");
?
##表示該參數是一個變量的一部分
#include <stdio.h> #define PRINT(w,h) printf("Your input is" #w #h "df\n"); #define VAR_PRE(name) var_##name int main(int argc, char* args[]) {PRINT(3,4); int VAR_PRE(count) = 5;printf("%d\n", VAR_PRE(count));return 0; }##將name參數與var_結合,相當于往count變量趕回前綴,以區分不同的類別
可變參數...
C++宏定義中的可變參數表示是...,在宏定義中訪問該參數的方法是__VA_ARGS__
#include <stdio.h> #define PRINT_ALL(...) printf(#__VA_ARGS__ "\n") int main(int argc, char* args[]) {PRINT_ALL(A, B, C);return 0; }輸出結果為:A, B, C
單獨訪問具體的某一參數(這個暫時未看到方法)
2.條件編譯
條件編譯用告訴編譯器,某些代碼不用編譯,經常使用它來避免重復編譯:
// common.h #ifndef COMMON_H#define COMMON_Hclass Circle {public:string r;};#endif場景是多處包含common.h文件,#ifndef避免編譯器對common.h進行多次編譯
3.文件包含
#include
?
4.宏定義的兩個用戶
//1,防止一個頭文件被重復包含 #ifndef COMDEF_H #define COMDEF_H //頭文件內容 #endif //2,重新定義一些類型,防止由于各種平臺和編譯器的不同,而產生的類型字節數差異,方便移植。 typedef unsigned char boolean; /* Boolean value type. */ typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned short uint16; /* Unsigned 16 bit value */ typedef unsigned char uint8; /* Unsigned 8 bit value */ typedef signed long int int32; /* Signed 32 bit value */ typedef signed short int16; /* Signed 16 bit value */ typedef signed char int8; /* Signed 8 bit value */?
參考資料:
http://www.360doc.com/content/08/0324/11/59579_1140684.shtml
http://www.360doc.com/content/09/1009/16/59579_7027058.shtml
轉載于:https://www.cnblogs.com/haiyupeter/archive/2012/09/01/2665146.html
總結
- 上一篇: socket聊天室笔记
- 下一篇: 海量数据处理题集