gpt4 book ai didi

在 C 中调用具有较少参数的函数的后果?

转载 作者:行者123 更新时间:2023-12-03 21:35:38 27 4
gpt4 key购买 nike

我写了一个函数,它接受一些参数和一个指针参数。调用函数时,有时我需要传递指针以在函数内部使用,有时我不需要。
用更少的参数调用函数的后果是什么?它可以正确编译,并且在运行时仍然可以,但是这是好的编程吗?如果我用虚拟变量调用函数会更好吗?
感谢和抱歉初学者的问题。

最佳答案

如果你调用一个参数太少的函数并且编译器没有提示,那么你做错了什么。

您可以编写一个函数声明/定义,但不指定它需要多少个参数:

void func();
/* ... */
func();
func(arg1);
func(arg1, arg2);

所有这三个调用都将被编译器接受,但其中至少有两个是不正确的。

自 1989 年 ANSI C 标准以来,这种形式的函数声明/定义已经过时。

切勿使用此表格。

函数声明应始终写为原型(prototype),即指定参数数量和类型的声明。作为特例, (void)表示没有参数的函数。
void func(int arg);
/* ... */
func(); /* rejected by compiler */
func(arg1); /* accepted -- but only if arg1 is of type int or convertible to int */
func(arg1, arg2); /* rejected by compiler */

如果您设法编写代码调用具有错误数量的参数的函数并将其通过编译器,则行为未定义。它可能看起来“有效”,但是当您使用不同的编译器或使用相同的编译器和不同的选项编译它时,它可能会在您的脸上爆炸。

一个复杂的问题是:一些函数是可变的,接受可变数量的参数。最常见的例子是 printf .对于可变参数函数,所需的参数通常由函数的文档指定 - 正确获取参数同样重要。不同之处在于,对于可变参数函数,您的编译器不一定会告诉您调用不正确。
, ...语法(在函数声明中)和 <stdarg.h> 中定义的宏是编写和使用采用可变数量和类型参数的 C 函数的唯一合法方式。

关于在 C 中调用具有较少参数的函数的后果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com