-4

'''

#include <stdio.h>
#define PARK 5
#define MAN  1

#if MAN
color = BLUE
#else
color = RED
#endif

void main(void)
 {
    #ifdef PARK
      printf("Hi PARK\n");
    #else
           printf("Hi Elice\n");
    #endif
    #ifndef MAX
          printf("MAX not defined\n");
    #endif
 }

'''

我正在研究#if #ifdef。

[ 颜色 = 蓝色 ] 是错误的。但是 [ color = RED ] 不是错误。

我将“蓝色”更改为“红色”,但它仍然不起作用。为什么?

4

1 回答 1

1

不知道我是否理解你的问题,但让我们试试:

#define MAN  1

#if MAN
color = BLUE
#else
color = RED
#endif

MAN值为 1。在#if MAN编译器中评估是否MAN为真。值 1 在 C 中表示 true,因此编译器将编译下一行,color = BLUE. 请注意,这不是一个完整的陈述,因为最后;缺少 。此外,color应该是一个变量并且BLUE必须被定义(作为一个变量或作为一个#define)。这可能会导致错误。

因为该#if部分已执行,该#else部分未执行。即使该部分中存在相同类型的错误,编译器也永远不会“看到”它,因此不会抱怨。

这能解释你的问题吗?


代码的正确版本可能是:

#define MAN  1

#define BLUE 1
#define RED  2

#if MAN
int color = BLUE;
#else
int color = RED;
#endif

这声明了一个整数color并对其进行初始化。


注意:在学习#ifetc 时要意识到的一件重要事情是,它定义了编译器将看到的编译内容。所以color = RED永远不会被编译器看到。#if等或称为预处理器指令,它在将源代码交给实际的 C 编译器之前对其进行预处理。

于 2020-06-17T09:02:05.310 回答