小编use*_*856的帖子

用于填充结构字段的 C 预处理器宏

假设我有一些结构:

struct mything1 {
   int foo;
   int has_foo;

   int bar;
   int has_bar
};
Run Code Online (Sandbox Code Playgroud)

我想写一个宏来完成类似的事情

#define FILL(instance, field, value)    \
do {                                    \
    instance.#field = value;            \
    instance.has_#field = 1;            \
} while(0);                             \
Run Code Online (Sandbox Code Playgroud)

这样我就可以走了struct mything1 x; FILL(x, foo, 5);,但是当我尝试编译它时这不起作用。这有可能吗?值得推荐吗?

GCC 特定的非便携式解决方案很好。

c macros gcc struct

1
推荐指数
1
解决办法
5180
查看次数

逻辑运算符作为c中的条件

我想做以下事情:

r = recv(socket, buffer, bufsize, 0) && return r;
Run Code Online (Sandbox Code Playgroud)

哪个不起作用,因为return -r;它不是表达式.然而,

r = recv(socket, buffer, bufsize, 0) && printf("r=%d\n", r);
Run Code Online (Sandbox Code Playgroud)

似乎工作.现在,除了语法简洁之外,还有很多东西可以从中获益但是我仍然很好奇是否有办法实现&& return r;实际编译的功能?

编辑:如果不清楚,&&当且仅当第一个非零时,才应执行后面的表达式.

c

0
推荐指数
1
解决办法
85
查看次数

标签 统计

c ×2

gcc ×1

macros ×1

struct ×1