加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于C编译器,我在哪里学习“我需要知道什么”?

发布时间:2020-12-16 10:54:13 所属栏目:百科 来源:网络整理
导读:我刚刚开始探索C,所以请原谅这个问题的新意.我也恳请你放纵这个问题的开放性.我认为它可以分解,但我认为这些信息属于同一个地方. (仅供参考 – 我现在主要使用QT SDK和mingw32-make,我似乎已经为我的机器正确配置了它们.) 我知道语言中有很多是编译器驱动的
我刚刚开始探索C,所以请原谅这个问题的新意.我也恳请你放纵这个问题的开放性.我认为它可以分解,但我认为这些信息属于同一个地方.

(仅供参考 – 我现在主要使用QT SDK和mingw32-make,我似乎已经为我的机器正确配置了它们.)

我知道语言中有很多是编译器驱动的 – 我听说过预编译器指令,但似乎有人能够编写不同的C编译器及其各自的参数.另外,有一些命令显然在make之前(例如qmake(这只是在QT中的东西)).

我想知道是否有任何地方可以让我了解编译器的概况,以及它们的不同选择.我也想知道他们每个人对Makefile的看法(看起来他们之间的语法有差异吗?).

如果没有关于“你需要了解的关于C编译器的所有内容但又不敢问”的网站,那么学习这些问题答案的最佳方法是什么?

解决方法

关于“各种编译器的众多选项”
一条好消息:你不必担心大多数这些选项的细节.您将在适当的时候深入研究这个,仅适用于您使用的编译器,并且可能仅适用于与特定功能集相关的选项.但作为新手,通常会信任默认选项或make文件提供的选项.

这些功能的广泛类别(我可能会遗漏一些)是:

>预处理器定义(现在,您可能需要其中一些)
>代码生成(目标CPU,FPU使用……)
>优化(编译器提示速度超过大小等的提示)
>包含调试信息(这是在对象/二进制文件中留下的额外数据,它使调试器能够知道每行代码的起始位置,变量名称是什么等)
>链接器的指令
>输出类型(exe,库,内存映射……)
> C/C++语言合规性和警告(与先前版本的编译器兼容,符合当前和过去的C标准,警告常见的可能错误指示模式……)
>编译时冗长和帮助

关于具有选项和功能的编译器清单
我知道没有这样的清单,但我确信它可能存在于网络上.但是,建议作为一个新手你几乎不用担心这些“细节”,并使用你能找到的任何免费编译器(gcc当然是一个很好的选择),并用语言和构建过程构建经验. C专业人员可能会有充分的理由和长篇大论地讨论各种编译器和相关的runtine等的优点,但是出于通用目的 – 然后一些 – 免费的东西就是所需要的.

关于构建过程
最琐碎的应用,例如这些由汇编的单个单元(读取单个的C/C++源文件),可以与其中的各种编译器和链接选项是硬编码的一个简单的批处理文件来构建,并且其中的文件的名称是在命令行上指定.
对于所有其他情况,编写构建过程以便完成它是非常重要的
?a)自动和
?b)可靠,即具有可重复性.
与此构建过程相关联的“配方”通常封装在make文件中,或者随着复杂性的增加,可能是几个make文件,可能“捆绑在一个脚本/ bat文件中.
你需要熟悉这个(make文件语法),即使你使用make / nmake的替代品,比如Apache Ant;原因是许多(大多数?)源代码包都包含一个make文件.
简而言之,make文件是文本文件,它们允许定义目标,以及相关的命令来构建目标.每个目标都与其依赖关联,这允许make逻辑决定哪些目标已过期并且应该重建,并且在重建之前,还应该重建哪些可能的依赖关系.这样,当您修改说包含文件(并且如果正确配置了make文件)时,将重新编译使用此标头的任何c文件,并且还将重建与相应obj文件链接的任何二进制文件. make还包括强制重建所有目标的选项,这有时候确保您确实拥有当前构建的(例如,在make中未声明给定对象的某些依赖项的情况下).

在预处理器上:
预处理器是编译的第一步,虽然它在技术上不是编译的一部分.此步骤的目的是:

>删除任何评论和无关的空白
>用相关的C/C++语法替换任何宏引用.例如,某些宏用于定义常量值,例如程序中使用的某些电子邮件地址;在每次处理期间,对此常量值的任何引用(按惯例顺便说一下,这些常量用ALL_CAPS_AND_UNDERSCORES命名)将替换为包含电子邮件地址的实际C字符串文字.
>排除所有不相关的条件编译分支(#IFDEF等)

关于预处理器的重要事项是,预处理器指令不是C语言本身的一部分,它们提供了几个重要的功能,例如前面提到的条件编译(例如用于具有多个版本的程序),比如针对不同的操作系统,或者确实针对不同的编译器)

从那里拿走……在我的这个宣言之后…我鼓励阅读但更多,并深入编程和构建二进制文件.尝试获得框架的广泛图片是一个非常好的主意,但这可能过头了,有点类似于留在他/她的房间里阅读韦伯斯特字典的交换学生“准备”以满足本地人发言者,而不仅仅是“做它!”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读