资讯专栏INFORMATION COLUMN

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

bigdevil_s / 607人阅读

摘要:相信很多理工科的同学在大学期间都或多或少的学过语言,但由于老师教的不用心或者当时我们知识的限制,导致我们对语言存在许多误解。问题的关键还是要区分编译时和运行时参考文献一站式学习编程宋劲杉

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

编译执行

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

#include 
int main(void)
{
        printf("Hello, world.
");
        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://www.ucloud.cn/yun/33323.html

相关文章

  • JS学习系列 01 - 编译原理作用域

    摘要:的抽象语法树中可能如下图所示代码生成将转换为可执行代码的过程被称为代码生成。如果是,编译器会忽略该声明,继续进行编译,否则它会要求在当前作用域的集合中声明一个新的变量,并命名为。 在学习 javascript 的过程中,我们第一步最应该了解和掌握的就是作用域,与之相关还有程序是怎么编译的,变量是怎么查找的,js 引擎是什么,引擎和作用域的关系又是什么,这些是 javascript 这门...

    jkyin 评论0 收藏0
  • 你不知道javascript》笔记_作用域与闭包

    摘要:建筑的顶层代表全局作用域。实际的块级作用域远不止如此块级作用域函数作用域早期盛行的立即执行函数就是为了形成块级作用域,不污染全局。这便是闭包的特点吧经典面试题下面的代码输出内容答案个如何处理能够输出闭包方式方式下一篇你不知道的笔记 下一篇:《你不知道的javascript》笔记_this 写在前面 这一系列的笔记是在《javascript高级程序设计》读书笔记系列的升华版本,旨在将零碎...

    galaxy_robot 评论0 收藏0
  • 「译」JavaScript 究竟是如何工作?(第一部分)

    摘要:文章的第二部分涵盖了内存管理的概念,不久后将发布。的标准化工作是由国际组织负责的,相关规范被称为或者。随着分析器和编译器不断地更改字节码,的执行性能逐渐提高。 原文地址:How Does JavaScript Really Work? (Part 1) 原文作者:Priyesh Patel 译者:Chor showImg(https://segmentfault.com/img...

    Youngdze 评论0 收藏0
  • 重读你不知道JS (上) 第一节二章

    摘要:词法作用域定义在词法阶段的作用域由你在写代码时将变量和块作用域写在哪来决定的,因此当词法分析器处理代码时会保持作用域不变。欺骗词法作用域在词法分析器处理过后依然可以修改作用域。 你不知道的JS(上卷)笔记 你不知道的 JavaScript JavaScript 既是一门充满吸引力、简单易用的语言,又是一门具有许多复杂微妙技术的语言,即使是经验丰富的 JavaScript 开发者,如果没...

    baihe 评论0 收藏0
  • 图说 WebAssembly(四):快速入门

    摘要:本文是图说系列文章的第四篇。它们表示一种可以在普遍流行机器上高效使用的指令集合。这是因为是一种称为堆栈机器。尽管是根据堆栈机器来设计的,但是这并不是它在真实物理机器上工作的方式。这些内容称为段。 本文是图说 WebAssembly 系列文章的第四篇。如果您还未阅读之前的文章,建议您从第一篇入手。 WebAssembly 是一种使得除 JavaScript 以外的编程语言也能运行在网页上...

    BoYang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<