可以这样做:
#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);
}
对于大小(现在常数)变量的名称现在取决于阵列本身的名称,即最大限度地减少了有同音的概率
通过gcc -E
产生的代码的扩展给出:
int main()
{
const int size_of_local_char_array = 16; char local_char_array[size_of_local_char_array];
}
但要做到这一点很奇怪:
__J__ I
认为这不利于使程序读取size_of_local_char_array
,这是危险的,因为这不是直观的。正如你可以在你的代码中看到你添加了一个无用的“;”使用的宏之后,同时最终“;”是在宏定义已经存在