- #include "definetest.h"
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- definetest::definetest(void)
- {
- }
- definetest::~definetest(void)
- {
- }
- void definetest::todefine(){
- #define TESTDEFINE
- }
- void definetest::test()
- {
- #ifndef TESTDEFINE
- cout<<"not defined"<<endl;
- #else
- cout<<"have defined"<<endl;
- #endif
代码是这样的:
问题如下:
如果不执行todefine而直接的执行test,那么最后的输出是not defined 还是 have defined???
80%的人肯定会说是not defined,但是如果实际的跑一下就会发现是:hava defined.
为什么事hava defined呢?
这个涉及

本文探讨了C/C++中#define预处理器指令的作用域问题。在definetest::todefine()函数内定义了宏TESTDEFINE,而在definetest::test()函数中通过#ifndef TESTDEFINE进行检查,输出"not defined",揭示了宏定义在函数内部的局部性特点。

2250

被折叠的 条评论
为什么被折叠?



