一个MFC程序,在CXXXDoc.cpp中有如下的宏定义:
#if COMPOSE_DATA_TYPE == 1
#if defined(VCG_CACHE)
#undef VCG_CACHE
#endif
#define COMPOSE_DATA() ComposeData()
#endif
它使用了另一个类,在这个类的头文件中有如下定义:
#define VCG_CACHE
我COMPOSE_DATA_TYPE定义为1,编译的时候,发现在CXXXDoc认为VCG_CACHE没有定义,但是定义VCG_CACHE的类认为它是定义的,这是为什么?
#if COMPOSE_DATA_TYPE == 1
#if defined(VCG_CACHE)
#undef VCG_CACHE
#endif
#define COMPOSE_DATA() ComposeData()
#endif
它使用了另一个类,在这个类的头文件中有如下定义:
#define VCG_CACHE
我COMPOSE_DATA_TYPE定义为1,编译的时候,发现在CXXXDoc认为VCG_CACHE没有定义,但是定义VCG_CACHE的类认为它是定义的,这是为什么?
#if COMPOSE_DATA_TYPE == 1
#if defined(VCG_CACHE)
#undef VCG_CACHE
#endif
#define COMPOSE_DATA() ComposeData()
#endif
放到CXXXDoc.h中去,出现的情况正相反:定义VCG_CACHE的类认为VCG_CACHE没有定义,但是CXXXDoc认为它是定义的!
为什么呢?
#undef VCG_CACHE // 如果定义了就取消定义(这个有问题拉)
#endif如果第一次定义了,下次你包涵这个头文件时,它就会取消定义;
应当给头文件加防止重复定义的头
#ifndef _头文件名_H
#define _头文件名_H
// 头文件的内容
// 。。
#endif
#if COMPOSE_DATA_TYPE == 1
#if defined(VCG_CACHE)
#undef VCG_CACHE
#endif
#define COMPOSE_DATA() ComposeData()
#endif
放到CXXXDoc.h中去,出现的情况:两个类都认为它是定义的!
为什么呢?
#define VCG_CACHE
#if COMPOSE_DATA_TYPE == 1
#if defined(VCG_CACHE)
#undef VCG_CACHE
#endif
#define COMPOSE_DATA() ComposeData()
#endif
但是不太明白其中的原因!
你的意思是不是说#ifdef...#endif“执行”完后又“执行”了另一个类中的define VCG_CACHE?