社区
C++ 语言
帖子详情
if(0) 和 #if 0 的到底有什么区别呢?
winco
2004-11-09 03:16:06
个人觉得没什么区别,都是不执行某个区域的东西,前面是if后的打括号中的内容,而后面试#endif与#if 0之间的内容。那位达人补充一下
...全文
387
5
打赏
收藏
if(0) 和 #if 0 的到底有什么区别呢?
个人觉得没什么区别,都是不执行某个区域的东西,前面是if后的打括号中的内容,而后面试#endif与#if 0之间的内容。那位达人补充一下
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mathe
2004-11-09
打赏
举报
回复
#if 0
#endif
是在c/c++预处理器(/usr/bin/cpp)处理时候就过滤掉了。
而
if(0)
必须由编译器来分析的,而且如果编译器优化选项没有打开,很可能还会为它产生代码,只是这段代码永远不会执行到。(不过一般来说,这种东西编译器默认的优化选项都会处理(Dead Code Elimiation会处理)。
#if 0
#endif
由于是由c/c++预处理器处理的,所以中间所有的东西都会被忽略,包括里面的预处理信息
但是
if(0){
}
是由编译器处理的,所以如果里面包含预处理信息,就会有效:
比如:
程序1:
int main()
{
int i;
#if 0
#line 1
#endif
j+=1;
}
会报错:
testm.c:7 'j' undeclared(first use in this function)
而
int main()
{
int i;
if(0){
#line 1
}
j+=1;
会报错:
testm.c:2 'j' undeclared(first use in this function)
}
lu1172101275
2004-11-09
打赏
举报
回复
一楼帮说完,我只能就点头了
wacle
2004-11-09
打赏
举报
回复
考虑到升级的需要,不同的版本,在系统中注册的环境变量可能不一样,本着向下兼容的原则,需要定义一些宏,因为存在依赖关系,有些情况下,如果不用预编译,会导致程序无法运行。
xuzheng318
2004-11-09
打赏
举报
回复
up 了!
darkstar21cn
2004-11-09
打赏
举报
回复
不懂,if (0)是一般的程序控制语句,而#if 0是预编译控制语句。一个是运行控制,一个是编译控制。
我可以这么写
#if 0
lstat (file, st);
#endif
在vc下可以编译通过,但是
if (0)
lstat (file, st);
就无法让vc通过编译了。
而且明知在程序中不用的东西干吗不直接去掉?而是让编译器处理呢,我想会有写编译器把这段永远不会运行的代码优化掉的。
头文件免费下载
代码: // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #if !defined(AFX_STDAFX_H__C4B5DA9B_21EA_47D6_9253_A4245E58FBF5__INCLUDED_) #define AFX_STDAFX_H__C4B5DA9B_21EA_47D6_9253_A4245E58FBF5__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TODO: reference additional headers your program requires here //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__C4B5DA9B_21EA_47D6_9253_A4245E58FBF5__INCLUDED_)
MoreWindows白话经典算法之七大排序(高清版)
这是本人在研一上课时所整理的文档,包括冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法,这些文章不仅使我在考试中取了不错的成绩,也为后来顺利面过迅雷,腾讯,微软打下了良好的基础,现在整理成电子书形式,希望能对大家有所帮助。
#if和if
#if … #else … #endif//与#if对应 作为一个编译“开关”,比如: #if(条件满足) 执行代码1 #else 执行代码2 #endif 假如编译时,确实满足条件,则生成的程序文件(.exe文件)中不会有执行代码2的。如果用普通if语句,生成的程序文件就会有执行代码2,这个
区别
看看生成文件大小就可以知道。如果你的条件在程序编译前就已经确定了,那就用#if;如果条件需要在程序...
C语言中#if 0 / #if 1......#endif的作用
C标准中, /*......*/ 提供注释功能,但是不允许嵌套注释, #if 0...code...#endif 不仅可以提供注释功能,而且可以嵌套注释, 对于要调试的代码,加上#if......#endif 后就会被注释掉, 将#if 0改为#if 1 ,其间的代码就不会被注释 在调试时使用还是挺方便的。 ...
linux之#if 0 ... #endif用途
在过去都没有去理会#if 的作用,今天突发奇想,开启编译器试一试。 很多人都知道,#if 0 ... #endfif的作用跟/*...*/的作用是一样的,就是注释,可是注释为什么不用注释符号/*就行了么?google了一下,大家都说是为了解决嵌套注释。如: /*---------------------------------------------------------------
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章