首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言系列】C语言编译流程分析

前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。...\n”); return 0; } 通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out 其实编译(包括链接)的命令:gcc hello.c 可分解为如下4...gcc其实是后台程序的一些包装,根据不同参数去调用其他的实际处理程序,比如:预编译编译程序cc1、汇编器as、连接器ld 可以看到编译后的汇编代码(hello.s)如下: .file "hello.c...$ gcc –c hello.c –o hello.o 或者 $ as hello.s –o hello.co 由于hello.o的内容为机器码,不能以普通文本形式的查看(vi 打开看到的是乱码)。...链接(Linking) 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。

10.9K51
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言的流程控制语句

    控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。         ...九种控制语句统称为流程控制语句。它们用于控制程序的执行流程,包括条件判断、循环、跳转等操作。...因此,输出结果为0到4的数字,不包括5。 break:在C语言中,break语句通常用于跳出当前循环结构。当程序执行到break语句时,它会立即结束当前循环,不再执行循环体中的余下部分。...因此,输出结果为0到4的数字,不包括5。 goto:goto语句只能在本函数内跳转,在C语言中,goto语句用于无条件跳转到程序中的某个标签处。...如果num小于等于10,程序将正常执行并输出"num小于等于10"。 switch语句在C语言中的用法如下: switch语句是一种多分支选择结构,它根据一个表达式的值来选择执行不同的代码块。

    18710

    C语言(顶级黑客的c程序)

    作为世界最牛逼黑客之一,Linus Torvalds的特立独行就跟他的软件Linux一样受人瞩目,那你想知道Linux的创始人Linus Torvalds是怎么写C语言程序的吗?一起来感受下。...但不管你贴多少标签,在这些褒义贬义的形容词背后,是一个真真切切对编程有偏执的狂人。这位神一般的开源先驱是怎么写代码的呢?对我们C语言初学者而言,更有趣的问题是,他是怎么写if……else的呢??...何必那么多废话,直接看一段他在Ted中的演讲视频。 ? 从1分53秒开始,中间是一段很有意思的内容。主持人说Torvalds对编程是一个非常有“品味”的人,这个品味是什么? 他拉出了一段代码。...这种设计不仅避免了多临时变量,还省略的很多分支语句,并且这个设计方法被 Torvalds 运用在内核哈希链表之中,还能节省哈希表50%的空间消耗!...在内核中,Torvalds 的代码永远是那么光芒璀璨,引人入胜!墙裂建议C语言学的差不多的同学走入Linux的世界,阅读一下世界顶级黑客大牛是怎么写程序的。

    4.2K50

    c语言程序个位,C语言位字段

    位字段(bit-field)是一个由具有特定数量的位组成的整数变量。结构或联合的成员也可以是位字段。如果连续声明多个小的位字段,编译器会将它们合并成一个机器字(word)。...(2) 成员名称成员名称是可选的(可以不写)。但是,如果声明了一个无名称的位字段,就没有办法获取它。没有名称的位字段只能用于填充(padding),以帮助后续的位字段在机器字中对齐到特定的地址边界。...(3) 宽度位字段中位的数量。宽度必须是一个常量整数表达式,其值是非负的,并且必须小于或等于指定类型的位宽。无名称位字段的宽度可以是 0。在这种情况下,下一个声明的位字段就会从新的可寻址内存单元开始。...如果紧接着的位字段适合同一内存单元中剩下的空间,那么就被定义到与前面的位字段紧邻的位置。...如果不适合的话,那么编译器就分配另外的内存单元,并在新单元的起始放置下一个位字段,或者跨过前一个内存单元的结尾和下一个内存单元的开头。

    12.3K11

    C# 程序流程控制

    {0}", a); Console.ReadLine(); } } } a 大于 20 a 的值是 100 嵌套 if 语句   在 C# 中,嵌套 if-else...如果 case 语句为空,则可以不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。 C# 不允许从一个开关部分继续执行到下一个开关部分。...default case 中的 break 语句不是必需的。 C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。...} } 这是外部 switch 的一部分 这是内部 switch 的一部分 a 的准确值是 100 b 的准确值是 200 循环 while 循环   只要给定的条件为真,C# 中的 while...a 的值: 13 a 的值: 14 a 的值: 15 a 的值: 16 a 的值: 17 a 的值: 18 a 的值: 19 foreach C# 也支持 foreach 循环,使用foreach可以迭代数组或者一个集合对象

    68820

    2.1 C语言程序的灵魂

    计算机算法可以分为两大类:数值运算算法和非数值运算算法 02 算法的特性 1、有穷性:一个算法应该包括有限的操作步骤,而不能是无限的。...2、确定性:算法中的每一个步骤都应当时确定的,而不应当时含糊的、模棱两可的 3、有零个或多个输入:在执行算法时需要从外界取得必要的信息。 4、有一个或多个输出:算法的目的是为了求解,“解”就是输出。...5、有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果。...03 结构化程序设计方法 1、自顶向下 2、逐步细化 3、模块化设计 4、结构化编码 把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。...更多案例可以go公众号:C语言入门到精通

    8263027

    C语言经典程序

    思考了许久,准备在这些天给大家总结一些经典而且重要的C语言程序实例。...选择排序法 选择排序法是每个学编程的人都会接触到的排序算法,这个算法的思想就和它的名字一样,选择出最大值或者最小值放到一边,完成排序。...02 交换排序法 也称为冒泡排序法,通过这两个名字我们可以大致的明白,冒泡说明就像水中的气泡一样往上冒,既将较小或者较大的数移动到最后边,交换指的是两个数两个数的比较,如何符合则要交换。...5 求某一区间内的完数 完数指的是这个数的所有非本身因数加起来等于它自己的数, 总结 小编给大家推荐一个学习氛围超好的地方,鼠标放到头像上就能看到 可以看出,循环结构和选择结构非常重要,两者嵌套使用也很重要...,是一定要掌握的。

    4.1K30

    C语言经典程序

    程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。...4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出, 请在空白处完善程序。...s中删除存放在c中的字符。...,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列*/ main() { int a[10]={0,12,17,20,25,28,30}; /*a[0]为工作单元...,char c2)实现将s所指向的字符串中所有字符c1用c2替换,字符串、字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上,并输出到文件p10_2.out中/ #include<

    8.9K11

    【C语言】初学C语言经典题目(范围广,内容多)

    ✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨推荐刷题网站:进入网站 ✨送给各位的一句话:既要脚踏实地 又要仰望星空 ✨说明:无论做什么事情,我们既要有高远的理想,也要有脚踏实地的精神态度...学习C语言的同时,我们也要去大量的刷题,提高自己的编程能力,如果你不太会做题,没有关系,不要害怕,越害怕只会越害怕。...两边向中间移动 模拟登录操作 猜数字 关机程序 模拟实现strlen()函数 递归实现计算一个数的每位之和 递归和非递归实现求第n个斐波那契数 交换数字 结束语 ---- 前言 大家好啊,今天带来的是关于学习...C语言前期我们比较经典的一些题目,如果对你有帮助的话,记得点赞关注加收藏哦,希望我们能够一起成长与进步 ---- 下面,让我们开始今天的主题吧!...自然是时间,这里引入了时间戳的概念: 打开网站搜索时间戳: 我们还要注意到随机数的范围,可以用%来限制数的大小范围 下面,我们来实现猜数字的代码: ---- 关机程序 关机程序在说分支循环中goto

    1.6K30

    江哥带你玩转C语言 | 07 - C语言流程控制

    流程控制基本概念 默认情况下程序运行后,系统会按书写顺序从上至下依次执行程序中的每一行代码。...但是这并不能满足我们所有的开发需求, 为了方便我们控制程序的运行流程,C语言提供3种流程控制结构,不同的流程控制结构可以实现不同的运行流程。...---- 选择结构 C语言中提供了两大选择结构, 分别是if和switch ##选择结构if if第一种形式 表示如果表达式为真,执行语句块1,否则不执行 if(表达式) { 语句块1; }...A 90~100 B 80~89 C 70~79 D 60~69 E 0~59 实现+ - * / 简单计算器 ---- 循环结构 C语言中提供了三大循环结构, 分别是while、dowhile和...if(1) { continue; // 会报错 } ---- goto 这是一个不太值得探讨的话题,goto 会破坏结构化程序设计流程,它将使程序层次不清,且不易读,所以慎用 goto 语句,仅能在本函数内实现跳转

    1.6K00

    c语言程序设计总结心得-C语言程序设计小结

    当初大学时都是利用C51写的51单片机的程序,根本就不管程序的可维护性,程序大小c语言程序设计总结心得,就是一个C文件中包含了全部的函数体。在工作中这是一个完全不能接受的习惯和致命错误。   ...其实C语言的语法真的很简单,很快就能掌握,但是将这简单的语句组织成一个良好的架构那可就是一件很难的事了。最近在工作中编写的程序都是我们总监打好的架构,然后在里面进行添砖加瓦的。...所以一定要先想出一个很好的架构在来开始编写。   2.c文件c语言程序设计总结心得,和h文件设计的要求。...C语言显得非常的自由,但我们在工作中为了程序软件的种种原因,一定要规范自己的写法,这对自己和他人都是有利的。...3.指针的妙用。C语言的特色就在于它的指针。很好的使用指针能让我们的程序更加的有条理性,同样它也是C语言中语法最难的一点了,所以在使用时一定要注意。

    3.7K60

    c语言目标程序中的段

    段的分类 根据C语言的特点,每一个源程序生成的目标代码将包含源程序所需要表达的所有信息和功能。...2.只读数据段(RO Data) 只读数据段由程序中所使用的数据产生,该部分数据的特点是在运行中不需要改变,因此编译器会将该数据放入只读的部分中。C语言的一些语法将生成只读数据段。...在C语言的程序中,对变量的使用还有以下几点需注意: 1.在函数体中定义的变量通常是在栈上,不需要在程序中进行管理,由编译器处理。...程序中段的使用 本小节使用简单的例子,说明C语言中变量和段的对应关系。...0; } 示例1程序中描述了C语言源文件中语句如何转换成各个段。

    1.4K30

    【C语言】程序的编译、预处理

    3.链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。...__ //如果编译器遵循ANSI C,其值为1,否则未定义 这些预定义符号都是语言内置的 int main() { int i = 0; FILE* pf = fopen("log.txt", "w...#和## 开始之前,我们可以想一个问题:如何把参数插入到字符串中❓ 我们要先理解一下,在C语言中,下面两句代码是能达到相同结果的: #include int main() {...调 试 宏是不方便调试的 函数是可以逐语句调试的 递 归 宏是不能递归的 函数是可以递归的 命名约定 :一般来讲函数的宏的使用语法很相似。所以语言本身没法帮我们区分二者。...test.h和test.c使用了test1模块和test2模块。 这样最终程序中就会出现两份comm.h的内容。这样就造成了文件内容的重复。

    28320

    聊聊C语言-程序和编程语言

    前几天看到新闻说是美国总统奥巴马写代码并且鼓励全部的美国人都应该学习编程,一时编程成了人们热议的话题。那么小编接下来将要写一个系列的文章来带你进入C语言编程的奇妙世界。 什么是编程?...编程简单来说就是用计算机能够识别的语言来编写程序。我们平时用的电脑、平板、手机、电视机、计算机以及工厂用的各种设备无一不包含程序。 ?...后来人们为了解决这件苦逼的事情发明了很多种高级语言(也叫形式语言)。 ? 上面这幅图展现了人们发明的大多数高级语言,但是并不包含全部。我们现在用的程序基本都是用这些高级语言编写的。...只有经过编译或者解释完后,我们的程序才能在计算机或者其他设备上运行。经历的过程如下: ? 为什么选择C语言?...既然有那么多的高级语言我们为什么选择C语言编写程序呢,也许是小编对C语言有着独有的情怀吧,也许是因为我们上过大学的人基本上学的第一门编程语言都是C语言吧,也许它是至今为止用的最多的和底层硬件打交道的语言吧

    11.4K80

    C 语言程序的出错处理

    C 语言程序的错误处理是需要程序员自己来解决的,而面向对象类语言如Java、C++、Python都是用异常机制来处理错误。 1....当然文中举例都非常简单,主要是想说明 C 语言程序中我们要关注错误的处理,这样有助于对程序的错误的快速排查。...当然错误的时候不止可以返回 -1,如果系统比较复杂,可以设置多种错误码来区分程序中的各类错误,最好每个错误码都对应具体的错误原因。 3....错误处理函数 C语言中,系统预先设定了一些错误,每种错误都由错误编号和错误信息组成。每个错误编号对应一种错误信息。...printf("%s\n", strerror(errno); perror 函数打印错误信息并自动换行,这个函数经常使用,参数是附加的信息,能更好的帮助程序员定位错误。

    1.3K20
    领券