fe07fe 发表于 2011-12-11 20:12

c语言问题!

在看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的语句,能生成代码.

袁修宾66aa 发表于 2011-12-24 14:40

条件编译,建议回去把C语言上的预处理再好好学学

袁修宾66aa 发表于 2011-12-24 14:40

条件编译,建议回去把C语言上的预处理再好好学学

cs1275 发表于 2011-12-27 11:01

启发...得学好基础...

ytebara 发表于 2011-12-30 11:17

期待中 也是不解

db10 发表于 2011-12-30 11:51

有点抽象吧,
#if    是编译时候用到,如果条件不满足,程序不会被编译那运行时候更不会执行。
if编译时候用到,程序运行的时候也会执行。

jiebin689 发表于 2012-1-5 11:07

#if根据一个常量表示式的值,有条件的包含一些文本

#endif终止条件文本
页: [1]
查看完整版本: c语言问题!