书海拾遗系列之《C Primer Plus》:第二章 C语言概述
这个Blog里以《C Primer Plus(第6版》为基础,重新梳理细枝末节的知识点,毕竟知识用得多了才不会变成冷知识。当这篇博客有幸被你看到时,如果,你觉得对你有些许启发,请帮忙点赞,这是对笔者最大的鼓励;如果,你觉得内容有些许纰漏,请留言指出,这是对其他读者最大的负责;如果,你觉得内容还不够全面,那就这样吧,笔者也就这些能耐了。。。咳咳咳,还是可以留言,争取完善。
文章目录
1. main()函数的形式
C11标准中规定的两种合法main()函数形式如下:(去ISO官网看,貌似有2018版的标准了,奈何还要RMB,所以果断放弃,还是参考现在用得比较多的C11版本,这里给个链接,已经上传CSDN了,需要的可以下载,如果没得积分就私信我,帮忙点个赞加留言可以给发邮箱:https://download.csdn.net/download/LegendOfBear/87581327)
不带参数的版本:
int main(void) { /* ... */ }
带参数的版本:
int main(int argc, char *argv[]) { /* ... */ }
有些旧式的C代码会有下面这样的形式:
main()
这样的形式C90标准还可以勉为其难接受,但C99和C11不允许这样写,此外还有这样的形式:
void main()
(上面的形式笔者之前在嵌入式里经常这么写😓)一些编译器允许这样写,但所有的标准都未认可这种写法,所以编译器不必接受这种形式,有可能这个版本还支持,下个版本就走你了。所以还是要坚持使用标准形式,这样最起码在移植的时候不会在这里出现问题。
2. 变量声明是否需要集中前置
之前使用老版本CCS的时候(比如CCS2.x或CCS3.3)的时候,代码要求所有的变量声明必须在块的顶部,其他语句不能再任何声明前面,也就是说下面main函数体的形式是非法的:
int main(void)
{
int doors;
doors = 3;
int dogs;
dogs = 4;
// 其他语句
}
其实这是C99之前的使用要求,在C99和C11以后开始遵循C++惯例,可以把声明放在块中的任何地方,只要在使用之前声明就可以了。
3. 名命的小知识点
首先,C99和C11虽然允许使用贼长贼长的标识符名,然而,但是,But,编译器只认识前63个字符,所以如果两个变量的前63个字符是一毛一样的,那么编译器就有可能按照一个变量进行处理(这种情况标准没定义,所以结果就是未知咯)
此外,命名时只能用字母、数字下划线(仅有的一种符号),而且第一个字符必须是字符或下划线,不 可 以 是 数 字。而且由于系统库里常用一个下划线或两个下划线开头声明变量和函数,所以,咱尽量别用下划线开头声明标识就对了。
4. 关键字和保留标识符
下面这堆就是C语言的关键字,其中粗体表示C90标准新增的,斜体表示C99新增的,粗斜体表示C11新增的,至于每个特殊关键字的解释与用法,等我后面补上(今天太困了。。。。。。)
| ---- | ---- | ---- | ---- |
|---|---|---|---|
| auto | extern | short | while |
| break | float | signed | _Alignas |
| case | for | sizeof | _Alignof |
| char | goto | static | _Atomic |
| const | if | struct | _Bool |
| continue | inline | switch | _Complex |
| default | int | typedef | _Generic |
| do | long | union | _Imaginary |
| double | register | unsigned | _Noreturn |
| else | restrict | void | _Static_assert |
| enum | return | volatile | _Thread_local |
4.1 _Bool
根据C11官方文档说明中的那样,通过include进来stdbool.h这个头文件,将bool定义为_Bool,不过这个关键字貌似并不是C11才引入的,而是在C99开始就引入了,那个时候只能使用_Bool,而在C11后可以使用bool(作为内建类型)来声明布尔量,除了这个类型宏定义意外,这个头文件还定义了“true”(被定义为1)和“false”(被定义为0),还定义了一个名为_ _bool_true_false_are_defined的宏(被定义为1),这个宏可用于判断是否定义了上面三个宏定义。
本文是《C Primer Plus》第二章的概述,涵盖了C语言的main()函数形式,C99和C11标准下变量声明的位置,标识符命名规则,以及C语言的关键字和保留标识符,特别讨论了_C99和C11引入的.Bool类型。

171

被折叠的 条评论
为什么被折叠?



