我不是程序员,但我必须这么做!:)我的问题是,我需要定义一些常量来设置或不设置代码的某些特定部分,并且使用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都被定义了,而不仅仅是被选中的,它将是BA, 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/

10-12 15:03