c语言对于大多数高校学生来说都是入门语言,作为一门启蒙语言,C语言的地位和那经典的helloworld语句已经见证了一批又一批优秀的程序员的成长之路,下面我们将正式开始c语言的学习之路,首先我们先来认识下C语言。
什么是C语言?
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程 语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的 C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及 超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制 定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8 日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的
第三个官方标 准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉 字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。 其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等的哦
下面来看一个简单的c语言程序
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>/*头文件,里面包含了当前的printf()函数,具体的实现已经由 库里面实现好了,只需拿来调用即可*/ int main()/*int为方法的返回时类型,main为方法的名称,小括号里面为参数列表 即为形参,且参数列表可有可无*/ //且main函数作为程序的入口,有且只有一个 { printf("helloworld");/*printf为库函数,分号代表了当前语句的结束,同时在 使用库函数时一定要使用对应它的头文件,例如printf函数所对应的都文件为 stdio.h*/ return 0;//return语句代表了程序的结束,而当返回0时代表了程序的正常结束 //printf("helloworld请22");//若是在return语句后面写语句的话是不会被执行的 }
在这里我们将其中的一些语句做下解释:
第一行中的#define _CRT_SECURE_NO_WARNINGS 1是由于我们在编译老的用C语言的开源项目如lua源包的时候,可能因为一些老的.c文件使用了strcpy,scanf等不安全的函数,而报警告和错误,而导致无法编译通过。此时在指定的源文件的开头定义:#define _CRT_SECURE_NO_WARNINGS 1 (只会在该文件里起作用),便不会报错 #include<stdio.h>是头文件,里面包含了当前的printf()函数,具体的实现已经由库里面实现好了,只需拿来调用即可,具体哪种库函数属于哪种头文件可以进入msdn查看 main()方法中int为方法的返回时类型,main为方法的名称,小括号里面为参数列表即为形参,且参数列表可有可无,且main函数作为程序的入口,有且只有一个。 printf为库函数,分号代表了当前语句的结束,同时使用库函数时一定要使用对应它的头文件,例如printf函数所对应的头文件为stdio.h return 0语句代表了程序的结束(如果在一个return 0语句后面再写代码的话,便不会在执行了),而当返回0时代表了程序的正常结束。
扩展:一个.c文件到.exe文件中间的过程是什么?
答:会经历预编译,编译,汇编,链接四个过程。
预编译:即把头文件中的内容拷贝到当前的.c文件。
编译:编译阶段是检查语法,生成汇编,这个属于程序员的必备知识,我们学习一门语言第一步就是知晓语法,其中比较生涩的有左值右值,指针的使用,内存的管理,数据结构的使用,这将会是一场持久战 ,贯穿在整个学习生涯。
汇编:汇编代码转换机器码 这个阶段,非底层的程序员不需要考虑, 编译器不会搞错的。也与c/c++开发者无关,但是我们可以利用反汇编来调试代码,学习汇编语言依然是必备的。
链接:
开头我引用一下百度百科的介绍
静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。
动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。
将源文件中用到的库函数与汇编生成的目标文件.o合并生成可执行文件。该可执行文件会变大很多,一般是调用自己电脑上的。
静态库和应用程序编译在一起,在任何情况下都能运行,而动态库是动态链接,文件生效时才会调用。
很多代码编译通过,链接失败就极有可能在静态库和动态库这出现了纰漏,要视情况解决。缺少相关所需文件,就会链接报错。这个时候就要检查下本地的链接库是不是缺损。