3
|
R.. GitHub STOP HELPING ICE · 技术社区 · 14 年前 |
![]() |
1
4
让我们反过来问: 为什么会 不 有效吗? . 我真的找不到任何禁止上述代码的参数或规则。在相应的另一个分支中的函数调用永远不会执行(尽管注释中的讨论表明这并不容易!). |
![]() |
2
3
C99(6.5.2.2函数调用,第8项)表示,如果函数定义没有原型,则参数和参数的数量和类型“不进行比较”。
我见过这个(ab)在野外与函数指针一起使用。一系列
在这种情况下,编译器没有(合理的)方法提前检查参数的数量,即使它有所有相关的代码。 我认为这是脏代码,我修复了那个特定的实例。 |
![]() |
3
2
我同意,只要不正确的函数调用从未被C抽象机求值,它就有效。 不过,还有另一种更简单的方法可以得出关于链接器的结论:既然这是允许的:
链接器必须能够找到
|
![]() |
4
0
如果是
|
![]() |
5
0
它是有效的(嗯,这可能取决于您使用的标准)。你应该读点关于 calling conventions .
基本上,如果
考虑这段代码:
当然,这是个坏主意。您应该更愿意显式声明所有参数。
你也可以使用
请注意,C++的函数重载可能会导致问题,但我认为这不是一个问题,因为您用问题来标记问题。
|
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |