你不知道的C语言--第一篇——编译和运行

相信很多理工科的同学在大学期间都或多或少的学过C语言,但由于老师教的不用心或者当时我们知识的限制,导致我们对C语言存在许多误解。并且我们在学习c语言时,为了方便省事,大多数人都使用IDE,导致我们对编译的过程完全没有概念。
博主现在是一名大三的本科生,有幸读到宋劲杉老师的《一站式学习C编程》,发现了许多原来对于c语言的错误和模糊的认识,所以总结出来供自己复习并与大家分享
有错误的地方请大家及时指正,谢谢!

编译执行

对于我们初学编程时都要写的hello world程序,相信大家都非常熟悉了,但是即使是这样一个简单的程序,我们也未必都全能掌握,下面是helloworld代码:

#include <stdio.h>
int main(void)
{
        printf("Hello, world.\n");
        return 0;
}

要在Linux上不借助任何IDE编译运行它,我们需要在命令行输入一系列的命令:

$ gcc main.c -o main
$ ./main
Hello, world.

其中,gcc是linux下c语言的编译器,gcc main.c -o main的意思是编译main.c生成可执行文件main,这个main可以自己命名。

对于编译时的警告,有时候并不会全部提醒,但如果我们在编译时加上-Wall参数,编译器便会显示出所有的警告,供我们参考修改程序:gcc -Wall main.c -o main

编译时和运行时

大家在初学c语言时,一定会被编译时和运行时搞得一头雾水,因为那时候我们使用IDE一键运行,对于我们来说编译运行似乎就是一样的。然而有了上面的知识,我们就很好区分编译时和运行时了。

所谓编译时,就是我们在命令行输入gcc编译文件后产生可执行文件的过程,在这段时间出现的错误,就是编译时错误,一旦编译时出现了错误,就不会再产生可执行文件了,编译就被中断了。

而运行时错误就是在编译通过,生成可执行文件后,我们运行这个可执行文件之后产生的错误,这种错误一般更难捕捉。

如我们在学习全局变量和局部变量时有一条规定:

局部变量可以用类型相符的任意表达式来初始化,而全局变量只能用常量表达式来初始化。

之所以会有这样一条规定,就是因为全局变量必须在程序开始运行时初始化完成(运行任何语句之前),所以初始值必须保证保存在编译生成的可执行文件中,因此初始值必须在编译时计算出来。所以为了简化编译器,才规定全局变量只能用常量表达式来初始化。

问题的关键还是要区分编译时运行时

参考文献: 《一站式学习C编程》 宋劲杉

    原文作者:樱木灬晴子
    原文地址: https://segmentfault.com/a/1190000012114127
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