Когда я впервые познакомился с C, мне сказали всегда объявлять мои переменные в верхней части функции. Теперь, когда у меня есть сильное понимание языка, я фокусирую свои усилия на стиле кодирования, особенно ограничивая область моих переменных. Я прочитал о преимуществах, ограничивающих сферу охвата, и я наткнулся на интересный пример. По-видимому, C99 позволяет вам это делать...
for (int i = 0; i < 10; i++)
{
puts("hello");
}
Я думал, что область переменных ограничена внутренними наиболее близкими фигурными фигурными скобками { }
, но в приведенном выше примере int i
оказывается ограниченным по объему фигурными скобками цикла for, хотя это объявляется вне их.
Я попытался расширить приведенный выше пример с помощью fgets()
, чтобы сделать то, что, как я думал, было чем-то похожим, но оба из них дали мне синтаксическую ошибку.
fgets(char fpath[80], 80, stdin);
* См. примечание **
fgets(char* fpath = malloc(80), 80, stdin);
Итак, где именно законно объявлять переменные в C99? Был ли пример for-loop исключением из правила? Это относится также к циклам while
и do while
?
* Примечание **: Я даже не уверен, что это будет синтаксически корректно, даже если я могу объявить массив char, так как fgets()
ищет указатель на char не указатель на массив 80 из char. Вот почему я попробовал версию malloc()
.