当尝试实现同时具有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?