Понимание и разбор предупреждений от gcc

При компиляции файла .cpp из Emacs через M-x compile (который запускает Makefile папки), я вижу следующее в буфере компиляции (отображается в режиме компиляции):

In file included from: /path/to/file1:60,
from /path/to/file2.h:15,
from /path/to/file3.cpp:16:

/path/to/file4.h:28:2: #warning Этот файл содержит как минимум один устаревший или устаревший заголовок, который можно удалить без
дальнейшее уведомление в будущем. Пожалуйста, используйте не осуждаемый интерфейс
с эквивалентной функциональностью вместо. Для распечатки замены
Заголовки и интерфейсы, обратитесь к файлу backward_warning.h, к
отключить это предупреждение использовать -Wno-deprecated,

  • Помимо фактического предупреждающего сообщения, как я должен понимать этот след? то есть какой файл генерировал предупреждение? (file1,file2, file3 или же file4)?
  • Кроме того, почему после запятой file2 линия, двоеточие после file3 линия, линия с file4 включает в себя два числа, разделенные двумя двоеточиями?

Я использую Emacs 24.2.1, с gcc-4.4.5-x86_64,

3

Решение

Конструкция, которая фактически вызвала предупреждение ( #warning директива препроцессора, в данном случае) находится в file4, Материал выше, это след от #include стек, самый внутренний, но первый: в этом случае file3 включены file2, который включал file1, который включал file4,

Когда gcc знает номер столбца конструкции, которая вызвала диагностику, он печатает имя файла, двоеточие, номер строки, другое двоеточие и номер столбца, как вы видите на file4 линия. Первое число — это номер строки (28), а второе — номер столбца (в этом случае вы обнаружите, что # из #warning в колонке 2). Когда GCC не знать номер столбца, он просто печатает имя файла, двоеточие и номер строки. Это случай для #include стек, так как это не мешает записи точного столбца #include директивы. Режим компиляции Emacs понимает, как анализировать оба этих синтаксиса: вы обнаружите, что если вы используете С-х ` чтобы просмотреть диагностику, когда будет доступен номер столбца, Emacs поместит курсор в соответствующий столбец.

Двоеточия и запятые в конце этих отчетов просто соответствуют английской пунктуации; они ничего не значат.

4

Другие решения

  1. Предупреждение было сгенерировано в file4.h, в строке 28.

  2. Запятая потому, что вы находитесь в середине списка, двоеточие обозначает конец списка. Два числа — это номер строки и номер столбца.

2

Фактически покажите путь компиляции, сказав, что:

in column 2 of line 28 of file4.h
that included from file1.h(line 60)
that included from file2.h(line 15)
that included from file3.cpp(line 16)
there was a warning ...

Каждый компилятор должен следить за этим, и это не имеет ничего общего с умным GCC или чем-то еще !!
Так как ваш компилятор только компилирует file3.cpp и любой другой файл будет только проанализирован в результате включения из этого файла.

1
По вопросам рекламы [email protected]