C预处理
Posted x404
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C预处理相关的知识,希望对你有一定的参考价值。
#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 . ",x); #define fmt "x is %d. " int main(void){ int x=two; px; x=four; printf(fmt,x); printf("%s ",ow); printf("%s ",ows);
printf("wo:ow "); 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 . ",((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 ",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 ",x); PR=(2,"x=%d.2f,y=%.4f ",x,y); retrun 0; }
运行结果:
Message 1:x=48
Message 2:x=48.00 y=6.928
以上是关于C预处理的主要内容,如果未能解决你的问题,请参考以下文章