c++--------------条件编译的问题
2007-08-31 12:13
239 查看
#include<iostream>
using namespace std;
void main()
{
int a=10;
#if (a>1)
cout<<"a>1"<<endl;
#else
cout<<"a<=1"<<endl;
#endif
}
为什么编译运行后是a<=1
按道理应该是执行a>1的才对啊
#if在这里是预处理命令
#if语句要判断是宏的值,宏的值只有通过#define或者在命令行-DXXX的形式定义。
用int a=10;形式定义了一个整型常量,而不是一个宏。
对于宏的替换,是在预编译阶段就进行的,会把所有的宏替换为实际的值。而对int a=10;的解析,却是在编译阶段。
在预编译阶段,只认#define定义的宏,不会理会int a=10;定义出来的常量,所以#if永远为假。
条件编译个作用是什么?
#ifdef 标识符
程序段1
#else
程序段2
#endif
作用一:编译生成的可执行代码或者只包含程序段1 或者只包含程序段2 ,可执行程序大小会变小;
作用二:可以灵活的通过宏定义标识符实现同一函数的不同版本,例如
#ifdef 标识符
func1(...) {...}
#else
func1(...) {...}
#endif
这样func1函数通过宏定义可以有不同的实现
#if 0
...
#endif
还可以注释掉大段的代码
/*...*/不能注释掉本身包含*/的代码(/**/不能嵌套)
using namespace std;
void main()
{
int a=10;
#if (a>1)
cout<<"a>1"<<endl;
#else
cout<<"a<=1"<<endl;
#endif
}
为什么编译运行后是a<=1
按道理应该是执行a>1的才对啊
#if在这里是预处理命令
#if语句要判断是宏的值,宏的值只有通过#define或者在命令行-DXXX的形式定义。
用int a=10;形式定义了一个整型常量,而不是一个宏。
对于宏的替换,是在预编译阶段就进行的,会把所有的宏替换为实际的值。而对int a=10;的解析,却是在编译阶段。
在预编译阶段,只认#define定义的宏,不会理会int a=10;定义出来的常量,所以#if永远为假。
条件编译个作用是什么?
#ifdef 标识符
程序段1
#else
程序段2
#endif
作用一:编译生成的可执行代码或者只包含程序段1 或者只包含程序段2 ,可执行程序大小会变小;
作用二:可以灵活的通过宏定义标识符实现同一函数的不同版本,例如
#ifdef 标识符
func1(...) {...}
#else
func1(...) {...}
#endif
这样func1函数通过宏定义可以有不同的实现
#if 0
...
#endif
还可以注释掉大段的代码
/*...*/不能注释掉本身包含*/的代码(/**/不能嵌套)
相关文章推荐
- c++中利用模板解决条件编译的问题
- C++ 条件编译
- C++头文件编译问题 分类: C/C++ 2015-06-10 15:48 32人阅读 评论(0) 收藏
- C和C++混合编译问题
- C/C++头文件,宏,内联函数,条件编译
- C++程序编译运行后窗口一闪而过问题
- 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决
- Visual Studio 2010 编译 MongoDB C++ Client Driver(看这里,终于解决了编译问题,谢谢大神的分享)
- DEV-C++对c文件提示无法编译的问题
- minGW, cygwin, GnuWin32【C++的跨平台交叉编译问题】
- C++模板编译问题
- C++编译问题-检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式
- c++关于cin作为while条件的问题
- C++编译OpenCV生成动态库问题解决
- C++编译的若干问题
- C++模板类的问题 map::iterator 编译报错的问题
- C++编译spidermonkey遇到的一些问题
- Android Studio 1.0 JNI 引用多个C++文件编译找不到类的问题
- C/C++的条件编译