C 无效和返回类型

C 无效和返回类型,c,C,我有一个c源文件,其中一个方法定义如下: void QDECL prettyPrintf(int level) { ////// some code. } 我想知道什么是QDECL。在这种情况下,它是否返回QDECL类型?就我对C语言所知不多,“void”不会返回任何东西。那么,它是一种法律声明吗?QDECL定义了调用约定。这是在其中一个头文件中定义的宏,其计算结果类似于\uu cdecl或\uu stdcall 这与函数的返回类型无关。该函数仍然是void函数 您在评论中声明: 这里我关

我有一个c源文件,其中一个方法定义如下:

void QDECL prettyPrintf(int level) {
  ////// some code.
}

我想知道什么是QDECL。在这种情况下,它是否返回QDECL类型?就我对C语言所知不多,“void”不会返回任何东西。那么,它是一种法律声明吗?

QDECL
定义了调用约定。这是在其中一个头文件中定义的宏,其计算结果类似于
\uu cdecl
\uu stdcall

这与函数的返回类型无关。该函数仍然是
void
函数

您在评论中声明:

这里我关心的是,如果我将上述代码移植到Java,我是否需要处理这个问题


不,你没有。这纯粹是不同本机代码库之间的接口问题。一旦代码在Java中,您就可以简单地忽略调用约定。

QDECL
定义了调用约定。这是在其中一个头文件中定义的宏,其计算结果类似于
\uu cdecl
\uu stdcall

这与函数的返回类型无关。该函数仍然是
void
函数

您在评论中声明:

这里我关心的是,如果我将上述代码移植到Java,我是否需要处理这个问题


不,你没有。这纯粹是不同本机代码库之间的接口问题。一旦代码在Java中,您就可以简单地忽略调用约定。

QDECL
可能是一个预处理器宏,解析为提示(例如
\uuu cdecl
\uu stdcall
);这定义了如何将参数推送到调用堆栈中并在调用堆栈中进行清理,但不会更改函数的返回类型。它主要用于使用使用不同于客户端默认调用约定的库时的互操作性。

QDECL
可能是一个解析为提示的预处理器宏(例如
\uu cdecl
\uu stdcall
);这定义了如何将参数推送到调用堆栈中并在调用堆栈中进行清理,但不会更改函数的返回类型。它主要用于在使用使用与客户端不同的默认调用约定的库时实现互操作性。

我刚刚检查了QDECL的定义。是的

#define QDECL   __cdecl
现在你的声明变成

void __cdecl prettyPrintf(int level)
它仍然是一个返回void的函数

实际上,
QDECL
在不改变函数返回类型的情况下(理论上)仍然可以采用其他形式。这很可能是真的

#define QDECL static
现在,您的函数原型是

void static prettyPrintf(int level)

这仍然是一个返回函数,我刚刚检查了QDECL的定义。是的

#define QDECL   __cdecl
现在你的声明变成

void __cdecl prettyPrintf(int level)
它仍然是一个返回void的函数

实际上,
QDECL
在不改变函数返回类型的情况下(理论上)仍然可以采用其他形式。这很可能是真的

#define QDECL static
现在,您的函数原型是

void static prettyPrintf(int level)

它仍然是一个
void
返回函数

去查找QDECL的定义-它将扩展为一个。与返回类型无关。我从未听说过它,但它似乎是_cdecl的别名。我关心的是,如果我将上述代码移植到Java,我是否需要处理这个问题?次要提示:C没有“方法”,它有“函数”。去查找QDECL的定义-它将扩展为一个。与返回类型无关。我从未听说过它,但它似乎是_cdecl的别名。我关心的是,如果我将上面的代码移植到Java,我是否需要处理这个问题?Minor nit:C没有“方法”,它有“函数”。它在运行时带来了什么好处?性能有什么改进吗?或者这是专家的编码风格吗?@UNNI这不是性能、优势或编码风格的问题。需要在一个库和另一个库之间定义二进制契约。这是一个在共享库中导出的函数。因此,各方在调用函数时需要使用相同的规则。呼叫约定编纂了这些规则。了解一下:它在运行时带来了什么好处?性能有什么改进吗?或者这是专家的编码风格吗?@UNNI这不是性能、优势或编码风格的问题。需要在一个库和另一个库之间定义二进制契约。这是一个在共享库中导出的函数。因此,各方在调用函数时需要使用相同的规则。呼叫约定编纂了这些规则。读一读: