我有一个c源文件,其中一个方法定义如下:
void QDECL prettyPrintf(int level) {
////// some code.
}
我想知道什么是QDECL。在这种情况下,它是否返回QDECL类型?就我在C中的小知识而言,“无效”并不会返回任何东西。所以,这是一个法律陈述吗?
答案 0 :(得分:2)
QDECL
可能是预处理器宏,可解析为calling convention提示(例如__cdecl
或__stdcall
);这定义了如何在调用堆栈中推入和清理参数,但它不会更改函数的返回类型。当使用使用与客户端不同的默认调用约定的库时,它主要用于互操作性。
答案 1 :(得分:1)
QDECL
定义了调用约定。这是在其中一个标头文件中定义的宏,它将评估为__cdecl
或__stdcall
。
这与函数的返回类型无关。该函数仍然是void
函数。
您在评论中说明:
我担心的是,如果我将上述代码移植到Java,我是否需要处理这个问题?
不,不。这纯粹是在不同的本机代码库之间进行接口的问题。一旦代码在Java中,您就可以简单地忽略调用约定。
答案 2 :(得分:1)
我刚检查了QDECL的定义。它是
#define QDECL __cdecl
现在你的声明成了,
void __cdecl prettyPrintf(int level)
仍返回void的函数。
事实上,QDECL
仍然可以(理论上)采用其他形式而不改变函数的返回类型。很容易就是
#define QDECL static
现在,您的函数原型是
void static prettyPrintf(int level)
仍然是void
返回功能