文章目录
参考:《C语言程序设计现代方法》
第一章 C语言概述
1.1 什么是现代方法?
适应于现代的C语言编程需求,主要包括:
- 什么场景下需要使用C
- C的新标准
- 一些旧的优化方法在当下的不适用性
- 将C看作为一个软件工程的工具
- 推迟介绍C的底层原理
1.2 C语言的历史是什么?
作为Unix
系统的副产品不断演进,由最开始的B语言=>NB语言=>C语言 (贝尔实验室的Ken Thompson、Dennis Ritchie
等人开发)
随后考虑到程序的可移植性,出现了一系列对于C的标准:
- 1990年,ISO组织制定了C89或者C90标准
- 1999年,出现了新的C99标准 (变化显著)
- 随后,国际标准化组织分别在2011年制定了C11以及2018年制定了C18 (变化并没有非常显著)
1.2 C语言的优点与缺点有哪些?
优点:
- 高效:因为是底层语言所以良好的编码可以实现高效 (C是一门底层语言,拥有其他语言没有的/隐藏的底层操作:字节和地址)
- 可移植性:C语言没有分裂出多个分支,编译器小且语言容易编写(C语言与汇编语言极为相似)
- 灵活、功能强大
- 与Unix集成度高(因为Unix就是用C写的)
缺点
- 容易隐藏错误:权力越大,责任越大,有的错误难以发现(编译器也不会发现)
- 难以维护、修改、理解
第二章 C语言基本概念
2.1 cc编译器与gcc的区别?
参考:https://www.cnblogs.com/52php/p/5681725.html
gcc
是GNU Compiler Collection,原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C、C++、Objective-C、Ada、Fortran、 Java),可以说gcc是GNU编译器集合。
g++
是C++编译器。
cc
Unix系统的 C Compiler,一个是古老的 C 编译器。而 Linux 下 cc 一般是一个符号连接,指向 gcc;可以通过 $ ls -l /usr/bin/cc
来简单察看,该变量是 make 程序的内建变量,默认指向 gcc 。 cc 符号链接和变量存在的意义在于源码的移植性,可以方便的用 gcc 来编译老的用cc编译的Unix软件
2.2 C基本语法中的重点有哪些?
-
C99中声明块可以不在语句块之前:也就是说不用把所有声明都放在前面,而是可以穿插,但是要保证的是在使用之前必须要声明
-
当将一个浮点数赋值给一个float类型的变量时,最好在常量后面添加一个
f
:profit = 2150.54f;
不然可能会引发编译器的警告,因为编译器默认认为不带
f
的浮点数常量为double
,所以将一个double
赋值给float
可能会导致进度损失问题 -
程序开始时,某些变量会被初始化,有一些不会(没有被赋值并且没有默认值的变量),这里要注意手动先初始化
-
C程序中连续初始化的注意点:
int a, b, c = 10; // 注意只有c被初始化了,而a、b均未初始化!
-
宏:
-
基础使用:
#define 宏名称 替换文本
- 替换文本本身可以为空
-
在程序的预处理阶段,预处理器会把每一个宏替换为其表示的值
-
宏的不成文的规定是一般都是全大写字母
-
-
C语言中的标志符是区分大小写的
-
main函数的末尾可以使用
return 0
也可以使用exit(0)
,这两种在main
中等价;并且也可以在末尾没有return语句,如果是C99,返回的类型是int的话,一般需要return
告诉操作系统最终执行的返回值(否则将会返回一个不确定的值)
2.3 gcc的常用flag有哪些?
-Wall
: 检测可能的所有出现的错误并生成警告信息-W
: 除了-Wall
之外,针对具体情况的额外警告信息-pedantic
: 根据C标准的要求生成警告信息,避免使用非标准特性-ansi
: 禁用GCC的非标准C特性-std=c89或-std=c99
: 指定使用那个标准