使用不同的返回值声明外部"C"

declare extern "C" with different return values

本文关键字:声明 外部 返回值      更新时间:2023-10-16

我在外部ASM文件中定义了一个名为ecall的函数。此函数接受不同数量的参数并返回不同的值。

这就是它在我的源代码中的样子:

int ret = _function1("Hello", "world");
HANDLER h = _function2(123456);
char * ch = _function3("asdf", 789, h);
// ... and so on

这些"函数"实际上是用一个简单的python脚本生成的宏。这个自动生成的头文件中定义了所有这些宏,看起来像:

extern "C" ????? ecall(int code, ...);
#define _function1(...) ecall(0x123, __VA_ARGS__)
#define _function2(...) ecall(0x234, __VA_ARGS__)
#define _function3(...) ecall(0x345, __VA_ARGS__)
#define _function4(...) ecall(0xABC, __VA_ARGS__)
// ... and around 500 more definitions with a different code value

然而,我被困在ecall的声明上(我标记为"???")。我需要以某种方式指定返回值,但事实上,这个函数几乎返回所有内容(取决于int代码值)——布尔值、整数、指针等。

有办法做到这一点吗?我正在MSVC10上编译。

谢谢。

要么创建自己的变体类型(包括每个类型的并集),要么创建不同的函数,每个函数只返回一个特定的类型。