假设我有一些结构:
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 特定的非便携式解决方案很好。
我想做以下事情:
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;实际编译的功能?
编辑:如果不清楚,&&当且仅当第一个非零时,才应执行后面的表达式.