1 计算机体系结构
计算机主要由硬件和软件的协作完成生活和工作中的绝大多数事情,例如听音乐,看电影,上网聊天,购物等等。
硬件主要包含CPU,内存,外存,IO设备等组成。
CPU:负责从内存中读取进程的数据进行各种运算和控制其他设备
内存:分为RAM(随机访问存储器)和ROM(只读存储器,例如BIOS),只是负责暂时存储数据,断电后数据会消失。做程序开发时一般配置的内存为8-16G,而当台服务器的内存一般为64G。
外存:用于永久存储数据,常见的外存有机械硬盘和固态硬盘,其中固态硬盘的读写性能高于机械硬盘。
IO设备:主要是完成数据的输入输出,常见的IO设备包含鼠标键盘,声卡显卡等等。
软件的出现实现了人和计算机更好的交互
常见的软件包含运行于服务器端,基于命令行交互的Unix(Solaris11),Linux(RedHeat Enterprise 7).
运行于PC端,基于图形界面交互的Windows10(PC),Linux(Ubuntu16),MacOSX10.10。
运行于手机或者嵌入式设备,基于语音手势,体感交互的Android,IOS。Android是基于Linux内核发展而来,IOS是基于MacOSX衍生而来。
还有些运行在系统软件之上的应用软件,例如微信,支付宝,天猫等等。而系统软件底层都是采用C/C++编写的。
2 编程语言发展史
程序就是由指令系统加上数据集组成,而每个CPU都有自己的指令系统(由二进制的机器码01序列组成),PC上是X86指令系统,而手机上是ARM指令系统,这也就意味着PC上的程序不加修改不能直接到手机上运行,手机上的程序也是如此。这也就是最早的机器语言的由来,它的主要特点是高效,不能移植,可读性差,而且后期维护非常困难,想象一下要记那么多的机器指令是多么艰难的事情。
斗转星移,汇编语言和编译器的出现解决了需要记住非常多的机器指令的难题,但是还是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,然后由编译器编译成机器指令,因为计算机终归揭底智能识别0001110100110机器指令
这里的代码是演示Windows上将汇编语言嵌套在C语言中使用,完成两个变量相加的结果
void use_asm(){
int a, b, c=0;
a = 4;
b = 6;
printf("a = %d \t b=%d\tc=%d \n",a,b,c);
_asm{
mov eax, a;
add eax, b;
mov c ,eax;
}
printf("a = %d \t b=%d\tc=%d\n", a, b, c);
}
void main(){
use_asm();
getchar();
}
时光再流转,在1972年C语言的诞生,凭借着可移植性,和汇编差不多的高效以及无所不能的强大功能,引领了IT行业的发展,Unix,Windows,Linux都是采用C语言编写,但是它也存在着对平台库依赖比较严重,只有标准C的部分是可移植(所有的主流操作系统都实现了C语言的标准库函数)等缺点。而后期的C++,Java,C#等编程语言在很多方面都吸收了C语言的优点,新增了面向对象(OO)等诸多的特性,适合做应用开发。
接下来看看运行在各大主流操作系统的C程序,顺便简要介绍对应平台的IDE
3 Windows C程序设计
1 Windows C HelloWorld
开发工具: VisualStudio2013
运行环境: Windows7
编译器: CL(VisualStudio2013提供的C语言编译器)
//导入共通的头文件
#include //#表示预处理,在预编译时执行 头文件中只是包含了函数的声明,函数的实现位于源文件中
#include
#include
//Windows平台的C语言版HelloWorld
#include "common.h" //包含共同的头文件
/* * 第一个C语言程序 * C语言的程序若想编译并运行,必须声明 main方法(有且只能有一个,作为程序的主入口),具体如下。 * @author tony 18601767221@163.com * @date 2015/11/11 */
void main(){ //void 表示main函数返回值为空
//这里的程序会从main函数的第一行执行到最后一行
printf("Hello World In Windows7 \n"); // BUG :程序中可能会出错的地方 断点:F11测试程序一步一步执行,然后观察程序执行结果
printf("Hello World In Windows7 again\n"); //每个语句以";"结束
getchar(); //等待输入任意字符回车就退出程序
/* C语言编译器不能识别中文符号,必须在英文状态下输入 VisualStudio2013运行时,解决方案的单个项目中只能有一个main程序,不然程序无法编译运行 */
}
头文件(.h):包含了函数的声明,就像字典的目录
源文件(.c):包含了函数的实现,就像字典的全书
//:表示单行注释,注释的内容会被编译器忽略
/**/:表示多行注释,注释多行。开发中应该多写注释,说明代码的用途
关于VisualStudio2013的一些快捷键:
先介绍几个调试的快捷键吧,初接触C语言,可以使用IDE的调试功能来观察程序执行的过程
F5 :调试并运行
F11:每次执行一行代码
F10:每次执行一个方法
Ctrl+Alt+F7:重新生成解决方案,也就相当于重新编译代码
2 使用标准C库函数system完成Windows系统程序的命令调用
在主流操作系统中可以使用命令来完成许多功能,而在C语言中就可以使用位于stdlib(标准库)的头文件中的system函数完成各大操作系统的命令调用
#include "common.h" //包含共同的头文件
/* * @author tony 18601767221@163.com * @date 2015/11/12 */
/* windows系统下的常用系统程序命令 */
void command(){
system("calc");//打开计算器
system("notepad");//打开记事本
system("stikynot");//打开便签 该命令在cmd下可以打开便签,system函数无法调用成功
system("appwiz.cpl");//打开程序和功能
system("firewall.cpl");//打开防火墙
system("explorer");//打开资源管理器
system("regedit");//注册表
system("shutdown -s -t 600");//10分钟以后关机
system("shutdown -a");//取消关机
system("desk.cpl");//屏幕分辨率
system("taskmgr");//任务管理器
}
/* 程序的主入口 */
void main(){//void 表示main函数返回值为空
command();
getchar();//等待输入任意字符退出程序
}
4 Linux C程序设计
开发工具: VIM
运行环境: Linux(RedHeat Enterprise 7)
编译器: gcc
系统说明:采用VMWare WorkStation 虚拟了一个Linux(RedHeat Enterprise 7),RedHeat Enterprise或者开源版CentOS7是最常用的企业版Linux,安装教程自己网上收罗吧。其实Windows也是一个虚拟机,只是它是宿主机。
1 Linux C HelloWorld
VIM是一个基于命令行的强大编辑器,这里说下简单使用
通常都是采用SSH工具连接远程的Linux服务器,推荐使用SecureCRT,配置主机名,用户和密码之后就能连接,默认端口为22.
在命令行下输入VIM helloworld.c,然后”i”进入编辑模式,输入如下代码
#include //在Linux系统中也是有C语言的标准库函数
void main(){
printf("Hello World In CentOS7\n");
printf("Hello World In CentOS7 Again\n");
}
然后按下ESC,输入: wq即可编辑并保存完成在你登录之后的路径.然后使用gcc编译名为HelloWorld.c的源文件,gcc编译器有几个编译选项,借助这几个选项了解下Linux系统的C语言编译链接的过程。
C语言编译运行第一步-预编译:
将#include的头文件替换到源程序中,可以使用gcc -E HelloWorld.c -o HelloWorld.o 执行预编译,查看将头文件中的内容替换到源文件后的结果。
C语言编译运行第二步-转汇编:
操作系统都不认识C语言编写的源代码,必须转换成对应的汇编代码。可以使用gcc -S HelloWorld.s -o HelloWorld.c将源代码编译成汇编代码
C语言编译运行第三步-链接:
在生成汇编代码之后,将系统库文件以及启动代码链接组成二进制的可执行文件。可以使用gcc -o HelloWorld.o HelloWorld.c来完成编译和链接。
2 使用标准C库函数system完成Linux系统调用
#include // import stand libary head file
int main(){
system("ps -a"); //show process list
system("who am i"); // current loign user
system("gedit"); // start gedit process
}
5. MacOSX C程序设计
开发工具: XCode6.4
运行环境: MacOSX10.10
编译工具:XCode自带的C语言编译器
系统说明:采用VMWare WorkStation虚拟一个MacOSX10.10操作系统并下载XCode6.4,需要解锁插件,具体过程网上搜罗。
1 MacOSX C HelloWorld
#include
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n"); //
return 0; //返回整数0表示程序正常退出
}
在开发C/C++程序时还有一些跨平台的IDE,例如QT,CodeBlocks。在使用IDE开发大型项目时会提高开发效率以及降低后期的维护成本。