十年老IT知识分享 – C语言 | 每日基础(56)

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:为什么声明 extern int f(struct x *p); 报出了一个奇怪的警告信 息 “结构 x 在参数列表中声明”?

阿一:与 C 语言通常的作用范围规则大相径庭的是, 在原型中第一次声明 (甚至提 到) 的结构不能和同一源文件中的其它结构兼容, 它在原型的结束出就超出了作用 范围。要解决这个问题, 在同一源文件的原型之前放上这样的声明: struct x; 它在文件范围内提供了一个不完整的结构 x 的声明, 这样, 后续的用到结构 x 的声明至少能够确定它们引用的是同一个结构 x。

读者:我不明白为什么我不能象这样在初始化和数组维度中使用常量: const int n = 5; int a[n];

阿一:const 限定词真正的含义是 “只读的”; 用它限定的对象是运行时 (同常) 不能 被赋值的对象。因此用 const 限定的对象的值并不完全是一个真正的常量。在这 点上 C 和 C++ 不一样。如果你需要真正的运行时常量, 使用预定义宏 #define (或enum)。

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

小编二维码

长按/加好友

– END –

正文完