c语言|关于C编程语言,几乎没有人知道的事( 二 )



但是 , 当size带有关键字时 , static它充当编译器的提示 。 它说实际的数组至少会那么大 。 它可能/将改善编译器优化
void foo(int array [static 5
);
//从类型上讲 , 它仍然等效于`int array [
`
//但是编译器会提示

声明为的位字段int不一定是带符号的 。 这是C语言中的一个上下文 , 其中plainint不一定与相同signed int 。 一个int位字段可能被符号或无符号-这个行为应该是实现定义的 。 因此 , 始终明确指定您的意图始终是一个好习惯:将位字段明确声明为signedor unsigned , 而不是简单声明int 。
do … while是唯一以 。 结尾的迭代语句形式; 。
在C语言中可以对类型为Object的对象进行非定义声明 void
extern void v;

但是 , 由于类型不完整 , 因此无法为该声明提供匹配的定义void 。
函数参数列表中提到的未知结构类型被视为新类型的声明 。 但是 , 此类型的范围仅限于该函数声明 。 同一功能的下一个声明将不可见或不知道它 。 例如 , 以下声明序列乍一看“看起来不错” , 但实际上是无效的
// 此时未声明“ struct S”类型
void foo(struct S *p);
void foo(struct S *p)
{


【c语言|关于C编程语言,几乎没有人知道的事】struct S第一个声明提到的类型是原型的局部变量 , 与第二个声明完全无关struct S 。 因此 , 这些函数声明是冲突的 。