作者:Eventi 出处:http://www.cnblogs.com/Eventi 欢迎转载,也请保留这段声明。谢谢!

作者:Eventi 出处:http://www.happyeventking.online 欢迎转载,也请保留这段声明。谢谢!

1 C语言的起源

1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritch)和肯·汤普逊(Ken Thompson)在开发UNIX操作系统时设计了C语言。

C语言是在B语言(汤普逊发明)的基础上进行的设计。

2 C语言的特点

2.1 优点

设计特性:能轻松的完成自定向下的规划、结构化编程和模块化设计;C语言编写的程序更易懂、更可靠。

高效性:运行速度快,更接近汇编语言的高效特性和微调的能力。

可移植性:C程序只需要稍作修改或不修改,通过其他系统的C编译器进行编译就能其他的系统上运行。而无论是使用家庭计算机、专业工作站,还是大型机;无论是使用Windows、Unix、linux还是Mac操作系统;从8位微处理器到超级计算机都能找到针对特定系统的C编译器。

强大而灵活:很多的操作系统有C程序的代码以及很多编程语言的编译器、解释器都由C语言实现,C程序还可解决物理学、工程学的问题,甚至可用于制作电影的动画特效

面向程序员:程序利用C可以访问硬件、控制内存中的位。

2.2 缺点

C语言功能强大,但却很容易犯错误。特别是指针的使用很强大,但稍不留神就容易出错。

3 C语言标准

3.1 K&R C或经典C

1987年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The Programming Language第一版是公认的C标准,通常称之为K&R C或经典C。实际上,由于缺乏官方标准,UNIX实现提供的库已成为标准库。

3.2 ANSI/ISO C标准(也叫C89或C90标准)

美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准定义了C语言和C标准库。

国际标准化组织与1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。

ANSI/ISO标准的最终版本通常叫作C89(因为ANSI于1989年批准该标准)或C90(因为ISO于1990年批准该标准)。另外,由于ANSI先发布C标准,因此业界人士通常使用ANSI C。

3.3 C99标准

1994年,ANSI/ISO 联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。

3.4 C11标准

标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。

4 C程序的编译与链接

C程序的源代码通过编译器的编译生成目标代码,目标代码、库代码和启动代码通过连接器的链接生成可执行代码。其过程如下图所示:

5 C程序的基本结构

5.1 典型的C程序

一个简单的C程序代码:

#include <stdio.h>

int main(void)                    /*一个简单的C程序*/
{
int num; /*定义一个名为num的变量*/
num=; /*为num赋值*/ printf("I am a simple "); /*使用printf()函数*/
printf("computer.\n");
printf("My favorite number is %d because it is first.\n",num); return ;
}

一个简单的C程序可剖析为如下结构:

5.2 简单C程序基本概念

5.2.1 #include指令和头文件

#include这行代码是一条C预处理器指令(preprocessor directive)。通常,C编辑器在编译前会对源代码做一些准备工作,即预处理(preprocessor)。

#include <stido.h>的作用相当于吧stdio.h文件中的所有内容都输入到该行所在的位置。

5.2.2 main()函数

C程序一定是从main函数开始,并以main函数的结束而结束。

5.2.3 注释

适当的注释能提高程序的可读性,在C程序中支持两种注释风格。具体如下:

/*这是一条注释,可多行注释*/
//这是一条注释,只能单行注释(C99新增的注释风格)

5.2.4 花括号、函数体和块

{
......
}

一般而言,所有的C函数都使用花括号来标记函数体开始和结束。例如main函数:

int main(void)
{
/*函数体*/
}

花括号还用于把函数中的多条语句合并为一个单元或块。例如for语句:

for(;;)
{
/*多条语句*/
}

5.2.5 声明

int num;

这条声明完成了两件事,其一,在函数中有一个名为num的变量,其二,int表明num是一个整数。

在C语言中,所有的变量都必须先声明才能使用。

5.2.6 赋值

num = ;

在执行int num;声明时,编译器在计算机内存中为变量num预留了空间,然后在执行这行赋值表达式时,把值存储在之前预留的位置。

5.3 调试程序

5.3.1 语法错误

不遵循C语言的规则就会犯语法错误。 编译器一般能检测出来。

5.3.2 语义错误

语义错误就是意思上的错误。编译器一般不能检测出来。

学习书籍《C Primer Plus 第六版》笔记

