Что такое файл.h. gch?



У меня недавно был проект, где я должен был сделать программу с G++. Я использовал make-файл, и по какой-то причине он иногда оставлял a .ч. файл GCH позади. Иногда это не влияло на компиляцию, но время от времени это приводило к тому, что компилятор выдавал ошибку для проблемы, которая была исправлена или которая не имела смысла. У меня есть два вопроса:



1) Что такое a .h. GCH файл и для чего он используется? и



2) Почему это вызывает такие проблемы, когда это не был убран?



Спасибо за помощь.

801   5  

5 ответов:

A .gch файл-это предварительно скомпилированный заголовок.

Если a .gch не найден, тогда будут использоваться обычные файлы заголовков.

однако, если ваш проект настроен на создание предварительно скомпилированных заголовков, он сделает их, если они не существуют, и использует их в следующей сборке.

иногда *.h.gch будет поврежден или содержит устаревшую информацию, поэтому удаление этого файла и компиляция его снова должны исправить это.

Если вы хотите узнать о файле, просто введите на терминале

file filename

file a.h.gch выдает:

GCC precompiled header (version 013) for C

его предварительно скомпилированный заголовок GCC.

Википедия имеет наполовину приличное объяснение,http://en.wikipedia.org/wiki/Precompiled_header

a) это предварительно скомпилированные заголовки: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

b )они содержат "кэшированную" информацию.H файлы и должны обновляться каждый раз, когда вы меняете соответствующие .H-файл. Если этого не происходит - у вас есть неправильные зависимости, установленные в вашем проекте

другие ответы полностью точны в отношении того, что такое файл gch. Однако контекст (в данном случае новичок, использующий g++) - это все. В этом контексте существует два правила:

  1. никогда, никогда, никогда не поставить .H-файл в строке компиляции g++. Только.cpp-файлы. Если а .H файл когда-либо компилируется случайно, удалите любой *.файлы ГЧ

  2. никогда, никогда, никогда не поставить .cpp-файл в инструкции #include.

Если правило один сломан, в какой-то момент возникнет проблема, описанная в вопросе. Если правило два нарушено, в какой-то момент компоновщик будет жаловаться на многозначные символы.

Comments

    Ничего не найдено.