【发布时间】:2016-08-25 05:04:00
【问题描述】:
我有一些看起来像这样的代码:
struct mystruct
{
/* lots of members */
};
void mystruct_init( struct mystruct* dst, int const condition )
{
if ( condition )
{
/* initialize members individually a certain way */
}
else
{
/* initialize members individually another way */
}
}
我正在考虑的选项:
- 最简单的方法是拥有一个分配给每个成员并调用它的函数。我是否应该只希望编译器优化该调用?
- 定义一个宏来显式避免函数调用开销。
- 一切尽在不言中。
在 C11 中处理这种情况的正确方法是什么?
【问题讨论】:
-
您所拥有的一切都没有问题。可读性很重要。你可以把一些线吊出来,例如
dst->foo = condition ? 5 : 7;但请考虑哪个选项可以让读者更清楚地了解发生了什么以及为什么。 -
考虑在
if的每个分支中使用“复合文字”和“指定初始值设定项”:*dst = (struct mystruct) { .member1 = value1, .member2 = value2, … };。 -
如果
struct需要为const,您可以创建多个包含不同初始化列表的宏,然后在它们之间创建#ifdef。不漂亮,但没有其他选择。
标签: c if-statement struct initialization c11