为什么_Generic检查所有案例的值?

时间:2019-01-27 13:33:38

标签: c generics

当尝试实现同时具有bool类型和结构的_Generic调用时,该结构在bool情况下被捕获,并收到错误。

Error(s):
source_file.c:27:14: error: used type 'struct sockaddr' where arithmetic or pointer type is required
printf("%s", log_param_encode(tempS));
             ^                ~~~~~
source_file.c:6:54: note: expanded from macro 'log_param_encode'
                                            bool: (x ? "true" : "false"), \

如果我将bool的大小写更改为仅包含诸如“ true”之类的字符串,则它可以正常工作,并且在printf输出中收到“ sockaddr”。

代码:

#include <stdio.h>

#include <stdbool.h>
#include <sys/socket.h>

#define log_param_encode(x) _Generic((x), \
                                  bool: (x ? "true" : "false"), \
                                  struct sockaddr: "sockaddr", \
                                  default: x)

int main(void)
{
    struct sockaddr tempS;
    printf("%s", log_param_encode(tempS));
    return 0;
}

_Generic扩展如何发生?为什么在不适合的情况下尝试使用X?

0 个答案:

没有答案