《简单软件开发》由会员分享,可在线阅读,更多相关《简单软件开发(126页珍藏版)》请在金锄头文库上搜索。
1、从 C 语言入门到 Win32 软件开发 简介 非常感谢大家观看我抽空写的文档,本文档是我在实习期间写的,所以所教的内容比较小,比较基础。在这个文档里面,我教大家的主要是了解一下简单的C 语言语法和简单的 win32 程序基础而已,并没有深入去了解 C 语法和 windows api 函数的测试,因此,文章难免有错误的地方 ,请大家见谅。 1.C 语言基础入门 1.1 计算机常识 1.1-1 计算机运行原理 计算机的组成 计算机是一般由 主机,显示器,输入输出设备组成的,其中主机内部又有主板, CPU,内存,一
2、系列的适配器(网卡,声卡,显卡等),光驱等。 我们自己买计算机绝对要考虑的因素有 CPU 的性能,内存大小,因为它将决定我们安装系统的版本和计算机运行的速度。 计算机是怎样运行的 ? 计算机只能识别二进制文件, 因此,我们只有把我们的代码翻译成二进制文件后计算机才可以执行它, 这就涉及到编译和汇编过程了,日后我们会让大家 明白到计算机程序的开发过程的。计算机执行这段二进制代码的零件是 CPU,也就是说我们写出 的代码的优劣将很大程度上影响到软件的运行速度。好了,由于我们学的是软件开发,计算机原理我们就不深入解析了。 1.1-2 高级语言分类 什么是计算机
3、语言呢? 计算机语言的发展是先由机器语言(也就是二进制语言 10100010 这些)操作的,由于机器语言的可读性极差, 编译复杂,效率低,所以有了汇编语言的出现;汇编语言是将我们自己的可读性语言翻译成机器语言的一门语言 ,它是把我们的语言一一翻译成机器语言,因此我们要使用它得掌握很多机器语言,这也为汇编语言带来了局限性;总体上汇编语言 既提高了可读性,有提高了效率;如下面一段汇编语言 mov ax,data mov ds,ax ; lea dx,t
4、ab ; mov ah,9h int 21h mov ah,4ch int 21h 由于汇编语言的可读性还不够高,效率无法达到 人们的要求,且汇编语言是一门
5、高级的机器语言,各个厂家的汇编语言都不完全相同,这就导致硬件的兼容性问题,给人们工作带来了很大的麻烦,所以 后来程序员们为了开发速率开发出高级语言。我们常见的高级语言有 C 语言, C+语言, java 语言, Object-C 语言等。 所谓高级语言,是一门 完全的面向人类的语言,使用它不需要知道我所写的代码的机器语言是什么,因为计算机可以将我们所写的高级语言编译成汇编语言,然后汇编为机器语言,这样我们就无须懂 得什么是机器语言了。此外,计算机语言分为两大类,编译性语言和解释性语言。所谓编译性语言 就是要通过编译器将源文件编译为机器语言或者虚拟机语言,其中 C, C+就是编译为机器语言, J
6、ava和微软的 C#就是虚拟机语言, 解释性语言有 html 和 javascript 等一些脚本语言。 关于 虚拟机 语言, 编译器把 java 和 C#源文件编译为字节码为程序交由虚拟机器执行,我们玩得安卓手机 系统是谷歌公司开发出的一个虚拟机,我们用 java写的字节码就是运行在这个虚拟机上。在 windows 上写 java 程序必须要安装jdk(java 开发包 )和 jre(java 运行环境 ),没有这两个,我们的 windows 操作系统是跑不了 java 和 C#程序的。而 C 和 C+是被编译器直接编译为机器代码的,是最高级的计算机语言,学会 C 和 C+对计算
7、机原理会比学习其他语言更加了解计算机原理。此外,使用虚拟机语言是很消耗内存了,因为这个虚拟机本身就是一个占用内存很大的程序,玩过 ADT(安卓开发工具,从事安卓开发的程序员都用过 )的 同学都知道,这个 ADT 启动非常慢,而且占用内存特别大,不如用真机调试程序。 安装成功的 jdk 环境 Java 字节码程序在 windows 目录下 android developer tools(占用极高的内存 ) 至于 解释 性 语言呢,就是 使用我们开发的程序去解释运行的 一些简单语言,使用它们是因为开发效率的提高,我们不可能用 C 和 C+去写网页的,即使知道
8、用SetWindowText()可以修改窗口的标题, TextOut()可以输出文字等等。解释性语言如 html(超文本标志语言 ),在 windows 下,我们一般是使用 IE 内核去解释的,这就是我们为什么可以用记事本去写 html 代码, javascript 和 lua 都是类似的语言。现在微软已经抛弃 IE 浏览器了,现在最新的 win10 操作系统配置了 microsoft Edge浏览器了,无疑,我认为 Edge 浏览器的内核是 IE 内核,我觉得微软不可能重新开发一个内核,想想, html 这么多标签属性,还有 javascript 和网页播放器这些东西重写是很累的,对一个团队
9、来说, IE 内核开发完善是非常艰苦的工作。要精通 C 和 windows api,还有 html,还有 javascript 是比较难的。 1.1-3C 语言的出现及标准 20 世纪 60 年代,贝尔实验室用 B 语言着手开发出一个对计算机行业产生巨大影响的系统 UNIX 系统, 1970 年,汤普森使用汇编语言和 B 语言开发出 UNIX的第一版, 1972 年,有 人将 B 语言进行进一步的充实和完善,开发出 C 语言, 现在我们用的一般是标准 C,还有其它 C 语言的,如 C89, C90, C99 等,这些语言是大同小异,由此我们看见 C 语言也在不断地发展,
10、并非一朝一夕就可以变得完美的。 1.2C 语言程序的组成成分 1.2-1 常用集成编译器 我们这开发程序的时候一般用的是集成开发工具( IDT),常见的开发工具有Visual Studio,Visual C+,Qt Creator 等,在 这里我推荐大家用 Visual C+,因为它是专门用于开发 C/C+软件的,并且它很小,不像 VS 那么大,同 学们可以在他们的官网上下载。 QT Create Visual C+6.0 VS2010 注意,安装 QT 后可能要配置环境变量,因为各个 Qt 的版本不同,有的需要配置,有的不需要配置,
11、大家可以上网搜一下。 1.2-2 第一个程序 hello world 首先,我们打开 VS2012(由于笔者用的系统 之前 为 Win8.1(现在为 Win10) ,不支持 VS2010,且笔者工作是用 VS 的,所以以下步骤都是在 VS2012 上实现的) . 选择新建 >项目 选择 Win32 控制台应用程序 (因为我们学习 C 语言一般在控制台程序下学习) ,输入名称; 选择下一步,选择空项目,如下图所示; 点击完成 后,在解决方案 test 下面的源文件中添加新建项,选择 C+文件,在名称处输入 test.c 总之是 .c 文件都
12、,可以如下图所示 ; 输入一下一段代码,注意不要用中文输入法输入,然后按 Ctrl+F5 编译运行 #include int main( ) printf(“hello world!n”); return 0; 得到结果如下所示 1.2-3 程序的编译过程 程序的开发过程是分步的 ,过程有预编译,汇编,编译,链接,最后生成 .exe文件 -E 预编译 Gcc E o a.e a.c 预编译 a.c 文件,生成的目标文件名为 a.e 预编译是将 include 包含的头文件内容替换到 C 文件中中,同时将代码中没
13、用的注释部分删除 -S 汇编 -s 就是将 c 语言转化为汇编语言, -c 编译 将代码编译为二进制的机器指令 以上命令在安装后 QT Creator 并配置环境变量后可以使用, VS 的编译命令太复杂了,有 VS 进行分步编译的效率低,代码量大 下面是 QT 环境变量的配置 右击我的电脑 >属性,高级系统设置,点击环境变量,系统环境变量,新建一个变量,变量名 QTDIR,变量值为 QT Creator 安装目录如 : C:QTQT4.8.6, 然后在 PATH 变量中加入 bin 包的安装
14、目录,如: C:QTQT4.8.6bin(注意在上一段变量值后面加上分号 ;分开 ),具体可以参考 C:QTQT4.8.6binqtvars.bat文件 最后新建变量 QMAKESPEC,变量值为 Win32-msvc2010 由于各个 QT 版本 的不同可能配置方法不同,大家最后参考官方说明以及C:QTQT4.8.6binqtvars.bat 1.2-4 头文件 #include是包含头文件 stdio.h 的意思,这个头文件中包含了许多我们将来要用到的函数,如 printf(),函数,我们的程序在编译过程中一般先加载头文件,然后取出头文件里的函数进行编译
15、, 等我们学习 C+之后我们实现函数声明和函数实现的分离 ; 系统原有的头文件我们一般用 #include"test.h" int main( ) int age; age=20; printf("My age:%dn",age); return 0; 这样书写是错误的,因为 age的作用域为 ,超出这个区域就不可用了; 主函数是一个程序的入口地址,每一个面向过程的程序都有一个主函数,控制台程序的主函数为 main()函数, Win32 程 序的主函数为 WinMain()函数 ; 大家可以新建一个 Win32 项目
16、来测试 ,点击新建 win32 项目,输入名称 选择空项目,注意是 windows 应用程序 在源文件中添加新建项,选择 C+文件,输入 test2.cpp 由于我们学习的是 C语言 ,可以改为 .c 输入以下代码 结果如下所示 由于 C 语言是面向过程的一门语言,所以它的执行过程将是主函数 里面的每 一段代码。这也是 C 语言的缺点, C+语言不同,它是面向对象的 ,不过它的效率比 C 语言略低, 影响不大,因此, C+广受程序员们的喜爱。 1.2-5 参数 参数就是函数括号里面的变量,是我们调用函数是必须初
17、始化的数据。 float Display(float r) return pi*r*r; 在参数调用时,形式参数可以改变,实际参数不会改变。 (指针参数除外 ) 1.2-6 返回值 例子中 main()函数前面的 int 为返回值,表示函数要返回一个 int 类型的值,返回什么类型的值用什么类型去接,如 #include #include #define _CRT_SECURE_NO_WARNINGS #define pi 3.14 float Display(float r) return pi*r*r; void ma
18、in() float r; float area; scanf(“%f”,&r); area=Display(r); printf(“area=%fn”,area); system(“pause”); 结果如下 /注意,由于 C 语言是面向过程 ,在一个作用域内的变量必须要在函数调用之前声明,有时候需要初始化 ,所以在定义变量是一定要放在代码区的最前面 下面是错误的 float r; scanf(“%f”,&r); float area; 关于返回值,我们一般用返回值来做计算结果或者函数执行判断的 (如GetLastError()就是 windows 开发最好用的错误判断的,具体错