В C переменная const int
— это переменная (которая имеет const
квалификацию), а не целочисленная константа, которая требуется при использовании в границах глобальных и статических массивов или в метках case
оператора switch
. Подробное обсуждение см. в разделе static const
vs #define
в C. Я предполагаю, что вы знаете, что такое VLA (массив переменной длины) — если нет, прокомментируйте, и я добавлю разъяснения.
Есть несколько способов обойти это. Я обычно использую enum
:
enum { buf_length = 255 };
char buf[buf_length + 1];
snprintf(buf, sizeof(buf), "%d Next on [%s] %s:",
channel, station_channel(channel), station_name(channel));
Обратите внимание, что я изменил использование buf_length
в вызове snprintf()
на sizeof(buf)
; это канонический способ сделать это, когда объявление массива находится в области видимости, и позволяет избежать потери лишнего байта, который вы добавили в буфер.
Вы можете использовать #define buf_length 255
; это классический способ сделать это.
Я часто использовал константу в верхнем регистре (BUF_LENGTH
), а не в нижнем регистре для обозначения константы. На самом деле это не критично, но более или менее общепринято в C (например, большинство констант в стандарте C, со странными исключениями, такими как L_tmpnam
).
В C++ история другая. const int buf_length = 255;
можно использовать в операторах switch
и границах массива.
person
Jonathan Leffler
schedule
26.08.2013