|
|
1
31
在严格的遵从模式下(这在理论上意味着“在理论上”),当您调用一个函数时,如果该函数接受的参数数目可变,并且在范围内没有函数的原型声明,则会调用未定义的行为(这很糟糕)。这意味着编译器可以对使用
在实践中,即使没有
正如qrdl所指出的,找到这个函数是因为C编译器链接到C库。 注意,Chris Young关于c99和“implicit int”的评论是准确的,但是关于“variable arguments functions must have a prototype in scope”的规则适用于c89和c99。默认情况下,大多数编译器不在严格的C99兼容模式下工作,因为有太多的代码无法这样编译。 克里斯·杨评论道:
克里斯当然是对的。从C99标准中删除了两个“隐式声明”功能。标准前言将其列为:
我想得不够清楚(因此也写不清楚)。然而,C89和C99都需要一个范围内的原型,用于接受可变数量参数的函数。 举例说明:
如果没有第一行,这是一个正确的c89片段,带有函数的隐式声明
|
|
|
2
37
您最初标记了这个C++,但是它看起来是一个C程序。如果作用域中没有原型(例如由于省略了include<stdio.h>),C将自动为函数提供隐式声明。隐式声明将是:
这意味着printf是一个返回int的函数,可以接受任意数量的参数。这个原型正好适合你的电话。您应该包括<stdio.h> 最后,我应该补充一下,当前的C标准(ISO/IEC 9899:1999或通俗地说“C99”)是这样的 不 允许隐式声明,此程序将不符合。隐式声明已删除。我相信您的编译器不支持C99。C++还需要正确的原型,不做隐式声明。 |
|
3
9
如果不包含适当的头,则会导致使用未原型化的函数,从而导致问题,因为C编译器假定该函数没有原型返回
|
|
|
Community wiki · 打印1到1000,不带循环或条件 2 年前 |
|
|
OverHeaven · 在2D数组中打印每行两次-C 3 年前 |
|
|
user16218933 · php上没有显示图像 3 年前 |
|
|
Sinayra · 循环中的strcat()与sprintf() 7 年前 |
|
|
obvionaoe · printf()在错误的位置打印换行符 7 年前 |
|
|
ByteMe95 · 错误的printf类型仍在打印正确的值 7 年前 |
|
|
141_MATRIX_141 · 指针C的值 7 年前 |