据我所知,标准只有在新定义与旧定义重复时才允许重新定义。例如,
如果,
#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中允许这样的行为?
答案 0 :(得分:3)
当然没有,因为#define X 100
永远不会到达。
想一想,#ifndef
做了什么?
将#define X 10
放在#include
下方,现在会发生什么?