我在外部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代码值)- bool(boolean) 值,整数,指针等。
有办法吗?我在MSVC10上编译。
谢谢。
最佳答案
创建您自己的变量类型(包括每个类型的并集),或者我强烈建议创建不同的函数,每个函数仅返回一种特定类型。