C - мова у вільній формі . Це означає, що ви можете її відформатувати багатьма способами, і це все ще буде легальною програмою.
Наприклад, твердження типу
a = b * c;
можна було написати так
a=b*c;
чи як
a
=
b
*
c
;
Тож коли компілятор бачить рядки
temp = *a
*a = *b;
вона думає, що це означає
temp = *a * a = *b;
Це, звичайно, не є дійсним виразом, і компілятор скаржиться на це замість відсутньої крапки з комою. Причина, яка не є дійсною, полягає в тому a
, що це вказівник на структуру, тому *a * a
намагається помножити екземпляр структури ( *a
) з вказівником на структуру ( a
).
Хоча компілятор не може виявити відсутню крапку з комою, він також повідомляє про абсолютно непов’язану помилку в неправильній лінії. Це важливо помітити, оскільки скільки б ви не дивилися на рядок, де повідомляється про помилку, помилки там немає. Іноді подібні проблеми потребують того, щоб ви подивилися на попередні рядки, щоб побачити, чи добре вони і без помилок.
Іноді вам навіть доводиться шукати інший файл, щоб знайти помилку. Наприклад, якщо файл заголовка визначає структуру, останню, яку він робить у файлі заголовка, і крапка з комою, що закінчує структуру, відсутня, помилка буде не у файлі заголовка, а у файлі, що включає файл заголовка.
А іноді стає ще гірше: якщо ви включите два (або більше) файлів заголовків, а перший містить неповну декларацію, швидше за все, помилка синтаксису буде вказана у другому файлі заголовка.
У зв'язку з цим є концепція подальших помилок. Деякі помилки, як правило, через відсутність крапки з комою, повідомляються як кілька помилок. Ось чому важливо починати зверху під час виправлення помилок, оскільки виправлення першої помилки може призвести до зникнення декількох помилок.
Це, звичайно, може призвести до виправлення однієї помилки одночасно та частих перекомпіляцій, які можуть бути громіздкими при великих проектах. Визнання таких помилок у подальшому - це те, що має досвід, і після їх перегляду декілька разів легше розкопати реальні помилки та виправити більше однієї помилки за перекомпіляцію.