声明可变长度数组作为宏

问题描述 投票:0回答:1

可以这样做:

#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);    
}

这会违背编码风格或将其与宏观问题所困扰?

我知道你需要小心的变量名!

c arrays macros
1个回答
1
投票

如果我是正确的,你想这样的事情:

#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认为这不利于使程序读取
  • 在源qazxsw PMI的其他地方可以使用,但对于它的定义,如果你/有人搜索也不会被发现
  • 宏产生两个语句,当然在这种情况下它是不可能将它们在一个块组size_of_local_char_array,这是危险的,因为这不是直观的。正如你可以在你的代码中看到你添加了一个无用的“;”使用的宏之后,同时最终“;”是在宏定义已经存在
© www.soinside.com 2019 - 2024. All rights reserved.