可以这样做:
#define VARIABLE_LENGTH_CHAR_ARRAY(name, size) \
int temp_array_size_macro_index = size; \
char "#name"[temp_array_size_macro_index];
主要使用它:
main(){
VARIABLE_LENGTH_CHAR_ARRAY(local_char_array, 16);
}
这会违背编码风格还是会受到宏问题的困扰?
我知道你需要小心变量名!
最佳答案
如果我是对的,你想要这样的东西:
#define VARIABLE_LENGTH_CHAR_ARRAY(name, size) \
const int size_of_##name = size; \
char name[size_of_##name]
int main()
{
VARIABLE_LENGTH_CHAR_ARRAY(local_char_array, 16);
}
大小的变量名称(现在是 const)现在取决于数组本身的名称,这最大限度地减少了同音异义的可能性
由 gcc -E
生成的代码的扩展给出:
int main()
{
const int size_of_local_char_array = 16; char local_char_array[size_of_local_char_array];
}
但是这样做很奇怪:
- as
__J__ 我
认为这无助于使程序可读 - 源代码中的其他位置
size_of_local_char_array
可以使用,但如果您/某人搜索其定义,它将找不到 - 宏生成两条语句,当然在这种情况下不可能将它们分组在一个 block 中
{}
,这是危险的,因为这不直观。正如您在代码中看到的,您添加了一个无用的“;”使用宏后,最后一个“;”已经存在于宏定义中
关于c - 将可变长度数组声明为宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54389543/