undef这个宏的问题
例子1:
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE // 这个宏就被取消成功了? 如果成功的话,提供个第2个例子,为什么第二个例子不成功?
static char THIS_FILE[] = __FILE__;
#endif
例子2:
int main ()
{
#ifdef _UNICODE
#undef _UNICODE //我已经取消掉了,那么TCHAR则是char!!!
TCHAR strDirectory[]=_T("c:\\1111\\222\\");
if (!PathFileExists(strDirectory))
{
char strTemp[MAX_PATH]={0};
// _tcsncpy(strTemp,strDirectory,lstrlen(strDirectory));
//PathRemoveBackslash(strDirectory);
//PathAddBackslash(strDirectory);
MakeSureDirectoryPathExists(strDirectory); //error,取消掉宏了,为什么还出错?
}
#endif
return 0;
}
有人说例子2失败的原因:
是顺序问题,
对于取消一个宏, 编译器只看第一次定义的时候,
不会看中途的代码的。
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE // 这个宏就被取消成功了? 如果成功的话,提供个第2个例子,为什么第二个例子不成功?
static char THIS_FILE[] = __FILE__;
#endif
例子2:
int main ()
{
#ifdef _UNICODE
#undef _UNICODE //我已经取消掉了,那么TCHAR则是char!!!
TCHAR strDirectory[]=_T("c:\\1111\\222\\");
if (!PathFileExists(strDirectory))
{
char strTemp[MAX_PATH]={0};
// _tcsncpy(strTemp,strDirectory,lstrlen(strDirectory));
//PathRemoveBackslash(strDirectory);
//PathAddBackslash(strDirectory);
MakeSureDirectoryPathExists(strDirectory); //error,取消掉宏了,为什么还出错?
}
#endif
return 0;
}
有人说例子2失败的原因:
是顺序问题,
对于取消一个宏, 编译器只看第一次定义的时候,
不会看中途的代码的。
...全文
相关推荐
c语言常见错误提示
如果开发者能够熟悉这些错误提示,就能够快速地解决问题,从而提高编程效率。
c++出错提示中英文对照详解
Bad undef directive syntax 编译预处理 undef 有语法错在C++中,undef指令用于取消定义宏,需要正确的语法格式,否则编译器将报告错误。10.
c语言程序调试中错误或警告提示的中文对照
**编译预处理 undef 有语法错 (Bad undef directive syntax)**:`#undef`预处理指令的语法错误,确认要取消定义的宏是否存在。10.
VC6.0常见出错表
确保你在`#undef`指令后紧跟的是想要取消定义的宏名,没有任何额外的空格或其他字符。10.
Turbo c出错提示信息中文翻译(word版)
**#运算符后无宏变量名**:在宏定义中,`#`运算符后面必须跟一个宏变量名。2.


