【发布时间】:2013-03-27 18:28:49
【问题描述】:
typedef int A;
typedef int B;
void foo(A arg){}
void main(void){
B wrongvar = 7;
foo(wrongvar);
}
根据标准,这种构造是否应该返回警告/错误?最流行的编译器呢?
例子:我们有变量,代表公斤和米,都是'int'类型。我们有一个功能,处理米。我们希望编译器能够捕捉到错误,这些错误与将公斤表示的变量变量传递给该函数有关。
我相信 Ada 处理得很好。现代 C 呢?
【问题讨论】:
-
A
typedef为现有类型赋予新名称;它不会创建新类型。替代名称也指同一类型。因此,所有A、B、int和signed int都可以传递给foo(A arg)而不会发生类型冲突(以及其他可转换为int的类型,例如enum类型,也可以是通过而没有引起警告)。 -
void main(void)应该是int main(void)-- 任何告诉你使用void main(void)的参考资料都是由不太了解 C 的人编写的。 -
@KeithThompson, c99 似乎是support 这个
void main(void)的用法。误解是因为我没有正确标记问题。 -
在所有版本的 C 标准中,允许但不要求实现以允许其他形式,包括
void main(void)。 C99 无相关变化。但是int main(void)由符合all 的托管C 实现支持。除非您正在为嵌入式系统编程,否则没有充分的理由使用void main(void)。