gpt4 book ai didi

c - 使用 GCC 在 C 中重载函数 - 编译器警告

转载 作者:太空狗 更新时间:2023-10-29 17:01:43 24 4
gpt4 key购买 nike

我正尝试在 C 中实现函数重载,而且我非常接近。我使用的是 C99,所以 C11 中引入的 _Generic 关键字对我不可用。我已经开发了一些工作代码,但是当我编译它时,我收到了一些警告。

工作示例:

#include <stdio.h>

#define print(x) \
__builtin_choose_expr(__builtin_types_compatible_p(typeof(x), int ), print_int(x) , \
__builtin_choose_expr(__builtin_types_compatible_p(typeof(x), char[]), print_string(x), \
(void)0))


void print_int(int i) {
printf("int: %d\n", i);
}

void print_string(char* s) {
printf("char*: %s\n", s);
}

int main(int argc, char* argv[]) {

print(1);
print("this");

return 0;
}

编译会产生以下警告:

gcc overload.c -o main
overload.c: In function 'main':
overload.c:19: warning: passing argument 1 of 'print_string' makes pointer from integer without a cast
overload.c:20: warning: passing argument 1 of 'print_int' makes integer from pointer without a cast

有关更多调试信息,这是预处理器完成工作后主函数的样子:

int main(int argc, char* argv[]) {

__builtin_choose_expr(__builtin_types_compatible_p(typeof(1), int ), print_int(1) , __builtin_choose_expr(__builtin_types_compatible_p(typeof(1), char[]), print_string(1), (void)0));
__builtin_choose_expr(__builtin_types_compatible_p(typeof("this"), int ), print_int("this") , __builtin_choose_expr(__builtin_types_compatible_p(typeof("this"), char[]), print_string("this"), (void)0));

return 0;
}

我怎样才能让编译警告消失并且仍然有工作代码?

最佳答案

理论上,这应该可行:

#define print(x)                                                                      \
(__builtin_choose_expr(__builtin_types_compatible_p(typeof(x), int ), print_int , \
__builtin_choose_expr(__builtin_types_compatible_p(typeof(x), char[]), print_string, \
(void)0))(x))

它选择 print_intprint_string,然后将所选函数应用于 x

关于c - 使用 GCC 在 C 中重载函数 - 编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36506988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com