Язык программирования Си


         

Вспомогательные переменные, не несущие смысловой


- 7 - Си в UNIX

1.13. Вспомогательные переменные, не несущие смысловой нагрузки (вроде счетчика пов- торений цикла, не используемого в самом теле цикла) принято по традиции обозначать однобуквенными именами, вроде i, j. Более того, возможны даже такие курьезы:

main(){ int _ ; for( _ = 0; _ < 10; _++) printf("%d\n", _ ); }

основанные на том, что подчерк в идентификаторах - полноправная буква.

1.14. Найдите 2 ошибки в программе:

main(){ int x = 12;

printf( "x=%d\n" ); int y; y = 2 * x; printf( "y=%d\n", y ); }

Комментарий: в теле функции все описания должны идти перед всеми выполняемыми опера- торами (кроме операторов, входящих в состав описаний с инициализацией). Очень часто после внесения правок в программу некоторые описания оказываются после выполняемых операторов. Именно поэтому рекомендуется отделять строки описания переменных от выполняемых операторов пустыми строками (в этой книге это часто не делается для эко- номии места).

1.15. Найдите ошибку:

int n; n = 12; main(){ int y; y = n+2; printf( "%d\n", y ); }

Ответ: выполняемый оператор n=12 находится вне тела какой-либо функции. Следует внести его в main() после описания переменной y, либо переписать объявление перед main() в виде

int n = 12;

В последнем случае присваивание переменной n значения 12 выполнит компилятор еще во время компиляции программы, а не сама программа при своем запуске. Точно так же про- исходит со всеми статическими данными (описанными как static, либо расположенными вне всех функций); причем если их начальное значение не указано явно - то подразумевается 0 ('\0', NULL, ""). Однако нулевые значения не хранятся в скомпилированном выполняе- мом файле, а требуемая "чистая" память расписывается при старте программы.

1.16. По поводу описания переменной с инициализацией:

TYPE x = выражение;

является (почти) эквивалентом для

TYPE x; /* описание */ x = выражение; /* вычисление начального значения */



Содержание  Назад  Вперед