“错误:函数的参数太少”

Posted

技术标签:

【中文标题】“错误:函数的参数太少”【英文标题】:"error: too few arguments to function" 【发布时间】:2010-12-16 17:37:17 【问题描述】:

我有一个名为 opencv2.0 函数的 C 程序:

cvSaveImage( out_img_name, img);  

编译器 gcc 报告

函数 cvSaveImage 的参数太少

highgui.h中cvSaveImage的原型是

CVAPI(int) cvSaveImage( const char* 文件名, const CvArr* 图像, const int* 参数 CV_DEFAULT(0) )

在我将呼叫更改为之后

cvSaveImage( out_img_name, img, 0);  

终于编译成功了。这是否意味着函数参数的默认值仅在 C++ 中支持,而在 C 中不支持?

感谢和问候!

【问题讨论】:

我猜这只是发生在新版本的opencv中,我没有在ubuntu存储库上使用旧版本时遇到这个错误,但是当我编译新版本时,曾经运行的代码给出了我你说的错误 【参考方案1】:

正确 - 标准 C 不支持默认参数,无论是在 C89 标准中还是在 C99 标准中(也不是在 C2011 标准中)。在某些编译器中可能有特定于编译器的扩展来支持它,但这不是标准的。

【讨论】:

我正在使用 Visual Studio 中 C++ 语言可用的项目模板编写我的 C 程序。有一段时间我一直在写它,当我打开设置Configuration Properties -> C/C++ -> Advanced -> Compile AsCompile as C code (/TC) 我的gets_s 代码开始抛出这个线程中提到的错误。然后我必须将整数值作为get_s 的第二个参数显式传递以使其可编译。【参考方案2】:

如果你想使用可变数量的参数,C 需要一个特殊的符号。

http://www.swig.org/Doc1.3/Varargs.html

您不能定义要传递给普通函数的默认变量。您可以设置一个自动神奇地传入默认值的宏,如果您愿意,可以将其用作您的函数入口。

【讨论】:

以上是关于“错误:函数的参数太少”的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 4 - 如何在不构建表单的情况下添加 csrf 令牌?

损失函数(损失函数代价函数目标函数)​​​​​​​MSE0-1损失函数绝对误差损失函数分位数损失函数Huber损失函数感知损失函数Hinge损失函数指数损失函数对数损失函数

Kotlin函数 ⑧ ( 函数引用 作为函数参数 | ::函数名 | 函数类型 作为函数返回值类型 )

测开之函数进阶篇・第五篇《递归函数纯函数匿名函数偏函数》

8InfluxDB常用函数聚合函数,count()函数,DISTINCT()函数,MEAN()函数,MEDIAN()函数,SPREAD()函数,SUM()函数

Kotlin函数式编程 ② ( 过滤函数 | predicate 谓词函数 | filter 过滤函数 | 合并函数 | zip 函数 | folder 函数 | 函数式编程意义 )