打印

c语言问题!

[复制链接]
1932|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fe07fe|  楼主 | 2011-12-11 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在看ucos的时候,出现这样的代码,可能c语言差,#if 和 #endif,怎么出现在程序里面,#define “#”出现在编译的时候用的,用一次下次就不会用了的,“#”出现在程序里面,用好几次的,#if 和 if 有什么区别,高手!
#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 1)
    OS_EVENT  *pevent1;
    OS_EVENT  *pevent2;
#endif

相关帖子

沙发
HWM| | 2011-12-11 20:41 | 只看该作者
re LZ:

C编译时至少对代码扫描两遍,“#”所引导的“语句”起着指导编译的作用,编译代码扫描的首遍就会处理这些“语句”。

如下例:

#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 1)
    OS_EVENT  *pevent1;
    OS_EVENT  *pevent2;
#endif

C编译扫描到这一段时,若发现条件“ (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 1)”成立,则将会处理下面直至#endif前的语句,否则将忽略掉这段代码。

“if”是C的实质性语句(条件)关键字, 如果C处理它的话,其会在第二遍代码扫描中将相应的条件语句编译成目标代码或直接编译成机器码。

使用特权

评论回复
板凳
fe07fe|  楼主 | 2011-12-11 21:34 | 只看该作者
OS_EVENT_EN , OS_MAX_EVENTS 这些常量,应该叫宏定义,在头文件定义过的,用#define定义过的,不是我认为的在程序运行中定义的,

使用特权

评论回复
地板
xhtxzxw| | 2011-12-11 22:14 | 只看该作者
一个普遍现象:大学里学习C语言,老师对编译控制命令讲解的很不到位.不知道什么原因.
#if...... 是编译控制命令,不生成代码但控制代码的生成;
if.....;是C的语句,能生成代码.

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
zxcscm + 1
fe07fe + 1
5
袁修宾66aa| | 2011-12-24 14:40 | 只看该作者
条件编译,建议回去把C语言上的预处理再好好学学

使用特权

评论回复
6
袁修宾66aa| | 2011-12-24 14:40 | 只看该作者
条件编译,建议回去把C语言上的预处理再好好学学

使用特权

评论回复
7
cs1275| | 2011-12-27 11:01 | 只看该作者
启发...得学好基础...

使用特权

评论回复
8
ytebara| | 2011-12-30 11:17 | 只看该作者
期待中 也是不解

使用特权

评论回复
9
db10| | 2011-12-30 11:51 | 只看该作者
有点抽象吧,
#if    是编译时候用到,如果条件不满足,程序不会被编译那运行时候更不会执行。
if编译时候用到,程序运行的时候也会执行。

使用特权

评论回复
10
jiebin689| | 2012-1-5 11:07 | 只看该作者
#if  根据一个常量表示式的值,有条件的包含一些文本

#endif  终止条件文本

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

355

帖子

1

粉丝