测试#define CONSTANT

时间:2015-08-20 20:11:54

标签: c constants c-preprocessor

我不是程序员,但我需要这样做! :)我的问题是我需要定义一些常量来设置或不设置我的代码的某些特定部分,并且最好使用#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都被定义,而不仅仅是选定的BA, B and Cisample定义在同一组变量中工作的代码的一部分。我需要根据pip install geographiclib 设置其中一个。

1 个答案:

答案 0 :(得分:2)

您正在使用错误的方法接近它。 isample的值在运行时确定,而不是在编译时确定。

使用时

#define SAMPLE isample

编译器将SAMPLE视为一个标记,它将isample替换该标记。那不是你想要的。您希望编译器将所有SAMPLE替换为isample的值。

您需要使用编译器标志设置SAMPLE的值。使用gcc,您可以使用:

gcc -DSAMPLE=1 ...

并删除该行

#define SAMPLE isample