C语言1:初识C语言
C语言起源
1972年美国贝尔实验室的丹尼斯里奇和肯汤普逊在开发UNIX操作系统时设计了C语言。
C语言是为程序员设计开发的,初衷是将其作为程序员使用的一种编程工具。
C语言优点
能很好的控制硬件。
使用过C语言的人都对它很满意。
设计理念:让用户能轻松的完成自顶向下的规划,结构化编程,模块化设计。因此更易懂,更可靠。
高效性:代码紧凑,程序更小。可根据具体情况微调程序以获得最快运行速度和最有效的使用内存。
可移植性:
不做修改或稍作修改就能在其他系统运行。
如需修改,也只需简单更改主程序头文件中的少许项即可。
对特殊硬件设备或操作系统特殊功能编写的程序通常不可移植。
强大而灵活:许多操作系统和其他编程语言的编译器和解释器都是用C语言编写的。
面向程序员:为满足程序员的需求而设计的,可以利用C语言访问硬件,操作内存中的位。
C语言缺点
C语言使用指针,涉及指针的编程错误很难察觉。
代码紧凑,使用大量运算符,代码容易混乱费解。
计算机主要部件
中央处理器(CPU):承担绝大部分运算工作,负责处理程序。
随机存取内存(RAM):存储程序和文件的工作区。
硬盘:永久内存存储设备。
外围设备(键盘,鼠标,触摸屏,监视器):提供人与计算机的交互。
CPU工作原理
从内存中获取并执行一条指令,循环重复。
CPU的小工作区:若干个寄存器组成,每个寄存器可以存储一个数字。
储存在计算机中的所有内容都是数字。计算机载入寄存器的指令也是以数字形式存储,指令集中的每条指令都有一个数字码。
计算机程序最终必须以数字指令码(机器语言)来表示。
计算机工作原理
如果希望计算机做某些事,就必须为其提供特殊的指令列表(程序),确切地告诉计算机要做的事以及如何做。
必须用计算机能直接明白的语言(机器语言)创建程序。
高级编程语言
简化了编程工作。
不必用数字码表示指令,所使用的指令更贴近你如何想这个问题。
不用考虑CPU在完成任务时具体需要哪些步骤。
编译器
C语言是编译型语言
把高级语言程序翻译成计算机能理解的机器语言指令集。
把一种高级语言程序转换成供各种不同类型CPU使用的机器语言程序,提高可移植性。
语言标准
假设程序中未使用机器特定的编程技术,那么它的运行情况在任何实现中都应该相同。
要做到这一点,不同的实现就要遵循同一个标准。
C语言精神
信任程序员
不要妨碍程序员做需要做的事
保持语言精炼简单
只提供一种方法执行一项操作
让程序运行更快,即使不能保证其可移植性
使用C语言编程的步骤
1.定义程序的目标
想要程序做什么,程序需要什么信息,要进行哪些计算和控制,程序要报告哪些信息。
用一般术语描述问题。
2.设计程序
根据程序目标考虑如何用程序完成它,用户界面是怎样的,如何组织程序,目标用户是谁,如何表示数据,花多长时间完成。
还是用一般术语描述问题。
3.编写代码
也就是把设计的程序翻译成C语言
4.编译
使用编译器把源代码转换成可执行代码,可执行代码是用计算机的机器语言表示的代码。
机器语言是由数字码表示的指令组成。
C编译器还将源代码与C库的代码合并成最终的程序。
链接器:链接源代码与库函数,编译器自动运行链接器。
最终生成一个用户可以运行的可执行文件,其中包含着计算机能理解的代码。
编译器会检查C程序代码中的错误,从而报错或发出警告。
理解编译器报告的错误或警告信息是程序员的重要技能。
5.运行程序
运行可执行文件
6.测试和调试程序
检查程序是否按你所设计的思路运行,发现程序中错误bug。
查找并修复程序错误的过程叫做调试。
7.维护和修改代码
程序有错,扩展程序用途,添加新特性,使程序在不同计算机系统运行,都需要修改程序。
8.编写越复杂的程序,定义程序目标和设计程序环节越重要,越不可缺少。
源代码文件hello.c,基本名hello,扩展名c,扩展名写成大写C无效
编译过程
1.编译器把源代码转换成目标代码。
目标代码是机器语言代码形式。
2.链接器把目标代码,启动代码,库代码这3部分合并成可执行文件。
启动代码充当着程序和操作系统之间的接口。
库代码中存储着许多库函数的目标代码,链接器只会把程序中要用到的库函数代码提取出来。
如需更改某个模块,可独立编译该模块,不必重新编译其他模块,再用链接器合并已编译的模块。
在UNIX系统上编译
1.运行命令:cc demo.c 生成可执行文件a.out
2.命令窗口输入a.out,运行程序
命令:cc -v 显示你所使用的编译器及其版本
cc的别名:gcc或clang
gcc -std=c99 demo.c C99标准
gcc -std=c1x demo.c C11草案标准
gcc -std=c11 demo.c C11标准