标签:字母 运算符 结果 span word 文件的 定义 序号 符号
#define
与所有预处理指令一亮,预处理指令#define用#符号作为行的开头,#和指令之间不能有空格,指令可以出现在源文件的任何地方。指令定义的作用域从定义出现的位置开始直到文件的结尾。#define由三部分组成:第一部分为指令#define自身第二部分为所选择的缩略语,这些缩略语称为宏macro ,(宏的名字不能有空格)只能使用字母、数字、下划线,第一个不能是数字,第三部分#define行的其余部分,称为替换列表或主体。
接下来看看代码了解一下吧
#include<stdio.h> #define two 2 #define ow "aaaaaa " #define ows"aabbccdd" //通过下划线转到下一行 #define four two*two #define Px printf("x is %d .\n",x); #define fmt "x is %d.\n" int main(void){ int x=two; px; x=four; printf(fmt,x); printf("%s\n",ow); printf("%s\n",ows);
printf("wo:ow\n"); return 0; }
运行后:
x is 2.
x is 4.
aaaaaa
aabbccdd
wo:ow
C预处理器中的语言符号是宏定义主体的单独的词“word”,用空白字符把这些词分开。例如:
#define fout 2*2
定义中有一个语言符号:即序号2*2但是:#define six 2*3
这个定义中有三个语言符号:2 * 3
#include<stdio.h> #define psor(x) printf("The square of "#x"is %d .\n",((x)*(x))); int main(void){ int y=5; psor(y); psor(2+4); return 0; }
运行结果:
The square of y is 25.
The square of 2+4 is 36.
第一次调用宏时,用"y"代替#x,第二次调用宏时,用“2+4”代替#x,
例如第一次调用:The square of y is ((y)*(y));
##运算符
和#运算符一样,##运算符可以用于类函数宏的替换部分,另外##还可用于类对象宏的替换部分。这个运算符把两个语言符号组合成单个符号。
接下来看一下代码:
#include<stdio.h> #define XNAME(n) x##n #define PRINT(n)printf("x" #n"=%d\n",x##n); int main(void){ int XNAME(1)=14;//变为 int x1=14; int XNAME(2)=20;//变成 int x2 =20; PRINT(1); /变成printf("x1=%d n",x1); PRINT(2); return 0; }
可变宏: ...和_ _ VA_ARGS_ _
有些函数(如printf())接受可变数量的参数。预定义宏 _ _ VA_ARGS_ _就可以被用在替换部分中,一表明省略号代表什么。
#include<stdio.h> #include<math.c> #define PR(x,...)printf("Message“#x”:"_ _ VA_ARGS) int main(void){ double x=48; double y; y=sqrt(x); PR=(1,"x=%g\n",x); PR=(2,"x=%d.2f,y=%.4f\n",x,y); retrun 0; }
运行结果:
Message 1:x=48
Message 2:x=48.00 y=6.928
标签:字母 运算符 结果 span word 文件的 定义 序号 符号
原文地址:https://www.cnblogs.com/X404/p/12213784.html