iQOO Neo6 預熱:6400 萬畫素主攝,支援 OIS 光學防抖
阿新 • • 發佈:2022-04-10
C語言巨集定義
#define 巨集名稱 替代文字 #define 巨集名稱([引數名稱]) 替代文字 #define 巨集名稱([引數名稱,]…) 替代文字 #undef 巨集名稱 #ifdef MAVIS #include “A.h”//如果已經定義了MAVIS,則執行下面的指令 #define STABLES 5 #else #include “B.h” //如果沒有定義MAVIS,則執行下面的指令 #define STABLES 10 #endif #include <iostream> #define MAX_size 100 //簡單的文字替換 int a=MAX_size; #define max 200 #define to_string(x) #x //轉成字串 #define link(a,b) a##b //連線字串 #define pr(...) printf(__VA_ARGS__);//__VA_ARGS__表示前面的引數 #define prl(...) printf(__VA_ARGS__);putchar('\n'); #undef MAX_size //撤銷前面定義的MAX_size #define MAX_size 10 //重新定義MAX_size int b=MAX_size; #define add(a,b) \ (((a)+(b)) \ +((a)*(b))) //具有多行巨集定義 using namespace std; void test(); int main() { cout<<a<<" "<<b<<endl; cout<<add(10,20)<<endl;//結果是230 prl("%s","123");//測試巨集定義 cout << "Hello, World!" << endl; test(); //int a[5]={1,2,3,4,5}; //printf("%d\n",2[a]);//2[a]等同於a[2]; //system("pause");//系統暫停 return 0; } void test(){ prl(__DATE__);//含有編譯日期的字串 如Apr 13 2022 prl(__FILE__);//當前原始碼的名稱, 如E:/code/cpp/projects/test/main.cpp prl("%d",__LINE__);//當前(該巨集所在行) 的行號,如29 prl(__TIME__);//編譯時間 如15:32:12 prl("%d",__STDC__);//常量1,表示編譯器遵循ISO C標準 如1 prl("%d",__STDC_HOSTED__);//是否宿主於作業系統 如1 //pr("%ld",__STDC_VERSION__);//編譯器遵循的標準,用長整型表示,如201112 //上面一行程式碼在我的編譯器中提示找不到__STDC__VERSION__變數,有可能是編譯器的問題 } 執行結果如下: 100 10 230 123 Hello, World! Apr 13 2022 E:/code/cpp/projects/test/main.cpp 29 14:09:31 1 1 易錯點: #define sum(a,b) (a)+(b) 應改為#define sum(a,b) ((a)+(b)) #define path D:\cpp\ test.c 等同於#define path D:\cpptest.c 不要在巨集表示式內寫++或者--,可能會造成一個語句內有多個++或者--,不同編譯器會有不同的處理結果,儘量避免這種寫法 #define foreach(i,a,b) for(int i=a;i<b;++i)