#include<stdio.h>
#define DEF6 625
#define DEF6 625
#define DEF(n) DEF##n
void main(){
printf("%d\n", DEF(6));
}
此代码有效。 但
#include<stdio.h>
#define DEF6 625
#define DEF(n) DEF##n
void main(){
int a=6;
printf("%d\n", DEF(a));
}
此代码不起作用。 错误结果是这样的
第8行:错误:'DEFa'未声明(首次使用此功能)
第8行:错误:(每个未声明的标识符仅报告一次 第8行:错误:对于它出现的每个函数。)
那么如何使用#define
?
##
答案 0 :(得分:6)
宏在运行时不会被评估,传递给宏的参数字面上会被使用,因为“它未被评估”。您想要做的事情很容易用数组来完成。当有简单易用的解决方案时,不要试图强迫错误的方法。
由于未评估a
,如果您通过a
,则使用a
DEF(a)
替换为DEFa
。
这样做
#include <stdio.h>
static const int DEF[] = {[6] = 625};
int
main(void)
{
int a = 6;
printf("%d\n", DEF[a]);
}
答案 1 :(得分:1)
无法做到。
在编译代码之前进行预处理器替换。变量a
此时没有任何值,甚至不会将其识别为变量或类型。
您将必须使用整数常量,或者如第一个示例中所示的那个常量的定义。