При компиляции файла .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
,
Конструкция, которая фактически вызвала предупреждение ( #warning
директива препроцессора, в данном случае) находится в file4
, Материал выше, это след от #include
стек, самый внутренний, но первый: в этом случае file3
включены file2
, который включал file1
, который включал file4
,
Когда gcc знает номер столбца конструкции, которая вызвала диагностику, он печатает имя файла, двоеточие, номер строки, другое двоеточие и номер столбца, как вы видите на file4
линия. Первое число — это номер строки (28), а второе — номер столбца (в этом случае вы обнаружите, что #
из #warning
в колонке 2). Когда GCC не знать номер столбца, он просто печатает имя файла, двоеточие и номер строки. Это случай для #include
стек, так как это не мешает записи точного столбца #include
директивы. Режим компиляции Emacs понимает, как анализировать оба этих синтаксиса: вы обнаружите, что если вы используете С-х ` чтобы просмотреть диагностику, когда будет доступен номер столбца, Emacs поместит курсор в соответствующий столбец.
Двоеточия и запятые в конце этих отчетов просто соответствуют английской пунктуации; они ничего не значат.
Предупреждение было сгенерировано в file4.h, в строке 28.
Запятая потому, что вы находитесь в середине списка, двоеточие обозначает конец списка. Два числа — это номер строки и номер столбца.
Фактически покажите путь компиляции, сказав, что:
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
и любой другой файл будет только проанализирован в результате включения из этого файла.