|
1
40
更符合条件的答案是,如果函数接受变量参数(尤其是
但是,请注意,如果函数采用在没有原型的情况下受“正常提升”约束的参数(例如,采用
C99不允许“隐式int”…这意味着两种奇怪的情况都是
在ISO/IEC 9899:1990,§6.3.2.2中 规定的:
本段在1999年标准中缺失。我还没有(至今)追踪到措辞上允许的变化
|
|
|
2
18
原型 是指定函数参数类型的函数声明。 ANSI之前的C语言(1978年第一版Kernighan&Ritchie的“C编程语言”描述的语言)没有原型;函数声明不可能描述参数的数量或类型。由调用方传递正确数量和类型的参数。
从C89/C90(ANSI和ISO标准描述相同的语言)开始,调用没有可见声明的函数是合法的;提供了一个隐式声明。如果隐式声明与实际定义不兼容(例如,调用
C11在这方面没有重大变化。
对于所有可以追溯到1989年的C版本,作为一种风格,几乎没有理由不对所有函数使用原型。保留旧式声明和定义只是为了避免破坏旧代码。 |
|
|
3
14
不,功能并不总是需要原型。唯一的要求是在使用函数之前先“声明”它。声明函数有两种方法:编写原型,或编写函数本身(称为“定义”)。定义始终是声明,但并非所有声明都是定义。 |
|
|
4
2
在编写新函数时,一个很好的技巧是将它们倒置,main在底部,这样当您改变对函数参数或返回类型的看法时,就不必再修改原型了。不断地修复原型,以及在编译器的警告过期时处理这些警告,都会变得非常乏味。 一旦您的函数顺利地协同工作,将代码移动到一个命名良好的模块,并将原型放在一个同名的.h文件中。这节省了严肃的时间。这是我5年来发现的最大的生产力援助。 |
|
|
5
1
是的,每个函数都必须有一个原型,但该原型可以出现在单独的声明中,也可以作为函数定义的一部分。用C89或更高版本编写的函数定义自然有原型,但如果你用经典的K&R风格,因此:
然后函数定义有一个原型。 |
|
|
6
0
就我所知(ANSI C89/ISO C90),没有。我不确定C99;然而,我也希望如此。 个人说明: 我只在。。。
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |