关于在C中使用define指令(#define)重新定义常量的困惑

时间:2016-08-31 16:12:09

标签: c c-preprocessor

据我所知,标准只有在新定义与旧定义重复时才允许重新定义。例如,

如果,

#define X 100

然后,

#define X 200 // Not allowed
#define X 100 // Allowed

但令我困惑的是,当头文件包含不重复旧定义的重新定义时。例如,

有一个头文件,header.h

#ifndef X
#define X 100
#endif

和源代码main.c,以便

#define X 10
#include "header.h" 

由于#define X 100文件中#define X 10低于main,我认为这会发生错误。但令人惊讶的是,编译器没有抱怨!为什么在C中允许这样的行为?

1 个答案:

答案 0 :(得分:3)

当然没有,因为#define X 100永远不会到达。

想一想,#ifndef做了什么?

#define X 10放在#include下方,现在会发生什么?