㈠ c语言中宏替换时先求出实参表达式的值,然后再带入形参中运算求值,对不对啊为什么啊
不是这样的,宏替换是在预编译时将整个宏的表达式进行替换再进行编译的,举个例子讲如果你定义了如下宏:
#define fun(a) (a*a)
下面用的时候
int main()
{
int i = 5, j = 4;
int k = fun(i+j)
}
那么在预编译时首选会先将fun(i+j)替换成 i+j*i+j,即此时计算的时候会先算乘法i*j,那么k的值最终就是5+4*5+4 = 29,而不是(i+j)*(i+j)=81,当然如果你想实现后一种结果,则宏定义方法应该是下面这样的
#define fun(a) ((a)*(a))
相互学习,希望对你有帮助,不懂的话,再跟我讨论吧
㈡ 关于C语言中内置宏__DATE__和 __TIME__
这两个就是字符串常量,当字符串用就行。
__DATE__:当前的编译日期
__TIME__:当前编译时间;
#include<stdio.h>
#include<string.h>
intmain()
{
printf("%s,%s
",__DATE__,__TIME__);
printf("长度DATE=%d,TIME=%d
",strlen(__DATE__),strlen(__TIME__));
return0;
}