可以这样做:
#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);
}
这会违背编码风格还是会遇到宏问题?
我知道您需要小心使用变量名!
答案 0 :(得分: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);
}
用于大小的变量(现在为 const )的名称现在取决于数组本身的名称,该名称可以最大程度地降低具有同音异义词的可能性
由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
中可以使用的其他位置,但是如果您/某人搜索了它的定义,则找不到{}
中,这很危险,因为这不直观。如您在代码中所见,您添加了一个无用的';'使用宏后,最后一个';'宏定义中已经存在