簡體   English   中英

將可變長度數組聲明為宏

[英]declaring variable length array as macro

可以這樣做:

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

但是這樣做很奇怪

  • 作為__J__ I認為這無助於使程序可讀
  • 否則可以在您的源代碼中使用size_of_local_char_array但如果您/某人搜索其定義,則將找不到
  • 該宏產生兩個語句,當然在這種情況下,不可能將它們分組在一個塊{} ,這很危險,因為這不直觀。 如您在代碼中所見,您添加了一個無用的';' 使用宏后,最后一個';' 在宏定義中已經存在

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM