概要
更新于 2023-11-22
版本
| 版本 |
时间 |
组织 |
| c89 |
1989 |
ANSI |
| c90 |
1990 |
ISO |
| c99 |
1994 |
ANSI/ISO |
| c11 |
2011 |
ANSI/ISO |
| c17 |
2017 |
ANSI/ISO |
默认版本查询
查询支持版本
| Bash |
|---|
| gcc -E -dM - </dev/null | grep "STDC_VERSION"
#输出结果和 C 标准的对应关系如下:
#define __STDC_VERSION__ 199901L,则默认支持的是 C99 标准;
#define __STDC_VERSION__ 201112L,则默认支持的是 C11 标准;
#define __STDC_VERSION__ 201710L,则默认支持的是 C17 标准;
#如果没查到,则默认支持的是 C89 标准。
|
指定版本
| Bash |
|---|
| #使用`-std`参数进行指定:
#-std=c11 # Conform to the ISO 2011 C standard
#-std=c89 # Conform to the ISO 1990 C standard
#-std=c90 # Conform to the ISO 1990 C standard
#-std=c99 # Conform to the ISO 1999 C standard
#-std=gnu11 # Conform to the ISO 2011 C standard with GNU extensions
#-std=gnu89 # Conform to the ISO 1990 C standard with GNU extensions
#-std=gnu90 # Conform to the ISO 1990 C standard with GNU extensions
#-std=gnu99 # Conform to the ISO 1999 C standard with GNU extensions
|
编码原则
- 代码应当易于理解。
- 代码的写法应当使别人理解它所需的时间最小化。
- 把信息装入名字中。不易误解的名字。
- 布局一致。
- 让相似的代码看上去很相似。
- 把相关的代码分组。
- 注释的目的是尽量帮助读者了解的和作者一样多。
编码流程
- 定义程序的目标
- 设计程序
- 编写代码
- 编译
- 运行
- 测试和调试
- 维护和修改
要编写的程序越复杂,事先定义和设计程序的工作量越大。
标识符
- 文件名全小写
- 全局变量使用 g_
- 静态变量使用 s_
- 名词或形容词+名词定义变量
- 动作+名字定义函数
注释
| 注释别名 |
用途 |
| TODO |
未处理的事情 |
| FIXME |
已知的无法运行的代码 |
| HACK |
对于一个问题不得不采用比较粗糙的解决办法。 |
| XXX |
危险,这里有个重要的问题。 |
变量
一个变量只有一个功能,不能把一个变量用作多种途径。
不要设计面面俱到的数据结构。
简化逻辑和循环的参数
函数
- 一个函数仅完成一件功能。
- 重复代码提炼成函数。
- 一般行数不超过50
- 嵌套少于4.
- 缺省调用者检测参数。
- 对函数错误返回码要全面处理。
- 除了对外接口,全加static关键字。
头文件
- 头文件中适合放置接口的声明,不适合放置实现。
- 头文件应当职责单一。
- 头文件应向稳定的方向包含。