本文主要講述c語言中#和##的用法
#
- # 將右邊的參數(shù)做整體的字符串替換凿宾。
- 對于#的參數(shù)坠非,即便是另一個宏,也不展開耻矮,仍然作為字符串字面信息輸出秦躯。
#include<stdio.h>
#define dprint(expr) printf(#expr"=%d\n",expr);
int main()
{
int a=20,b=10;
dprint(a/b);
return 0;
}
/*
輸出:a/b=2
*/
##
- 將左右兩邊的參數(shù)做整體的字符串拼接替換。
- 同#裆装,對于##的參數(shù)踱承,即便是另一個宏倡缠,也不展開,仍然作為字符串字面信息輸出茎活。
- 經(jīng)過##替換后的內(nèi)容必須能夠作為一個合法的變量昙沦。
#define f(a,b) a##b
則
f(1,2) 替換拼接成12
f(i,1) 替換拼接稱i1
以上f(i,1) 中,如果程序中沒有i1的定義妙色,則即便是通過了宏替換桅滋,也不能編譯通過。
#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
int a2=3;
//printf("%s\n",f(a,2));錯誤身辨,沒有a2的字符串變量
printf("%d\n",f(a,2));//正確
printf("%s\n", h(f(1,2)));
printf("%s\n", g(f(1,2)));
return 0;
}
/*輸出
3
12
f(1,2)
*/