C语言是大部分人接触的第一门计算机语言,虽然很多学校将C作为一门初始语言,但是其难度还是有的。计算机只具有一维思想,我们需要通过计算机语言将二维或三维的问题或者现象转化为一维,让计算机执行。这个转化过程就是难度所在。
本文只是对c代码进行一个简单的介绍:
一段C的简单代码
#include <stdio.h> //预处理指令
int main ( ) //main函数,(void修饰无return,其余类型修饰必须有return)
{ //函数开始标志
printf("Helloword !"); //printf是库函数{}大括号内所有的代码都称为函数体,""里面是字符串
return 0; //函数返回值(刚开始写0即可,在函数部分会开始改变)
} //函数结束标志在这里插入代码片
void main()
{}//C99之前main函数的写法
初学者并不懂这段代码格式为什么需要这样去写,单纯的只记住这个格式,个人认为,在学习过程中,先应清楚为什么会这样,再去学习
为什么要写#include&编译过程
首先要了解C语言的三个文件 .c文件 (源文件) .o文件 (目标文件) .exe文件(可执行文件)
.c文件 | 我们自己在vc上写的代码 |
---|---|
.o文件 | .c文件经过编译生成 |
.exe文件 | .o文件经过链接生成 |
目标文件和可执行文件必须经过编译链接才可生成,这也就是为什么要在vc6.0中点编译和链接按钮,更新一些的开发环境,直接用ctrl+F5即可代替执行。
但是,编译和链接又做了什么事呢
编译
- 将源代码中#include<stdio.h>其中的内容替换至源代码中。C开发者写的stdio.h的代码有近一千行,我们在调用时,只需写此一行代码,就囊括了开发者写的功能
- 删除注释,也就是用空格替换,//符号后的内容
- #define,通俗来说就是我们自己定义的预处理指令,#include是开发者定义的预处理指令
#开头的都是预处理指令,在编译阶段中的预处理阶段执行,如上图(预处理等价于预编译)。 - 经过上述三步,将c代码翻译成汇编代码
链接
生成的.o文件经过链接器的捆绑,形成一个单一而完整的可执行程序,通时引入标准c库函数中任何被该程序所用到的函数
- 将汇编代码翻译成二进制代码,也就是机器指令,也就是010101一串二进制
- 编译和链接并不止以上所写,对于初学者来说,了解这些已经足够。
为什么是<>中写的是stdio.h:
我们所使用的printf函数是开发者在stdio.h中定义的,当我们调用这个头文件时,vc识别到main函数中有printf,会自动将开发者实现的printf功能提供给我们使用,如果我们不写stdio.h,那么我们在main中写的printf函数就会报错,系统无法识别printf是什么意思。
函数(Java中称为方法);
函数可以说是实现代码功能步骤的一个集合,一个c程序只有一个main函数,我们的编译器在识别到main后,从此处开始执行。
- main前的int是函数的返回类型,若此处int改为void,则无返回值,也就是无return 0;这个语句。
- main后的()是一个操作符,()告诉vc编译器,它前面的main是一个函数。printf后的()同理;
- 操作符是c语言中一个重要的部分,它与各字母结合有着不同的意义
我们可以通过一个特定的指令,重新定义一个程序的函数入口
#pragma comment (linker, "/entry:fun")
//此时定义了一个新入口,fun函数就可以充当main函数的功能,在此指令下编译程序不会报错
int fun ()
{
printf("1111\n");
return 0;
}
以后学习数组时,int arr[5]中,[ ]这也是一个操作符,说明[ ]前面叫做arr的字母是一个数组。
以上只是为初学c语言,对代码格式存有疑惑同学的一个简单通俗解释,其中各个过程并非几句话可以说清。在程序编译及链接部分再详细论述。