重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
宏属于预编译,在编译的时候就将你的
创新互联建站是一家专注于做网站、网站建设与策划设计,密山网站建设哪家好?创新互联建站做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:密山等地区。密山做网站价格咨询:13518219792
SSSV(sa,sb,sc,vv);
替换成
sa=l*w;sb=l*h;sc=w*h;vv=w*l*h;
这些编译器已经给你处理了,宏这个就是直接替换
宏有编写规范的,你这里写的宏并不规范,建议上网查一下宏书写的规范
首先你要理解什么是预处理命令#define。它的作用是:在编译之前,对#define的参数在作用范围内进行替换操作。如:
#define A 2
int b = A; // 在编译之前,这行代码会被替换成: int b = 2;
所以#define只是替换,可没有定义相关的参数。用这道题来举个例子:
#define JH(a, b, t) t=a; a=b; b=t;
int t, a=1, b=2;
JH(a, b, t); // 在编译之前,这行代码会被替换成: t=a; a=b; b=t;
所以如果没有定义t,那么t=a; b=t; 就会报错。而且如果你没定义t,你又是如何使用
JH(a, b, t)呢?因为你必须写出第三个参数。还有就是要注意在最后它少加了一个分号:
#define JH(a, b, t) t=a; a=b; b=t // 题目中t后面没有分号
这是为了以函数的形式使用宏定义,同时也表明#define只是简单的替换,并不是执行代码。这样的用法是十分常见的。
C的宏可以用来替换常数,替换表达式,仔细把这个程序看完你就明白了,
#includestdio.h
#define SQ(x) ((x)*(x))
#define READ(x) scanf("%d",x)
#define WRITELN(x) printf("%d\n",x)
int main()
{
int x;
READ(x);
WRITELN(SQ(x+1));
return 0;
}
程序输入4 输出25
宏的作用主要有:宏定义和宏替换。宏定义主要是定义一些参数,提供编译程序识别使用,实现条件编译,以屏蔽实现多平台差异、实现调试版和发行版等功能。宏定义可以简单的理解成字符替换,便于程序的编写和修改,如程序要多次取两个数中的教大值,可以定义宏:
#define max(a,b) ((a)(b)?(a):(b),语句 c = a b? a, b,就可以使用 c = max(a,b)。
又如,程序要多次使用 3.141592653,可以定义宏:#define PI 3.141592653,使用到3.141592653 的地方就用 PI 取代。
指针作为函数参数,将内存地址传递给函数,函数可以操控这个指针指向的内存数据。
上面是 宏 定义。
第一行 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的连接。