面试题答案
一键面试#include <stdio.h>
// 假设函数参数为 int 类型
// 定义宏来生成符合平台规范的函数调用
#ifdef PLATFORM_WINDOWS
#define CALL_FUNC(func_name, ...) win_##func_name(__VA_ARGS__)
#elif defined PLATFORM_LINUX
#define CALL_FUNC(func_name, ...) lin_##func_name(__VA_ARGS__)
#else
#error "Unsupported platform"
#endif
// 模拟 Windows 平台的函数
void win_test_function(int a) {
printf("Windows function called with argument: %d\n", a);
}
// 模拟 Linux 平台的函数
void lin_test_function(int a) {
printf("Linux function called with argument: %d\n", a);
}
int main() {
#ifdef PLATFORM_WINDOWS
CALL_FUNC(test_function, 10);
#elif defined PLATFORM_LINUX
CALL_FUNC(test_function, 20);
#endif
return 0;
}
解释:
- 宏定义部分:使用
##
运算符将平台前缀和函数名连接起来,形成符合平台规范的函数调用。__VA_ARGS__
用于传递可变参数。 - 模拟函数部分:分别定义了 Windows 和 Linux 平台下的模拟函数,这里只是简单打印接收到的参数。
main
函数部分:根据预定义的平台宏,调用相应平台的函数,并传递参数。如果没有定义合适的平台宏,会报错Unsupported platform
。这样的代码结构易于维护和扩展,若新增平台,只需在宏定义部分添加新的条件分支即可。