Part 0:本文参考资料
C 程序结构 | 菜鸟教程www.runoob.comPart 1:从今天开始,真的要写代码了!
打开Dev-cpp,点击左上角的白色小方框和“源代码”或者键入【Ctrl+N】,开始编写代码
输入以下代码
#include <stdio.h>
int main(){
printf("Hello world!");
return 0;
}
键入【Ctrl+S】保存,保存类型选择“C source files”
然后按下【F11】编译并运行,数秒之后出现黑框
(由于我设置了透明度,所以不是纯黑的)
至此,你成功地输出了Hello world!
撒花!
(P.S. 此时你会发现在你保存代码的地方多了一个exe,你尝试着打开它,却发现它一闪而过,此时,你需要在代码的return 0;
前面加一句话:getchar();
)
Part 2:你的代码到底是怎么变成了exe(可以跳过)
你想哈,好端端的一个源代码,甚至就是普通的文本文件,用记事本都能打开的东西,怎么就成了exe呢?
C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识。
那你好奇了,CPU认识啥?
CPU只认识几百个二进制形式的指令。
假设没有C语言,你写代码很可能是这样子的:
0010101010111010001010010101010101001100101010101010010101001010101010100101010101000101001010100101010101010010101010101010101010101010010101010
Oh My God!看的真是令人头大!
这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe
程序的格式;这个工具是一个特殊的软件,叫做编译器(Compiler)。
编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)。
其实你也可以说,编译就是一个翻译的过程
翻译过后,你的文件就变成了.exe
吗?想得美!生成的文件是.o
或者.obj
你又网抑云了,这到底是为什么呢……
因为编译只是将我们自己写的代码变成了二进制形式,它还需要和系统组件(比如标准库、动态链接库等)结合起来,这些组件都是程序运行所必须的。
链接(Link)其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)。
随着我们学习的深入,我们编写的代码越来越多,最终需要将它们分散到多个源文件中,编译器每次只能编译一个源文件,生成一个目标文件,这个时候,链接器除了将目标文件和系统组件组合起来,还需要将编译器生成的多个目标文件组合起来。
再次强调,编译是针对一个源文件的,有多少个源文件就需要编译多少次,就会生成多少个目标文件。
最后的重点:链接的作用是:把程序打包
Part 3:一个C语言的代码是怎么组成的
一个C语言的代码大概可以分为五块,分别是:
- 预处理器指令
- 函数
- 变量
- 语句 & 表达式
- 注释
其中,预处理器指令最好识别,他们的开头一定会出现#
,例如这一句:
其次是函数,函数一般表示为关键字 函数名()
,例如
哦,有的小可爱跑走了,因为他特别讨厌函数,嘤嘤嘤,这不是欺负伦家了嘛!
其实,在C语言中,函数只是把一些行为用大括号框在一起,取了个名字
就这?就这就这就这?
真的就这
而请你记住:main()这个函数是最特殊的函数,一切程序都是从main()函数开始
然后是变量,变量和函数长得很像,只不过是少了个()
再就是语句和表达式。语句和表达式就是上文提到的“行为”,而区分语句和表达式有一个很好的方法,我举个栗子
x + 3;
5 + 2;
7 + 8;
'a' - '0';
这些是表达式,他们一定能代表某一个具体的值
而看看这些东西:
x = 3;
y = 7;
z = 'a';
这些都是表达“一个变量等于某一个值”,他们是语句
而语句的左右两侧,都是一个表达式
是不是很懵?那就先不管区分
你会发现,C语言中不管是表达式还是值,都有一个共同的特点:结尾都必须有分号
这也是C语言的要求之一:每一个语句结尾必须有分号,每一个表达式的结尾也必须有分号
最后是注释,注释是为了解释你这个代码的作用,分为单行和多行
//这里是单行注释,双斜杠后面的内容在编译时会被忽略
/*
这里是多行注释,同样的,这里的内容也会被忽略
都是写着给你自己/别人理解的
*/
Part 4:输出
上一节的内容光讲不好理解,我们要放到实际的例子中去对比,暂时把他放一放
那么我们来看看上一个代码中,我们是如何让计算机在黑框框上显示Hello world!
的
其实就是这个函数printf()
做到的
printf()
这个函数可以输出引号内的内容(注意!是英文引号!所有的符号都得是英文的!)
比如我们换一个试试:
#include <stdio.h>
int main(){
printf("知乎海王 txdy!我爱海王");
return 0;
}
试试这段代码会怎么样?(斜眼笑.png)
好啦好啦,放下你40m的大刀,再尝试用这个函数输出点不同的东西吧!
接下来,我来给你看看printf()
的一些“骚操作”,例如:换行
#include <stdio.h>
int main(){
printf("知乎海王ntxdy!");
return 0;
}
看看会输出什么?
OHHHHHHH!他换行了!
其实,这是转义字符n
的作用
在C语言的引号内(我们把它叫做字符串),+...
被称为转义字符,他们可以把一些看不见摸不着的东西给输出出来,例如换行,下面是一些常用的转义字符
此外,你可以使用多条printf()
来输出:
Part End:作业&笔记
笔记:
推荐阅读:
《C Primer Plus》第一章内容,可以选择性的跳过
以及,尝试理解2.1~2.2的内容
作业:
尝试用printf输出自己的知乎账号名
尝试用printf输出这段话(方括号内表示特殊操作):
Scaft Datami Ley [换行] Timed [tab] Forinser