C语言学习笔记01——C语言概述的更多相关文章

  1. C语言学习笔记一---C语言概述

    一.编程语言与解释语言 1.程序的执行 a.解释:借助一个能试图理解程序的程序,使计算机按要求执行你自己写的程序 b.编译:将所写程序翻译为机器语言写的程序,使计算机按要求执行你自己写的程序 2.两者 ...

  2. Go语言学习笔记(一) [Go语言的HelloWorld]

    日期:2014年7月18日   1.简介     Go 编程语言是一个使得程序员更加有效率的开源项目.Go 是有表达力.简 洁.清晰和有效率的.它的并行机制使其很容易编写多核和网络应用,而新奇的类型系 ...

  3. C语言学习笔记---1.C语言概述

    1.典型C程序结构 2.C程序细节 2.1#include指令和头文件 #include这行代码是一条C预处理器指令(preprocessor directive).通常,C编译器在编译前会对源代码做 ...

  4. Spring AOP学习笔记01:AOP概述

    1. AOP概述 软件开发一直在寻求更加高效.更易维护甚至更易扩展的方式.为了提高开发效率,我们对开发使用的语言进行抽象,走过了从汇编时代到现在各种高级语言繁盛之时期:为了便于维护和扩展,我们对某些相 ...

  5. 【C语言学习笔记】C语言函数执行成功时,返回1和返回0,究竟哪个好?

    基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...

  6. go语言学习笔记-初识Go语言

    Go语言是怎样诞生的? Go语言的创始人有三位,分别是图灵奖获得者.C语法联合发明人.Unix之父肯·汤普森(Ken Thompson).Plan 9操作系统领导者.UTF-8编码的最初设计者罗伯·派 ...

  7. R语言学习笔记1——R语言中的基本对象

    R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...

  8. C语言学习笔记:15_c语言中的进制操作.c

    /* * 15_c语言中的进制操作.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include & ...

  9. C语言学习笔记---2.C语言数据类型

    1.C语言基本数据类型 1.1 int类型 int类型是有符号整型,即int类型的值必须是整数,可以是正整数.负整数或零.其取值范围依计算机系统而异.一般而言,储存一个int要占用一个机器字长. 声明 ...

随机推荐

  1. 【ARC098F】Donation

    [ARC098F]Donation 题面 atcoder 题意: 给定一张\(n\)个点,\(m\)条边的无向图.这张图的每个点有两个权值 \(a_i,b_i\). 你将会从这张图中选出一个点作为起点 ...

  2. X86 下的SSDT HOOK

    目录 SSDTHOOK 1.SSDTHOOK 原理. 1.x32下的SSDT HOOK 2.SSDT HOOK代码 3.结果 4.总结 SSDTHOOK 1.SSDTHOOK 原理. x32下,直接获 ...

  3. ajax下post提交方式下载文件的处理(转)

    ajax是不能直接下载文件的,所以一般都是通过一个超链接的形式去下载一个文件 但是当牵扯到需要发送很多数据到服务器上再下载的时候超链接的形式就有些不好看了, /*=================== ...

  4. jmeter(四十六)参数化与断言实战

    概述 今天用jmeter做一次参数化实战.通过计数器遍历参数表,然后查询jdbc进行beanshell断言. 涉及元件 用户参数,计数器,正则表达式,jdbc,beanshell脚本 详细过程 在我们 ...

  5. MyBatis(十):Mybatis 几种批量操作的对比

    本章主要讲解几种批量处理的用法及对别,批量处理一般用法包含以下几种: 1)普通foreach处理(没循环一次执行一次与mysql服务器交互操作),实际上也是采用的ExecutorType.SIMPLE ...

  6. 【深入学习linux】CentOS 7 最小化安装后程序必须安装的组件

    centos平台编译环境使用如下指令 安装make: yum -y install gcc automake autoconf libtool make 安装g++: yum install gcc ...

  7. SyntaxError: expected expression, got ")" void() : 1: 5

    这个错误的意思是: 本来希望得到 一个 表达式, 缺得到了 ), 凡是 这样的错误, 就是 函数 在当前位置, 需要一个参数! 参数没有给, 就 输入 ) 右括号了! 错误位置 1: 5, 就是 指 ...

  8. kotlin基础 尾递归

    尾调用的重要性在于它可以不在调用栈上面添加一个新的堆栈帧——而是更新它,如同迭代一般. 尾递归因而具有两个特征: 调用自身函数(Self-called): 计算仅占用常量栈空间(Stack Space ...

  9. windows系统下设置mtu值的方法

    说起 MTU 值,可能许多朋友连听都没听说过.简单来说,我们上网时所进行的操作,都是通过传输一个又一个“数据包”来实现的,而 MTU 值就是用来设定可传输数据包的最大尺寸的.很显然,MTU 值设置得过 ...

  10. oracle 统计成绩

    set serveroutput on; declare cursor c1 is select dno,dname from dep; pdno dep.dno%TYPE; pdname dep.d ...