C++中的下划线

来源:百度知道 编辑:UC知道 时间:2024/06/18 03:29:23
为什么
#include<iostream.h>
#define NAME
main()
{
#if NAME
cout<<"\n.........\n"<<endl;
#else
cout<<"\n********\n"<<endl;
#endif}
不可以编译.而#include<iostream.h>
#define _NAME
main()
{
#if NAME
cout<<"\n.........\n"<<endl;
#else
cout<<"\n********\n"<<endl;
#endif
}可以编译.这之中的下划线有没有特殊的用法,又如#define 宏名 宏体 这是#define的用法,但是有的书上直接用到了#define NAME_A 这种用法的含义是什么?

这种东西叫开关

也叫编译选项

就是如果定义了_NAME,
从#if_NAME到#else的代码就会被编译否则,else里面的被编译
就这个作用

没有 其实_NAME 和 NAME 没有任何关系。
第一个程序不能编译 是因为#if 后面需要跟 常量表达式
而此处定义#define NAME 没有指定值(不是常量) 所以报错

而第二个程序可以编译 #define _NAME 预定义_NAME
而NAME没有预定义 则默认初值为0(这个应该跟编译器有关,我在vc6.0下编译为0) 所以第二个符合规则 因而可以顺利执行else语句

其实第二个函数 你可以把#define _NAME 注释掉 程序一样运行

其实一般得用法是
#define NAME
#ifdef NAME
{}
#else
{}
#endif