首先话不多说,直接介绍咯。
—— ——
在C语言中,您可以在类型转换中,运算符内部,函数声明中声明新类型:sizeof。
—— ——
在C循环中,“头”和循环体是两个单独的(嵌套的)作用域。
这不同于C ++,后者两者都形成一个范围。可以在C中进行[递归]调用main。
—— ——
在C语言中,可以在声明中显式地重复 cv 限定词。
—— ——
在C中,您可以在相同的翻译单元中一次又一次地定义相同的文件作用域对象,只要这些定义仍然是暂定的即可(不要多次包含初始化器)。
—— ——
与流行的看法相反,C不支持不同指针类型之间以及整数和指针类型之间的隐式转换
但是支持隐式的指针往返转换void *。
—— ——
将运算符应用于可变修改后的类型时,将sizeof在运行时对其进行评估
—— ——
typedef用C -declaration实际上可以生成可执行代码,如果声明为可变类型(一个VLA)。
因此,绕过该声明进入该声明的范围是非法的typedef
即使main应该声明为返回int,也不需要显式地return从中进行任何操作int main()。如果控制从末尾流出main,则其行为就像return 0;
—— ——
运算符sizeof有两种独立的语法:一种用于类型,另一种用于表达式。后者没有()围绕其论点
————————————
▷ 从C99语句(如if,等)开始for,while创建自己的隐式块。在C99块之前,仅由的显式对创建{}。
▷ 标准C从未允许人们在声明中完全省略decl-specifier-seq 。即使在具有“隐式int”规则的C89 / 90中,也无法将函数声明为foo()。你可以做extern foo()或者const foo(),例如,而不是只foo()。
▷ 带空的函数声明()是K&R样式的声明。不建议使用K&R样式的声明。如果您的函数没有参数,则将其声明为(void),而不是()。
▷ 函数声明和函数原型不是一回事。在现代C语言中,需要使用函数声明。但是功能原型不是。
▷ 即使在函数参数列表中,诸如int *array和的声明int array[]通常是“等效的”,后一种形式仍要求数组元素类型完整,而前一种则不需要。
—— ——
在函数参数列表中声明指针时,可以将指针本身声明为 const
—— ——
在C89 / 90中,使用参数声明的“等效”数组形式时,以前不可能声明相同类型的常数。但是,由于C99,可以通过const在[]。
—— ——
使用函数参数声明的数组形式时,数组的大小通常无关紧要。
但是,当size带有关键字时,static它充当编译器的提示。它说实际的数组至少会那么大。它可能/将改善编译器优化。
—— ——
在C语言中可以对类型为Object的对象进行非定义声明 void。
但是,由于类型不完整,因此无法为该声明提供匹配的定义void。
—— ——
函数参数列表中提到的未知结构类型被视为新类型的声明。但是,此类型的范围仅限于该函数声明。
同一功能的下一个声明将不可见或不知道它。例如,以下声明序列乍一看“看起来不错”,但实际上是无效的:
struct S第一个声明提到的类型是原型的局部变量,与第二个声明完全无关struct S;因此,这些函数声明是冲突的。
最后,不管你是转行也好,初学也罢,进阶也可,如果你想学编程~
值得关注我~!
领取专属 10元无门槛券
私享最新 技术干货