本文目录一览:
C语言源程序到运行程序经过哪几个步骤
1、预处理
在这一阶段,源码中的所有预处理语句得到处理,例如:#include语句所包含的文件内容替换掉语句本身,所有已定义的宏被展开。
根据#ifdef,#if等语句的条件是否成立取舍相应的部分,预处理之后源码中不再包含任何预处理语句。
GCC预处理阶段可以生成.i的文件,通过选项-E可以使编译器在预处理结束时就停止编译。例如:gcc -E -o hello.i hello.c
2、编译
这一阶段,编译器对源码进行词法分析、语法分析、优化等操作,最后生成汇编代码。这是整个过程中最重要的一步,因此也常把整个过程称为编译。
可以通过选项-S使GCC在进行完编译后停止,生成.s的汇编程序。例如:gcc -S -o hello.s hello.c
3、汇编
这一阶段使用汇编器对汇编代码进行处理,生成机器语言代码,保存在后缀为.o的目标文件中。
当程序由多个代码文件构成时,每个文件都要先完成汇编工作,生成.o目标文件后,才能进入下一步的链接工作。
目标文件已经是最终程序的某一部分了,只是在链接之前还不能执行。可以通过-c选项生成目标文件:gcc -c -o hello.o hello.c
4、链接
经过汇编以后的机器代码还不能直接运行。为了使操作系统能够正确加载可执行文件,文件中必须包含固定格式的信息头,还必须与系统提供的启动代码链接起来才能正常运行,这些工作都是由链接器来完成的。gcc -o hello hello.c
5、运行:执行.EXE文件,得到运行结果。
c语言运行快捷键,还有到底c语言怎么运行啊 顺序
Alt+F9 编译文件为OBJ文件
F9 执行 MAKE 。
Ctrl+F9 运行程序。
这是按编译连接运行的顺序。
可以直接Ctrl+F9
C语言逻辑运算符顺序是什么?
LS,貌似的优先级比||大 = 赋值语句结合性 自右相左
a=b=c=1;等价于 c = 1;b = c; a = b;
-------------------------
看了sunnyapi的回答我感觉有必要
对以上回答进行一点补充
首先声明 ||和运算符均属于短路运算符;
什么是短路运算符举个简单例子
若 a = 1; a||a++;运行后结果是什么,变量a值为多少?
||逻辑或对第一项a进行判断是否为0,若不为零则返回值为1;且不在进行后面的a++运算,这就是短路运算符的特性,这样一来,a的值还是1没有改变,同理 a =0; 0a++;的运行结果为a=0;
举个形象点的例子:
a=1 a就是真
b=0 b就是假
a||a-- 真||a++,既然已经有真的了就没必要再判断a--是否为真 1||a++;肯定是真的;
同理 bb++ ,假b--既然已经有假的了就没有必要判断b++真假,同时b++也就不会被执行
++a||++b++c;这个语句根据算数运算符的优先级关系 的优先级比||大 ‘可以这样理解’
所以先运行对++a||++b 和 ++c进行逻辑与()运算,并先判断++a||++b是否为假若假则不进行++c;在判断 ++a||++b 是否为真的过程中,进行了++a和++b的||(逻辑或)运算,在逻辑或运算中先判断++a是否为零,这个过程中相当于 先a=a+1;再if (a!=0) 因为前面a=1,再运行++a,a这时等于2所以在if (a!=0) 成立则,不会运行++b;
所以
运行结果为a =2 ,b=c=1;
再程序执行++a||++b++c;这条语句的过程中只有a变量的值发生改变,而不是楼下说的那样
“在执行“++a||++b++c;”语句之前完成自加运算” 这是错的·
上述方法只是为了帮助你理解这个++a||++b++c;语句的意思
若我写个a=b=c=1; ++a||++b++c||++a||++b++c||++a||++b++c;你说该怎么理解?
挨个分析优先级,?
那不得疯了
所以那样也没必要++a||++b++c||++a||++b++c||++a||++b++c;只要由左到右依次运行这样来判断就好了就是(++a )语句1|| (++b++c||++a||++b++c||++a||++b++c)语句2
(++a)==2!=0所以嘛,语句2就不执行了 这样判断也符合 该语句的执行顺序