C - это язык свободной формы . Это означает, что вы можете форматировать его разными способами, и это все равно будет законная программа.
Например, заявление вроде
a = b * c;
можно было бы написать как
a=b*c;
или как
a
=
b
*
c
;
Итак, когда компилятор видит строки
temp = *a
*a = *b;
он думает это значит
temp = *a * a = *b;
Это, конечно, недопустимое выражение, и компилятор будет жаловаться на это вместо отсутствующей точки с запятой. Причина, по которой он недействителен, заключается в том, что a
это указатель на структуру, поэтому *a * a
он пытается умножить экземпляр структуры ( *a
) на указатель на структуру ( a
).
Хотя компилятор не может обнаружить отсутствующую точку с запятой, он также сообщает о совершенно несвязанной ошибке в неправильной строке. Это важно заметить, потому что сколько бы вы ни смотрели на строку, в которой сообщается об ошибке, ошибки там нет. Иногда такие проблемы требуют, чтобы вы посмотрели на предыдущие строки, чтобы убедиться, что они в порядке и без ошибок.
Иногда вам даже нужно заглянуть в другой файл, чтобы найти ошибку. Например, если файл заголовка определяет структуру последним в файле заголовка, а точка с запятой, завершающая структуру, отсутствует, то ошибка будет не в файле заголовка, а в файле, который включает файл заголовка.
А иногда становится еще хуже: если вы включаете два (или более) заголовочных файла, и первый из них содержит неполное объявление, скорее всего, синтаксическая ошибка будет указана во втором заголовочном файле.
С этим связана концепция последующих ошибок. Некоторые ошибки, как правило, из-за отсутствия точек с запятой, сообщаются как множественные ошибки. Вот почему при исправлении ошибок важно начинать сверху, так как исправление первой ошибки может привести к исчезновению нескольких ошибок.
Это, конечно, может привести к исправлению одной ошибки за раз и частой перекомпиляции, что может быть обременительным для больших проектов. Признание таких последующих ошибок - это то, что приходит с опытом, и, увидев их несколько раз, легче найти настоящие ошибки и исправить более одной ошибки за одну перекомпиляцию.