第1章 C语言绪言
1.1 C语言概述
1.1.1 C语言世界
1.1.2 C语言学习, 能当饭吃吗
1.2 开发环境构建
1.2.1 visual studio安装使用
1.2.2 visual studio无脑调试
1.3 请记住 hello world
1.3.1 注释详解
1.3.2 也许这一章是最难的
1.4 扩展阅读 - visual studio编译流程
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
1.1 C语言概述
C语言的诞生是现代程序语言革命的起点。今天,C语言依旧在系统编程、嵌入式编程等领域占据着统治地位。
C语言是丹尼斯·里奇[Dennis Ritchie]开发的。因此,他被称为c语言之父、UNIX之父。
和其它大多数语言不同,C语言有一个漫长的进化过程。就说当下开发人员会用到的C的版
本就有C89[1989年C标准组织定义的C标准规范], C99, C11.本书将会采用C11系列语法分析和举例子.
C语言历经很多年,从一个实用工具进化为一种经过大量实践和测试的语言。第一个C
语言编译器大约出现在1970年。时光荏苒,作为它的根基的Unix系统得到了广泛使用,C
语言也随之茁壮成长。它对直接由硬件支持的底层操作的强调,带来了极高的效率和可移植
性,反过来也帮助了Unix获得了巨大的成功。
下面感受一下出自C语言之父的手稿
In C, the program to print "hello world" is #include <stdio.h> main() { printf("hello world\n"); }
感谢有你!
1.1.1 C语言世界
信息时代已经和C语言世界密不可分. 一直在你我身边. 例如当我们享受快捷的刷脸支
付的时候, 手机使用底层运行环境就是C语言实现的.
在我们登上飞机观看实时直播的视频节目, 提供流传输服务的底层多数仍然是‘C语言‘.
同样我们使用PC操作系统内核清一色也是C写的. 例如中科院和Ubuntu合作的
Ubuntu Kylin操作系统.
通过上面举例, 就是为了说明. C语言是信息社会提供信息服务的基础!
1.1.2 C语言学习, 能当饭吃吗
C真的可以当饭吃. 学的越好, 饭吃的越有意思.C语言是冯诺依曼计算机软件软件体系的基石.
只要这个计算机架构没有变化. 那么C永远这个体系中最强结界. C哲学强调的是自由,最小
意外. 程序员需要对自己代码负责.
举例来说, C语言最大优势在于和软件开发底层机制联系的很紧密. 而理解底层的开发
人员, 最大的好处基础扎实在于知其然,知其所以然. 更能融会贯通, 武功突破瓶颈更加容
易. 程序世界, 万般语言皆奥妙, 唯C一剑可破之. 但愿你就是下一个风清扬.
C 语言怎么学习, 推荐用最笨的方法.
1. 多看几遍, 不懂那就照着抄3遍
2. 多做题, 多写代码
3. 多思考, 多验证代码, 凡事多Google.
4. 把键盘敲烂, 把好书看遍.
路在脚下, 路在心中, 路在手上. 不懂就多看多敲多琢磨.
1.2 开发环境构建
C的开发环境有很多, 这里介绍一种Microsoft公司提供一种开发环境. 适用
Window上使用. 传说中的宇宙第一IDE.
这里需要自己完成这几个步骤
1. 网上找最新的Visual Studio 最新的企业版[目前VS 2015] iso镜像下载
2. 顺带找一个激活码
3. 注册 Microsoft Outlook 邮箱账号
4. 将上面下载vs 镜像解压到目录下. 删除iso.
得到上面结构. [操作系统推荐用Window 最新版]
1.2.1visual studio安装使用
点击iso解压包中
得到下面运行界面.
选择自定义.
只选择C++, 后面直接下一步, 直到安装.预计安装过程中推荐保持联网状态.
等待30min-2h, 会提示安装成功. 此刻按下Win键之后搜VS
把这个图标快捷方式发送到桌面上. 直接双击进去这时候需要做
1) 登录使用申请的 Mircrosoft Outlook 邮箱账号
2) 输入网上的找到 Visual Studio Key
这里基本开发环境搭建完毕, 我们实际搭建一个项目让程序跑起来. 按照下面操作
[文件] -> [新建] -> [项目]
看见下面界面
选择Visual Studio解决方案. 填好解决方案名称.找到对映位置. 这里为了写书方便. 一定要
用英文目录, 不会那就用 abcd 拼音搞!!!
再在当前解决方案下面添加一个项目 [解决方案右击] -> [添加] -> [新建项目]
后面添加具体项目. 选择Visual C++ 空项目. 填好名称点击确定.
后面 [在Heoo项目右击] -> [添加] -> [文件]
后面选择 C++ 文件, 名称填写 main.c 后面确定.
后面在main.c 文件中输入如下内容 .
#include <stdio.h> /* * 主函数, 用C写首诗 */ int main(void) { fprintf(stderr, "I am here!\n"); // 得到玩家输入回车字符才结束 getchar(); return 0; }
点击 三角形那个 运行按钮跑起来.
上面就是我们程序运行的最终结果. 对于上面结果代码, 不懂没关系. 先熟悉开发流程, 代码后面
会逐渐明白起来的. 加油(^ω^).
1.2.2 visual studio无脑调试
在说之前, 先对1.2.1 Visual Studio 解决方案简单讲解一些. Visual Studio 体系结构是
一个解决方案中包含多个项目.一个项目也可以理解成一个工程.自成一体的功能模块. 而每
个工程之间基本独立运行.每个工程中又可以包含许多源文件(可以理解为*.c文件).
而我们目前只讲解一个工程只有一个main.c头文件情况. 对于1.2.1 中 main.c 解释
如下. 简单看看混个脸熟.
这里说一下 , 回车 就是键盘中 Enter 键, 在 C 中用转义字符 ‘\n’ 表示.因为字符
分为可见字符例如’a’, ‘A’ 也有不可见字符. 在C中通用转义字符表示. 后面会讲到
转义字符表. 再深入了解.
本小节主要讲解VS的调试. 先看下面需求.
请求出1+2+....+100 = ? 的和
先看着别人做, 软件开发是技术活,不是脑力活, 所以多看看就懂了. 同样构建
[one_project] [ getsum ] [main.c]
注以后统一采用:[解决方案名称] [项目名称] [文件名] 默认规则表述.
这里需要注意的一下,需要设置启动项目
#include <stdio.h> // 配置要加数目 用 _INT_CUT 代表 100 #define _INT_CUT (100) /* * 处理1+2+...+100 = ? 的和 */ int main(int argc, char * argv[]) { int sum = 0; int i = 1; // 开始累加 while (i < _INT_CUT) { sum = sum + i; i = i + 1; } // 打印数据 printf("sum = %d\n", sum); // 等待用户输入 getchar(); return 0; }
运行结果是:
那我们开始打断点, 用鼠标在最左边点击.
按下F5
鼠标滑到断点处, 会看见这个值. 这就是断点的意义. F10, F11都是下一步.让端点跳到下一步.
具体的区别, 自己尝试用用, 感受一下. 你会发现别有洞天.通过鼠标滑到这个值得位置, 久可以
看见这样能够实时看程序运行是否符合预期.
这就是VS调试的核心. 还有一种通过 printf. 打印出值检查一下. 上面一句话
// 打印数据 printf("sum = %d\n", sum);
第一个是要输出的字符串 其中 %d是一个替换变量的占位符, 用sum的值进行替换.还是那就话
多写不明白没关系,会懂得.
1.3 请记住 hello world
下面是个标准的hello world 程序代码.
#include <stdio.h> /* * 标准函数通用写法 */ int main(void) { printf("hello world\n"); return 0; }
另一种标准写法
#include <stdio.h> /* * 标准函数通用写法 */ int main(int argc, char * argv[]) { printf("hello world\n"); return 0; }
上面是C11标准规定两种main函数写法. 一定强记, 其它都可以认为很low. 除了C语言之父那个
年代的代码. 遵循标准是成长的基石.
1.3.1 注释详解
注释的本意用好理解的语言是解释一些特定代码.在上一辈代码大师理念中,信仰"
代码就是注释". 这也是很‘‘对‘‘的. 这是建立在无穷的自信和装逼的基础上的. 做为一个
21世纪开始撸代码, 一定记住, 代码可以没有, 注释必须要有!!! 注释就是当时最核心的
思路.
在C中又两种注释一种是多行注释如下:
/* * 在当前线程池中添加待处理的线程对象. * pool : 线程池对象, sp_new 创建的那个 * run : 运行的函数体, 返回值void, 参数void* * arg : 传入运行的参数 * : 没有返回值 */ extern void sp_add(threadpool_t pool, vdel_f run, void * arg);
/* */ 包裹的部分就是多行注释.只需要知道这东西可以注释多行文本. 一定要用半角字符. 对于C
程序符号都是用英文字符. 推荐用搜狗输入法进行下面设置.
中文使用英文标点, 这样写代码的时候不需要中英文来回切.
还有一种单行注释 // , 主要看下面示例.
//文本字符串创建的度量值 #define _INT_TSTRING (32)
// 后面就是单行注释的内容, 程序编译的时候会忽略. 上面一句话 定义 _INT_TSTRING 这东西
是32, 预编译的时候会全部替换为32.
Please be sure to remember, 没有注释就充满了杀戮. 这个世界需要英雄来注释!
1.3.2 也许这一章是最难的
真的这章是最难的. 软件开发一共就三部曲. a|hello world 跑起来 -> b|所需语法了解
起来 -> c|项目开始堆起来. 而这一章就是 最重要的开始 hello world 跑起来! 完成了这些
那么C语言学习已经完成1/3.对于hello world 需要做的事是, 搜集各种相关资料,搭建开发
环境, 熟悉调试环境. 让官方demo跑起来, 解决遇到的所有奇葩问题.
踏入编程门槛最好的三中先天环境. 1. 遇到早, 下手狠 , 2. 就是喜欢, 3. 单身, 穷,
喜欢lol . 这些哪怕只有一条符合, 都不要辜负上天给我们的先天财富! 当你走上hello world
路上时候, 也是在为要寻一颗明星.
为要寻一颗明星
1924年12月1日 徐志摩
我骑著一匹拐腿的瞎马,
向著黑夜里加鞭;
向著黑夜里加鞭,
我跨著一匹拐腿的瞎马。
我冲入这黑绵绵的昏夜,
为要寻一颗明星;
为要寻一颗明星,
我冲入这黑茫茫的荒野。
累坏了,累坏了我胯下的牲口,
那明星还不出现;
那明星还不出现,
累坏了,累坏了马鞍上的身手。
这回天上透出了水晶似的光明,
荒野里倒著一只牲口,
黑夜里躺著一具尸首。
这回天上透出了水晶似的光明!
1.4 扩展阅读 - visual studio编译流程
也许是‘‘杂耍‘‘吧, 看看也好. 这是别人的思路, 请经量忍住, 看完之后再骂傻逼.
打开 VS 提供命令行. 并且跳转到指定我们建的项目下. 如下图.
通过这个图线索, 弄出这个环境. 这里只使用main.c 文件内容, 并且跳转到这个目录下.
代码是用的是 getsum project 中的代码.目前C的代码到可运行一般都需要经历下面几步.
预编译
处理代码文件中宏替换, 文件内容导入, 注释的消除(可以通过命令不去掉消除) 通用
说法是将本文件中需要用的都弄过来. 不检查语法错误.
命令:
cl /P main.c
将main.c 生成 main.i 预编译文件.
编译
将预编译的文件转成汇编代码, 这个阶段会检查语法错误.
命令:
cl /Fa /Tc main.i
del main.obj main.exe
这个命令会做很多事, 目前只考虑编译生成汇编文件 main.asm.
汇编
这个过程是将编译得到的汇编代码, 编程机器平台的机器码 , 二进制文件.
命令:
ml /c main.asm
执行命令之后会得到 main.obj 机器码文件.
链接
这个过程将需要的功能机器码文件联合起来生成一个可在当前平台的跑的程序. 对于链接
还有很多类型的链接, 以后遇到自会明白!
命令:
cl /Fa /Tc main.i
cl main.obj
命令执行之后就得到了main.exe
课外阅读结束, 可以的话可以尝试通过网络完成这些问题.
1) 设置VS 所有文件都左边都显示行号, 设置字体为Lucida Console
2) 倒着看一遍, 将本文中标准的那两个主函数, 写在纸上, 再电脑上再写一遍,跑起来.