Когда я впервые познакомился с 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 исключением из правила? Это относится и к петлям while
и do while
?
* Примечание **: Я даже не уверен, что это будет синтаксически правильно, даже если бы я мог объявить там массив символов, так как fgets()
ищет указатель на символ не указатель на массив 80 символов . Вот почему я попробовал malloc()
версию.