我不是程序员,但我必须这么做!:)我的问题是,我需要定义一些常量来设置或不设置代码的某些特定部分,并且使用define比使用普通变量要好。代码如下。根据之前字符串之间的比较,isample可以等于0、1、2或3。假设isample=1,那么代码输出常量样本等于1,但随后它进入if isample==0!!! 这个定义有问题。发生什么事了?还有别的办法吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int isample = 1;
#define SAMPLE isample
printf("\nSAMPLE %d", SAMPLE);
#if SAMPLE == 0
#define A
#define AA
printf("\nA");
#elif SAMPLE == 1
#define B
printf("\nB");
#elif SAMPLE == 2
#define C
printf("\nC");
#else
printf("\nOTHER");
#endif
printf("\nBye");
}
结果:
SAMPLE 1
A
Bye
我也试过:
#define SAMPLE 4
#undef SAMPLE
#define SAMPLE isample
结果是一样的。
我也试过使用变量。我没有使用
#if
块,而是使用if
: if (SAMPLE == 0)
{
#define A
#define AA
printf("\nA");
}
else if (SAMPLE == 1)
{
#define B
printf("\nB");
}
else if (SAMPLE == 2)
{
#define C
printf("\nC");
}
else
{
printf("\nOTHER");
}
int abc, def;
#ifdef A
abc = 1;
def = 2;
#endif
#ifdef B
abc = 3;
def = 4;
#endif
#ifdef C
abc = 5;
def = 6;
#endif
printf("\nabc %d, def %d\n", abc, def);
结果:
SAMPLE 1
B
abc 5, def 6
所以所有的
#define
都被定义了,而不仅仅是被选中的,它将是B
。A, B and C
定义在同一组变量中工作的部分代码。我需要根据isample
设置其中一个。 最佳答案
你用的方法不对。isample
的值是在运行时而不是编译时确定的。
当你使用
#define SAMPLE isample
编译器将
SAMPLE
视为标记的任何地方,都会用isample
替换该标记。那不是你想要的。您希望编译器用SAMPLE
的值替换所有isample
。您需要使用编译器标志设置
SAMPLE
的值。使用gcc,您可以使用:gcc -DSAMPLE=1 ...
把线移走
#define SAMPLE isample
关于c - 测试#define CONSTANT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32127477/