欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C深度解析

最编程 2024-03-06 18:26:19
...
    1.IDE开发方式与源文件开发方式
    2.C程序的详细编译过程
    3.静态链接与动态链接
    4.目标文件种类
    5.可重定位目标文件
    6.可执行目标文件
    7.内存结构(存储映像)
        
1. IDE开发方式与源文件开发方式
    1.1 演示
      1.1.1 IDE方式
      1.1.2 源文件开发方式
            其实就是编辑与编译分开操作的方式
            gcc helloworld.c helloworld.exe 
        (1)windows
            如果想在任意位置都可以编译我们的程序的话,我们需要将编译器所在的目录加入
            windows的环境变量,有关环境变量,我们在《Linux系统编程、网络编程》有详细介绍
            
        (2)ubuntu
            1)使用ubuntu的VI或者gedit编辑器编辑
            2)使用ubuntu自带的gcc编译器来编译
            gcc helloworld.c -o helloworld
            gcc这个编译器是GNU这个组织开发的
            
         总结:
         (a)ubuntu安装好后,会自带c编译器gcc,不过windows没有自带c编译器,所以我使用的
         是codeblocks所带的编译器
         (b)ubuntu下的安装目录有加入环境变量,因此可以在任何路径下运行gcc
    1.2 源文件开发方式
      1.2.1 什么是源文件开发方式
        其实就是编辑、编译是分开开发的方式
        
        编辑:使用单独的编辑器来编写程序
        编译:在命令执行编译程序(命令)来编译所写的c程序
      1.2.2 分开的开发方式,其实有不少麻烦之处
        (1)你需要安装两个东西,一个是编辑器,另一个是编译器
        (2)使用单独编辑器,也有缺点
            使用的编辑器不见得是专门针对程序开发的编辑器,使用起来很麻烦,你比如直接
            使用windows自带的txt文件编辑器写程序的话,老实讲用起来糟心,因为它不是为程序
            编写而生的。
            如果你觉得txt这个编辑器不好,可以下载一个你觉得比较好的其它的编辑器,就算是
            这样,编辑器相比IDE的编辑器来说,也差了一些,毕竟IDE的编辑器是专门针对程序开发的
            
        (3)自己安装编译器也很麻烦
        (4)命令行的使用也很麻烦
        
      1.2.3 IDE方式
        IDE方式其实就是将编辑器和编译器二合一后的结果
        IDE方式很好的解决了编辑和编译分开情况所带来的麻烦,怎么解决的呢?
        
        1.2.3.1 只需一次性安装IDE即可
            一次性安装好IDE后,IDE就自带了编辑器和编译器
        1.2.3.2 IDE自带的编辑器更加专业,更加人性化
            因为IDE自带编辑器,是专门适合程序开发的编辑器,比如我们在程序开发的时候,
            语法关键字的自动提示,一般的编辑器是没有的,但是IDE提供的编辑器就会有。
        
            我在写程序时往往记不住关键字,特别是C++和java这种面向对象语言的开发,类里面
            包含很多的成员,如果编辑器不提供自动提示功能,这会非常痛苦。
            
            特别是涉及到界面开发时,会进行到控件的拖拽,如果不使用IDE提供的专门的编辑器
            的话,普通编辑器根本不提供控件拖拽的功能
        1.2.3.3 不涉及编译器的选型问题
            安装某个环境(windows x86)的IDE时,IDE自带的就是这个环境的编译器,不需要
            操心编译器的选型。
            编译器并不是一个独立的程序,而是由众多程序组合在一起的一个程序集合,我们安装
            IDE时,编译器集合会被自动包含在IDE的安装目录下。
            举例:codeblocks、vc++、eclipse
            如果你觉得这个编译器不好,实际上你可以自己下载其他的编译器,然后将它包含到IDE
            的安装目录下,然后在IDE里面做设置,使用这个新的编译器即可。
            设置举例:codeblocks
            不过一般不会这么做,你要是觉得这个编译器不好,还不如干脆换一个新版本的IDE,会
            自带新的编译器。
        1.2.3.4 编译程序时,调用编译器的过程是IDE自动完成的,而且是图形化操作,不需要使用
            命令行来操作。
            比如以codeblocks为例,只需要点击编译运行的按钮即可,IDE会自动的调用编译器程序
            来编译。
            图形界面调用编译器,与我们在命令行调用编译器程序来编译是一样的,但是IDE提供
            的图形化方式显然更加方便。
    1.3 综合对比
        1.3.1 IDE是主流
            因为IDE确实更加方便,特别是像开发c++/jave/c#/python等这类面向对象语言的程序
            时,基本只能使用IDE方式来操作,因此必须使用IDE的自动提示功能。
            
        1.3.2 分开方式难道就没有用了吗
            不是的,对于底层框架类代码的开发来说,还是有用的,因为底层框架类的代码基本
            都是使用c、汇编这类语言来实现的,不涉及类成员的提示,不涉及界面控件的拖拽,完全
            可以使用这种方式来开发。
            其实就算是开发框架代码,如果使用IDE方式的话,其实更方便些,不过对于很多有能力
            的程序员来说,在开发框架代码时,有些还是喜欢使用编辑、编译分开的方式,为什么?
            
            1)他们有能力这么做
                其实编辑、编译分开的方式,并不是谁想使用就能用的,这种方式对于能力要求较高,
                比如最起码一点,命令行必须要会,但是就命令行这一点,不少开发者可能就被难住了。
            2)分开的方式更*
                IDE做的越好就越傻瓜化,傻瓜的好处是,对程序员来说使用特别简单,但是坏处是,
                IDE帮你自动做了太多的设置,但是有些设置根本不是你想要的,所以很多大牛不喜欢
                IDE的自作主张,所以他们更喜欢自己做主,而编辑、编译分开的方式,就完全可以按照
                自己的想法来,不受IDE的干扰。
    1.4 进行Linux嵌入式开发,为什么会使用编辑、编译分开的方式呢?
        (1)因为进行Linux嵌入式开发时,所开发的大多是c程序,而且大多不涉及界面问题(因为
        好多嵌入式设备没有界面),这种情况与开发框架非常类似,所以适合使用这种情况。
        (2)ubuntu自带的vi(命令行编辑器)和gedit(图形编辑器)用起来还可以,而且安装好
        ubuntu后,会自带针对当前环境的c编译器gcc,无需自己安装,所以省去了一些麻烦。
        当前后续开发在arm上运行的嵌入式程序时,还是需要我们自己安装针对Linux、arm环境的
        编译器。
        (3)编辑、编译分开开发的方式,依赖于命令行的使用,而Linux嵌入式开发有一个最大的特点
        是,要求我们必须会Linux的命令行,所以对于Linux开发者来说,命令行的使用是小意思。
        (4)编辑、编译分开的开发方式,是本源开发方式,通过使用这种开发方式,可以更好的理解
        一些本质性的问题,在一定程度上,有助于提升大家的能力,所以我们鼓励使用分开开发的方式。
    
    1.5 如果Linux嵌入式开发也涉及到C++、java的话,使用什么开发方式呢
    
        1.5.1 嵌入式开发会用到C++/java吗?
        会,因为虽然不少Linux嵌入式产品不需要图形界面,但是有些还是要的,此时我们会使用
        C++的qt图形库或者java图形库来开发。
        其实基本使用的是C++/QT来开发的,因为java需要运行虚拟机这个东西,比较吃计算机资源。
        如果开发的是与安卓相关的嵌入式产品的话,会用到java。
        
        1.5.2 在Linux怎么进行C++/java开发
        前面说过开发C++/jave等面向对象语言的程序时,都是使用IDE来开发的。
        
        所以如果在linux嵌入式开发中,涉及到C++/java程序的开发时,我们还是需要安装相应的
        IDE来开发,使用编辑,编译分开方式,基本不可能。