__cdecl 和 (void) 是什么意思?

What do __cdecl and (void) mean?

我目前正在使用 WSA 对 tcp/ip 服务器进行编程。经过一些故障排除后,我的一个朋友说我应该使用 bool __cdecl winsock_server ( void ) 而不是 bool winsock_server()

但是他没有向我解释什么__cdecl(void) 是做。我已经知道 __cdecl 改变了参数在汇编程序级别上放置在堆栈上的方式,但是 (void) 是什么意思?

我应该指出,我是 C++ 的新手。我以前只用 C# 和 VB.NET 编程。

提前致谢!

(void) 表示它没有参数。它更像是一种代码风格的东西。你可以只使用 () 但写 (void) 明确表明该函数没有参数。

__cdecl
你没看错。它强制执行 c-style 的函数调用约定,从而调用函数的方式(如何传递参数,谁清理堆栈)。顺便说一句,这已经是默认的调用约定。

(void) v/s ()
C++中它们是等价的(没有参数)。
C中但是前者意味着没有参数后者表示任意数量的参数。因此当您重用 C.

的头文件时可能会导致问题