试图用C语言重载C编程语言中的函数_Generic。找到了示例:
这个例子:
#include <stdio.h>
#include <math.h>
void display_float(float dispid) ;
void display_int(int dispid) ;
void display_void(void) ;
#define display(x) _Generic((x), \
float: display_float, \
int: display_int, \
default: display_float \
)(x)
void display_void(void){
printf("display id: 0\n") ;
}
void display_float(float dispid){
printf("display id: %f\n", dispid) ;
}
void display_int(int dispid){
printf("display id: %d\n", dispid) ;
}
void main(void){
display(5) ;
display(6.5) ;
}
Run Code Online (Sandbox Code Playgroud)
现在,我也想使用来重载该函数display()。意味着该函数将接收a void,调用该函数display_void()并显示0。似乎无法做到这一点。任何帮助,将不胜感激。
编辑1:
另外,请参阅此处的示例。我认为,其中一个示例是传递指向void的指针。可以实施吗?
当然。重载参数宏。
void display_float(float dispid) ;
void display_int(int dispid) ;
void display_void(void) ;
#define _display_1(x) _Generic((x), \
float: display_float, \
int: display_int, \
default: display_float \
)(x)
#define _display_0() display_void()
#define _display_N(_0,_1,N,...) _display_ ## N
#define display(...) _display_N(_0,##__VA_ARGS__,1,0)(__VA_ARGS__)
int main() {
display();
display(1);
display(1.1);
}
Run Code Online (Sandbox Code Playgroud)
测试在godbolt。
请注意,这, ##__VA_ARGS__是C标准中未描述的gcc扩展。
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |