相信很多理工科的学生在大学期间都或多或少的学过C语言,但是因为老师没有认真教或者我们的知识水平不高时间的局限导致我们对C语言产生了很多误解。而我们在学习c语言的时候,大多数人为了方便和麻烦,都使用IDE,导致我们对编译过程一无所知。博主现在是一名大三学生。幸好他看了宋金山老师的《一站式学习C编程》,发现很多错误和对C语言的理解模糊,于是总结出来自己复习,把错误的地方分享给大家。请及时指正,谢谢!编译执行相信大家对刚开始学编程要写的helloworld程序都非常熟悉,但是就是这么简单的程序,我们也未必能够全部掌握。以下是helloworld代码:#includeintmain(void){printf("Hello,world.\n");return0;}要在没有任何IDE的Linux上编译运行它,我们需要在命令行中输入一系列命令:$gccmain.c-omain$./mainHello,world。其中gcc是linux下的C语言编译器,gccmain.c-omain表示编译main.c生成可执行文件main,这个main可以自己命名。对于编译时警告,有时不是全部警告,但是如果我们在编译时加上-Wall参数,编译器会显示所有警告,供我们修改程序参考:gcc-Wallmain.c-o的编译时间和运行时main刚开始学习C语言的时候,肯定会对编译时间和运行时间感到困惑,因为那时候我们用的是IDE一键运行,编译和运行对我们来说似乎是一样的。但是,有了以上知识,我们就可以很容易的区分编译时和运行时了。所谓编译,就是我们在命令行输入gcc编译后的文件后生成可执行文件的过程。这期间发生的错误是编译时错误。一旦编译出错,将不会生成可执行文件,编译中断。runtimeerror就是编译通过,生成可执行文件后,我们运行可执行文件后出现的错误。这种错误一般比较难发现。比如我们在学习全局变量和局部变量时,有一个规则:局部变量可以用任何同类型的表达式来初始化,而全局变量只能用常量表达式来初始化。之所以有这样的规则,是因为全局变量必须在程序开始运行时(任何语句运行之前)进行初始化,所以必须保证初始值保存在编译生成的可执行文件中,所以初始值必须是编译时计算出来的。因此,为了简化编译器,规定全局变量只能用常量表达式来初始化。问题的关键在于区分编译时引用和运行时引用:《一站式学习C编程》宋金山