gpt4 book ai didi

c - 错误 C2660 : function does not take X arguments

转载 作者:行者123 更新时间:2023-11-30 18:29:20 26 4
gpt4 key购买 nike

我正在将一些遗留的 C 代码转换为 C++。

头文件包含宏P

#ifndef P
# ifdef __STDC__
# ifndef __HIGHC__
# define USE_ANSI_PROTOTYPES
# endif
# endif
# ifdef __sgi__
# define USE_ANSI_PROTOTYPES
# endif

# ifdef USE_ANSI_PROTOTYPES
# define P(s) s
# else
# define P(s) ()
# endif
#endif

在我的例子中,USE_ANSI_PROTOTYPES 的计算结果为未定义。

另一个头文件在函数声明中使用宏 P。

extern void long2str P((unsigned char *str,int pos,long clong));

然后在代码中的某些位置调用该函数,例如

long2str(tmp_str, 0, seg_used(seg)); // <= error on this line

但是 VS2012 在调用该函数的行上标记错误

error C2660: 'long2str' : function does not take 3 arguments

可能出了什么问题?

最佳答案

除非您使用 20 世纪 80 年代的 C 编译器,否则应确保采用 #ifdef 的第一个分支。

在这种情况下,请找出未定义 USE_ANSI_PROTOTYPES 的原因。然后定义它或删除 #ifdef 部分并无条件定义 P 宏。

Microsoft 编译器未定义 __STDC__ 宏(无论出于何种原因),请参阅 https://msdn.microsoft.com/en-us/library/b0084kay.aspx .

说明:

早在 1980 年(ANSI C89 和 ISO C90 之前),函数的声明如下:

extern void long2str ();

就是这样。没有参数名称,没有类型,只有函数名称(如果幸运的话,还有返回类型)。

ISO C90 引入了函数原型(prototype),声明函数的首选方式变为:

extern void long2str (unsigned char *str,int pos,long clong);

当使用双括号中的参数调用时,问题中的 P 宏可以产生两种变体。外括号形成单个宏参数,内括号仅在 C90 情况下需要。

关于c - 错误 C2660 : function does not take X arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39179138/

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