微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数指针 C 与 C++:K&R 与 C++

如何解决函数指针 C 与 C++:K&R 与 C++

将 C 代码移植到 C++ 代码。这个 C 代码是在大约 20 年前为 Solaris 编写的。

CHAR *(*MallocPtr)(); //Declared Globally

//inside function
if (!(PTablePtr = (PType *)(*MallocPtr)(sizeof(PType) + (numCharacters * sizeof(CharInfo)))))
        return PCODE;

在上面的声明中,这个 MallocPtr 不接受任何参数。但它用参数调用函数声明和所有使用 K&R 而不是 ANSI C。此代码从一开始就在 solaris 中成功编译。我正在尝试使用 Visual Studio 移植到 CPP。我知道这看起来很荒谬。但我真的一无所知是怎么回事。这是一个这样的例子。但是还有更多类似的函数,比如声明不会有参数,但是当用参数调用它时。函数仅使用 params 定义。没有参数的函数代码中的任何地方都没有定义。

解决方法

C 中的这个声明

CHAR *(*MallocPtr)();

表示函数可以有任意数量或类型的参数。在 C++ 中,这样的声明意味着该函数没有参数。等同于 C++ 中声明的含义,C 中的函数指针可以看起来像

CHAR *(*MallocPtr)( void );

来自 C 标准(6.7.6.3 函数声明符(包括原型))

14 标识符列表只声明参数的标识符 的功能。函数声明器中的一个空列表,它是一部分 该函数的定义指定该函数没有 参数。 函数声明符中的空列表不是一部分 该函数的定义指定没有关于 提供参数的数量或类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。