你好, 欢迎回来｡
在这节课上, 我想
来讨论如何创建c程序｡
所以有四个基本任务 在任何c程序的创建中｡
这些任务 包括编辑､ 编译､ 链接以及执行｡
我们讨论了不同的步骤
你在写c程序的时候会用到 为了理解需求,
您需要设计代码, 编写代码, 然后进行测试和调试 然后对其进行维护｡
我想说的是 在开始编写程序时需要做的事情｡
我们聊了聊 关于编辑､ 编译, 但链接和执行也很重要｡
我想说的是 这是详细情况｡
所以这些任务将成为 你的第二天性, 因为你要做它
每次你写一个c程序｡
你要编辑你的 源代码,
你要编译, 你要链接 然后你就可以跑了｡
你要做的 这是非常非常常见的｡
所以编辑､
编译､ 链接和执行对于开发是相同的 在任何环境中使用任何编译语言编写程序｡
这并不是c独有的｡
如果你在写java-java 你要写源代码, 你要
以编译源代码｡
链接—您可能没有意识到
但它会做一些链接我们会讨论 什么是链接, 然后你要运行这个程序｡
你要做这一切｡
我在这里所描述的 C语言是怎么做的｡
所以编辑就是 你会认为是｡
这是一个创造 以及修改实际代码,
c源代码｡
c++源代码将被删除｡ 在文件中｡
它将包含所有 你写的所有语句和指令｡
所有c源代码文件结束 使用｡ c扩展名,
这就是如何识别 它是一个源代码文件｡
在那之前｡ c扩展正在进行
要被称为基本名称, 您需要使文件名有意义｡
如果你编写一个c程序, 把两个 数字, 您可能有一个名为add的文件｡
c的源代码｡
请记住, 大多数c 程序会有很多不同的文件｡
所以你的文件应该有好的名字｡
但是你可以通过 c源代码是｡ c扩展名｡
它们都含有｡ c扩展名｡
现在, 当我们为 这门课,
我们将使用集成开发环境｡
我们不只是去 使用简单编辑器｡
简单编辑器示例 就像写字板一样｡
我们要用一些
它有一个编辑器, 但也有很多其他的东西可以帮助你 更有效地编写代码｡
IDE-这被称为IDE, 集成开发环境｡
我们要用的是
是代码块, 我将详细介绍, 但我们将使用代码块来执行编辑任务｡
但你想用什么都行｡
如果要使用记事本,
如果 如果你想用更小的东西, 你可以用Atom, Visual
Studio IDE, 但我们在这里要讨论的是如何 以编辑代码和代码块｡
这是一个很好的想法和 我选择它原因我们将讨论更多细节, 但它
跨平台且易于使用｡
所以编辑是 过程, 编写代码｡
正在编译｡
我们知道编译器的作用｡
它只需要高层次的
语言代码并将其转换为机器语言, 还 检测并查找代码中的错误｡
编辑代码后, 您将 运行编译器｡
所以编译器的输入是 就是你所有的源代码,
所有的｡ c文件 你正在编辑的一切｡
同样, c程序可以 有许多源文件｡
但编译器的输入是 这些源文件, 编译本身转换这些代码
是一个两阶段的过程｡
第一阶段称为 即预处理阶段｡
在此期间, 您的代码可能 可以被修改或添加｡
第二阶段是 实际编译时, 它会生成汇编语言代码｡
我们将在后面的章节中详细讨论 详细说明此预处理阶段｡
但你只需要知道 现在编译分为两个阶段｡
我们要关注的是 或者一个容易理解的是对象代码的生成｡
所以编译器会
查看每个语句, 它将确保 语法是否正确以及是否符合语言的语义｡
语法是为了确保 代码的结构是正确的,
在
语句的结尾, 您正在使用数据类型, 您正在 遵循语言的规则｡
语义学就是词语的意义｡
所以如果你用if 关键字, 这是一个条件｡
语义发生在 编译阶段通过创建符号表等等｡
但是编译器很重要｡
它将产生 此目标代码｡
它会告诉你 语法中有任何错误｡
它有时也能识别 不管你有没有死代码,
基本上代码没有被使用｡
它不会发现逻辑错误｡
它只查找语法错误｡
同样, 语法是 规则和语言｡
逻辑错误是这个意思｡
就像如果你犯了错 在逻辑上, 您可能会在功能上犯错误｡
这样你的代码就可以运行, 可以编译, 但它可能无法按预期工作, 这称为逻辑错误｡
编译器不会告诉 如果你有逻辑错误｡
如果您想向用户请求 数字而不是字符串, 或者您要求用户输入其最后一个
名字在前这是个逻辑错误｡
编译器不运行 来告诉你这些错误的类型｡
报告的典型错误
编译器将是未声明变量､ 表达式
不符合语法, 您就没有权利 括号中, 你就有你知道的没有结束块的块｡
你会变得非常, 非常熟悉编译器错误及其含义｡
希望在你学会 然后运行编译器,
你会看到 一个错误, 您可以立即修复它｡
说哎呀忘了语法或者 哎呀忘了分号,
哦, 我忘了提供一个 括号以结束代码块｡
这将成为第二天性｡
所以等你修好了
如果编译成功, 则 翻译成汇编语言并生成该目标代码｡
所以实际的物体 代码为｡ o文件｡
这是实际的总结 运行语言代码
它有一个扩展名｡ 对象｡ 不可以｡ obj通常在Windows上 将为扩展名｡ o在Linux或Macintosh上 系统将作为扩展名｡
你会看到那份文件 在编译代码后生成｡
而这只是最后阶段 这就是真正的汇编语言｡
它将是二进制的 看起来不像是文字, 您将无法看到它
它只是会有一个 ｡ o扩展名, 这就是编译器生成的内容｡
运行编译器的方式 在c语言中你实际上使用了一个命令｡
您可能不需要执行此操作 很大程度上是因为集成开发中的编辑器ide
只要按一下功能表选项, 就能为您完成, 但 知道发生了什么事很重要｡
所以当你发出编译器
命令, 它通常使用GNU编译器, 这是一个gcc命令｡
但在基本层面上, 你只要跑 编译程序可以是cc或gcc｡
你运行那个程序 然后指定输入｡
请记住, 编译器需要 作为源文件的输入｡
您可以使用 -c标志,
然后依次指定源文件｡
这里的例子是cc-cmyprog｡ c或 如果你使用的是GNU编译器, 一个流行的gcc-c编译器｡
如果省略c标志, 则 程序也将自动链接,
这是下一步｡
但实际上运行起来很容易 编译器（如果您在命令行界面）｡
如果你只需要 使用菜单选项, 我们可能会在这门课上用到｡
但同样, 这需要 输入, c源文件｡
在代码块中,
正如我提到的, 您只需单击一个菜单选项, 它就会
自动编译链接, 然后您可以单击另一个菜单 选项, 它将自动运行｡
但是, 在这一点上, 你实际上是在发出编译器命令时使用-c
标志和输入源文件｡
编译之后, 您可以链接｡ 就像我说的, 每种编程语言都有链接, 但是很多 很多时候,
它是透明的, 你甚至不知道发生了什么｡
在c中, 链接过程是重要的｡ 因为它并不总是透明的｡
但是对于今天的大多数现代IDE, 是, 但是我必须强调它在c中是很重要的｡
所以在程序 被翻译成了这样｡ 旧代码是它目标代码, 它
然后准备好被链接｡
我们联系的原因是
使用外部库时, 我们必须获取所有其他库 并将它们放到一个程序中｡
所以链接就是 并构建一个实际的可执行文件｡
所以了｡ o文件是对象｡
然后将所有 ｡ 操作系统集成到一个可执行文件中｡
同样,
这通常 透明的, 通常在编译时自动发生｡
但同样, 它可能不会和 您可能需要执行一个单独命令,
如a-l或其他命令｡
但它把所有这些物体 文件并构建一个可执行文件｡
而可执行文件就是您运行的内容｡
所以它将把所有这些结合起来｡
然后它也会联合收割机｡
你可能有｡ 操作系统
其他程式库, 您可能要使用的其他程式, 其他人编写了或其他随c语言提供的库｡
你要把所有 然后把它们放在一起｡
而链接阶段将 还可以检测和报告错误｡
它们是两个不同的阶段｡
同样, 链接通常是这样的 重定义错误或您试图调用的函数不存在｡
所以如果你没有那个｡ o文件至 组成了整个程序,
你会有一个链接错误｡
你需要所有的｡ o的｡
再一次, ｡ o的 可能都不是你的｡
它们可能使用相同的语言, 它们可能是标准库的一部分, 也可能随其他库一起提供
其他人编写的程序｡
但你需要所有这些｡ o的 以形成一个可执行文件｡
因此, 程序库支持和 通过提供执行操作的例程来扩展C语言
不属于语言的部分｡
输入和输出库是 例如, 数学库､
字符串操作库｡
这是一样的事情, 如果你 熟悉java程序, 和java
api是一回事｡
这和包裹是一样的｡
这是一个“我想
写数据到文件我不想自己实现它, 要使用语言自带的现有库｡
它仍然是用c写的 只要有个c就行了｡
所以有各种各样的 我们将要学习和使用的不同的库｡
这是 链接阶段｡
所以在链接阶段的失败
意味着您必须再次返回并编辑源代码, 确保您可以找到目标文件, 因此许多失败通常 这意味着您只需要包含一个文件或类似内容｡ 这 也会成为第二天性｡
成功, 如果你完成了 编译成功, 链接成功,
将生成一个可执行文件｡
在Windows环境中, 可执行文件将具有.
exe扩展名｡
在Linux和Windows中, 它将 默认情况下只有a｡ 出来｡
您可以变更的名称｡ 出
更有意义的东西, 只要发布一些 使用编译器命令｡
但是代码块中的大多数IDE
将在一次操作中编译和链接程序, 并且它将 生成可执行文件,
然后双击该可执行文件 也可以通过命令或菜单选项运行可执行文件｡
但在低水平上不行 在Linux上, 你会看到一个a
作为可执行文件｡ 在窗户上你会看到一个｡ exe文件｡
任何有效大小的程序 将由几个源代码文件组成, 我前面提到过这一点｡
每个源代码文件都需要 编译器生成需要链接的目标文件｡
该程序更容易 通过将其分解为多个较小的源文件进行管理｡
您将需要使用许多源 文件,
并且您不希望源文件包含5000行代码｡
这不是凝聚力｡
这可不容易管理｡
所以你要创建文件
包含源代码, 源代码是特定的
它将有一个 特定功能｡
这样就更容易 开发人员更容易调试且更有凝聚力｡
所以你要 许多较小的源文件｡
您不需要大型源文件 有数千行代码｡
所有这些源文件 组成了整个计划｡
他们都将有他们的 拥有者｡
o的, 它们都将被输入到编译器中｡
所有这些概念
从本质上来说, 也被认为是一个项目｡
您可以将其视为 在更高的层次上｡
这是你的项目, 你的计划.
在你终于完成了 你已经链接了它, 你已经得到了你的可执行文件,
然后可以运行该程序｡
在大多数IDE中,
这只是 你可以点击菜单或者在窗口中双击, 您可以双击该exe｡
如果您使用的是Linux, 您只需键入｡ 出来｡
现在当一个｡ 你必须拥有 某些权限, 因此您可能必须发出更改模式命令,
但要运行它, 你可以说｡ /答｡ 这将运行程序 从命令行Linux｡
但通常情况下, 您不必 担心这个｡
所以执行阶段是你运行程序的地方｡
程序的每个语句 依次执行｡
如果程序请求任何
数据时, 程序会暂停并获取该输入｡
您可以通过 键盘或图形用户界面（如果您有
库中｡
显示的结果 出现在一个名为控制台的窗口中｡
我们将展示 在我们讨论代码块时, 您可以看到这方面的示例｡
但是当你运行你的程序时, 通常, 您会看到输出
并非总是如此, 有时程序会 做一些没有产出的事情｡
但通常,
它们会产出 您可以在终端或控制台上看到输出｡
执行阶段还生成 各种各样的错误条件｡
所以你可能会产生错
这只是一个逻辑错误, 您必须返回 和编辑源代码｡
它可能坐在那里什么也不做 因为你有逻辑问题｡
最后它可能会崩溃
这是最坏的情况, 也就是说 你在节目中做了一些很糟糕的事情
这个程序就这么死了或者它真的导致了其他 操作系统上的程序使整个计算机崩溃｡
因此, 运行实际的c++应用程序 可能会导致问题｡ 如果程序不执行 功能, 则必须返回并编辑源代码
您可能必须重新组织或重新设计代码, 这是我们
讨论了不同的步骤｡
这称为调试 阶段查找并修复错误｡
我们将有一整个 因为它是如此重要｡
我之前提到过 最好的学习方法之一就是从错误中学习｡
你会不断地回到 编辑源代码和调试｡
整个编制过程､ 链接和执行程序的过程会一直重复,
直到完成, 直到您 就可以得到该代码功能所需的所有结果｡
所以这是另一个 我想提供一些例子｡
这是从一本书中 霍顿的《C开头》｡
但这就是过程 你将要拥有的东西｡
您将编辑源代码｡
您将创建一个文件, ｡ c扩展名和一个有意义的名称｡
你要用编辑器
或IDE､ 集成开发环境, 比如代码块｡
然后编译它｡
编译器将 生成obj文件和o文件｡
如果它没有生成该文件, 这意味着您有错误, 您必须返回并修复它们｡
创建obj文件后, 对象文件, 则必须将它们全部链接在一起 若要创建可执行文件,
请执行以下操作｡
你也可以 在这个阶段中的错误,
它们没有正确地链接｡
你得回去 编辑源代码｡
一旦你真的没有错误
并且您有一个可执行文件, 那么您就可以运行您的程序｡
同样, 在您运行 程序中, 仍然可能出现错误,
因为可能存在逻辑错误｡
所以你会回到 和编辑源代码｡
所以这将成为
重复的过程, 你们会非常熟悉｡
编辑､ 编译､ 链接､ 执行｡
这也是典型的 你在所有语言中所做的｡
你得从头再来 直到您的程序满足您的所有要求｡