【发布时间】:2014-07-28 20:54:11
【问题描述】:
我有以下代码:
typedef struct A_{
void* values;
}A;
typedef struct C_{
int array_C[3][3];
}C;
typedef struct B_{
C c;
}B;
int main(void)
{
B* b;
A array_A[2] = {
{
&(b->c.array_C) \\ line 23
},
{
&(b->c.array_C) \\ line 27
}
};
return 0;
}
我的错误在第 23 和 27 行,它说 &(b->c.array_C) 应该是 const。 我做错了什么? 数组的地址不是常量吗?
我这样做的原因是因为我需要提高函数的圈复杂度 使用 340 个 if 语句,当每个 if 语句的格式如下:
if( exspretion )
{
foo( address_of_array);
return false;
}
如果我将 340 个 if 语句更改为一个 while 循环,该循环运行 340 次并从上述数组中获取 foo 函数的参数,那么圈复杂度会更好吗?
【问题讨论】:
-
问题是表达式
&(b->c.array_C)要求在编译时知道b的值,但事实并非如此。 -
b是未初始化的指针。你应该先用一个有效的地址初始化它。 -
这种变化真的会提高代码的清晰度,还是会愚弄工具,让其认为通过将真实代码隐藏在数组中来更简单?
-
@DrewMcGowen 为什么表达式要求在编译时知道
b的值? -
@ThoAppelsin 只是摆脱了 OP 提到的“应该是 const”警告
标签: c arrays initialization cyclomatic-complexity