1. 程式人生 > 資訊 >iQOO Neo6 預熱:6400 萬畫素主攝,支援 OIS 光學防抖

iQOO Neo6 預熱:6400 萬畫素主攝,支援 OIS 光學防抖

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)