我不是程序员,但我需要这样做! :)我的问题是我需要定义一些常量来设置或不设置我的代码的某些特定部分,并且最好使用#define而不是普通变量。代码如下。根据之前制作的字符串之间的比较,该样本可以等于0,1,2或3。假设isample = 1,那么代码打印表明常量SAMPLE等于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
定义在同一组变量中工作的代码的一部分。我需要根据pip install geographiclib
设置其中一个。
答案 0 :(得分:2)
您正在使用错误的方法接近它。 isample
的值在运行时确定,而不是在编译时确定。
使用时
#define SAMPLE isample
编译器将SAMPLE
视为一个标记,它将isample
替换该标记。那不是你想要的。您希望编译器将所有SAMPLE
替换为isample
的值。
您需要使用编译器标志设置SAMPLE
的值。使用gcc,您可以使用:
gcc -DSAMPLE=1 ...
并删除该行
#define SAMPLE isample