重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
宏屬于預編譯,在編譯的時候就將你的
成都服務器托管,創新互聯公司提供包括服務器租用、成都棕樹電信機房、帶寬租用、云主機、機柜租用、主機租用托管、CDN網站加速、域名注冊等業務的一體化完整服務。電話咨詢:028-86922220
SSSV(sa,sb,sc,vv);
替換成
sa=l*w;sb=l*h;sc=w*h;vv=w*l*h;
這些編譯器已經給你處理了,宏這個就是直接替換
宏有編寫規范的,你這里寫的宏并不規范,建議上網查一下宏書寫的規范
的確是不可以當函數的參數,但是可以換一個間接的思路。
將宏定義放在另一個函數里,通過取地址的方式來把你原先想去處理的參數進行處理。
示例如下:
#includestdio.h
#define cal(m) {m = m + 10;}
int main(void)
{
int Val_0 = 20;
test(Val_0);
printf("%d", Val_0);
system("pause");
}
int test(int *n)
{
cal(*n);
printf("hello\n");
return 0;
}
Power2(x)這個宏的意思是把x用x*x代替
在你程序里,出現在括號里的東西是i+j,那么編譯器就會用
i+j*i+j
的代碼替換,如果是
#define
Power2(x)
(x)*(x),就會替換成(i+j)*(i+j),那么輸出結果就是196。
同樣,如果改成
#define
Power2(x)
x/x
那么代碼就換替換成i+j/i+j,那么結果就是15。
在C語言源程序中,允許用一個標識符來表示一個字符串,稱為宏,宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。
擴展資料:
宏(Macro),是一種批量處理的稱謂。計算機科學里的宏是一種抽象,它根據一系列預定義的規則替換一定的文本模式。
計算機語言如C語言或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。
參考資料:
宏定義百度百科
上面是 宏 定義。
第一行 DEFINE...SUITE 是宏函數名,小括號里是 三個 形式參數。 定義為 下面第二行開始 含 續行號的 所有的行。 程序中出現 DEFINE...SUITE 宏函數時,均用 它的 定義句 做字符替代。
定義句替代宏函數時,凡是有 三個形式參數 的地方,用 實際參數 做字符替代。
## 是 連接符,用于一個Token 與另 一個Token 的 連接,(Token 也可以是另外的宏,也可以不是)。
例子: 若形參_sym的實際參數 是 XYZ, 那么 _test_str_##_sym[] 變成 _test_str_XYZ[]。 這個 _test_str_XYZ 是 static const char型 數組的名字。
后面還有個 .name = _test_str_XYZ, 也是token的連接。
宏定義又稱為宏代換、宏替換,簡稱“宏”。
是C提供的三種預處理功能的其中一種。
1、宏名一般用大寫。
2、使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便于修改。例如:數組大小常用宏定義。
3、預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
4、宏定義末尾不加分號。
5、宏定義寫在函數的花括號外邊,作用域為其后的程序,通常在文件的最開頭。
6、可以用#undef命令終止宏定義的作用域。
7、宏定義可以嵌套。
8、字符串" "中永遠不包含宏。
9、宏定義不分配內存,變量定義分配內存。