Найбільш часто зустрічаються - nbsp; помилки, що видаються - nbsp; компілятором gcc - маленьке

це переклад сторінки "CSM217: C for Computer Scientists Common gcc Compiler Errors" staff.um.edu.mt/csta1//courses/lectures/csa2060.
(Щоб не загубилося на диску)

Найбільш часто зустрічаються помилки, що видаються компілятором gcc

Нижче наведені список найбільш часто зустрічаються під час компіляції помилок і попереджень компілятора gcc, а також пояснення причин їх виникнення. Зверніть, будь ласка, увагу, що даний матеріал можна застосувати до UNIX-подібних операційних систем.

У квадратних дужках наводиться переклад системних повідомлень.

список помилок

Опис загальних помилок / попереджень компілятора

'Variable' undeclared (first use in this function) [ 'змінна' не визначена (перше використання в цій функції)]

unknown escape sequence [невідома керуюча послідовність]

No such file or directory [Немає такого файлу або каталогу]

ld: elf error: file prog: [ld: помилка формату elf: файл prog:]

parse error before 'string' [помилка розбору перед 'рядком']

Undefined symbol [Невизначений символ]

character constant too long [задовга символьна константа]

passing arg n of 'function' makes
data type from another data type without a cast [переданий аргумент n функції 'function' створює
тип даних з іншого типу даних без приведення]

unterminated string or character constant [незавершена рядок або символьний константа]

parse error at end of input [помилка розбору в кінці введення]

Опис загальних помилок / попереджень компілятора

У Сі помилки компіляції зазвичай є критичними, тобто Сі-компілятор не може скомпілювати ваш код. У той же час попередження - це просто попередження: компілятор виявив потенційну проблему, але, тим не менш, зміг створити об'єктний код. Попередження не слід ігнорувати, вони означають зазвичай, що щось не так з вашою програмою, і швидше за все, вона поведе себе не зовсім так, як ви очікуєте.

Перед повідомленнями про помилки і попередженнями відображається імена файлу і функції, в яких сталася помилка. наприклад,

prog.c: In function 'main':


[Prog.c: В функції 'main':]

означає, що помилка сталася при компіляції програмного файлу prog.c, а точніше, в функції main. У наступних рядках відображаються помилки / попередження для даних файлу і функції. Якщо в коді кілька функцій і / або декілька файлів, то кожен файл / функція, що містить помилки, буде показаний окремо.

Рядки повідомлення про помилку / попередження, наступні за ім'ям файлу / функції, містять:



  • ім'я файлу / функції, що містить помилку;
  • номер рядка в початковому файлі, де зустрілася помилка;
  • рядок "warning" [ "попередження"]. якщо повідомлення є попереджуючим (при помилку цей рядок порожня);
  • опис була зустрінута помилки.


prog.c: 3: warning: unknown escape sequence '\ z'

[Prog.c: 3: попередження: невідома керуюча послідовність '\ z']

означає, що існує проблема в рядку 3 файлу prog.c. Це повідомлення - тільки попередження: не існує керуючої послідовності '\ z'. Програма буде скомпільована (якщо тільки не буде інших помилок), так як це просто попередження. Однак, швидше за все, програма поведе себе не зовсім так, як ви очікуєте.

'Variable' undeclared (first use in this function) [ 'змінна' не визначена (перше використання в цій функції)]

Сі - це збірний мова, тобто потрібно оголошувати змінні перед початком їх використання. Сі також чутливі до регістру мову, тобто var і Var - різні змінні. Ви або забули оголосити змінну, або помилилися в написанні її імені.


Це повідомлення про помилку - компілятор не зміг скомпілювати код. Зазвичай дане повідомлення супроводжується текстом (Each undeclared identifier is reported only once for each function it appears in.) [(Виводиться тільки одне повідомлення на функцію для кожного неоголошеного ідентифікатора.)].
Одна і та ж неоголошена змінна може кілька разів зустрічатися в функції, але компілятор повідомляє тільки про перший випадок.

unknown escape sequence '\ z' [невідома керуюча послідовність]

Керуюча послідовність - це символ, перед яким знаходиться зворотний слеш '\'. Наявність '\' змінює функцію подальшого символу. Наприклад, 'n' - це символ n, але '\ n' - це знак перекладу рядка. Для деяких символів, наприклад, z, немає керуючих послідовностей. Програма буде скомпільована (якщо тільки не буде інших помилок), так як це просто попередження. Однак, швидше за все, програма поведе себе не зовсім так, як ви очікуєте.

No such file or directory [Немає такого файлу або каталогу]

Ви дали команду скомпілювати файл, якого не існує. Очікується, що файли вихідних кодів Сі-програм матимуть розширення .c. Якщо вихідний код знаходиться в файлі proc.c, слід використовувати команду компіляції gcc prog.c. Спроба виконати gcc prog призведе до цієї помилку. Дана помилка зазвичай супроводжується повідомленням No input files [Немає вхідних файлів].

ld: elf error: file prog: [ld: помилка формату elf: файл prog:]

Зазвичай ви також побачите наступне повідомлення.

unknown type, unable to process using elf (3E) libraries

ld: fatal: File processing errors. No output written to a.out

collect2: ld returned 1 exit status


[Невідомий тип, неможливо обробити, використовуючи бібліотеки elf (3E)

ld: критичне: Помилки обробки файлу. У файл a.out нічого не записано

collect2: ld повернув статус виходу 1]

Неприємна помилка; на щастя, її легко виправити! Код вашої Сі-програми знаходиться у файлі prog, але, оскільки ви не використали розширення .c для цього файлу, gcc не може зрозуміти, якого типу програмний код міститься в зазначеному файлі. Для виправлення помилки просто перейменуйте prog в prog.c.

parse error before 'string' [помилка розбору перед 'рядком']

Undefined symbol [Невизначений символ]

Gcc зустрів щось схоже на виклик функції, але функції з таким ім'ям не існує. Ім'я "відсутньої" функції - це перше слово в третьому рядку повідомлення про помилку (main).

У всіх Сі-програмах повинна існувати функція main, оскільки саме з неї починається виконання програми.

character constant too long [задовга символьна константа]

У Сі рядки повинні полягати в подвійні лапки ( ""). Якщо ви використовуєте одинарні лапки ( ''), очікується, що в них буде тільки один символ (або керуюча послідовність).

warning: passing arg n of 'function' makes
pointer from integer without a cast [переданий аргумент n функції 'function' створює покажчик з цілого без приведення]


Ви викликали функцію function. Очікується, що аргумент n буде дороговказом, але ви передаєте в функцію ціле значення (int). Для зміни типу значення використовується приведення типів, але у вас цього немає. Сі - це збірний мова, тобто потрібно оголошувати типи змінних і типи даних, переданих функцій, перед початком їх використання. Дане попередження виводиться, якщо зустрінута невідповідність типів між даними, переданими в функцію, і даними, очікуваними функцією (тип переданих
параметрів вказується в прототипі функції). Незважаючи на те що gcc створить об'єктний код, на це попередження варто звернути увагу, так як воно зазвичай вказує на логічну помилку.

unterminated string or character constant [незавершена рядок або символьний константа]

Чи не збігається число відкривають і закривають лапок (одинарних або подвійних).

parse error at end of input [помилка розбору в кінці введення]

Ви, можливо, втратили закриває фігурну дужку (>) десь в коді. Сі не може сказати, де саме, так що удачі в пошуках!

Схожі статті