0 / 0 / 0
Регистрация: 06.04.2015
Сообщений: 1
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Многоуровневое включение header-файла и ошибки компиляции06.04.2015, 17:01. Показов 1032. Ответов 1
Метки нет (Все метки)
Доброго всем времени суток!
Просмотрел аналогичные темы, но достаточно близких тем не обнаружил, потому создаю новую тему. Суть проблемы. Есть компилятор си. К нему header-файл разработчика компилятора с синонимами целочисленных типов - types.h. В примере проекта, поставляемом разработчиком есть несколько уровней вложения types.h. Так main.c содержит строки:
В свою очередь, и lcd.h, и leds.h, и joystick.h содержат строку:
Получается, что при компиляции main.c типы, описанные в types.h многократно переопределяются, но компилятор ошибок не выдаёт. Пытаюсь делать, вроде бы, то же самое. Создаю файл m20xx.h со своими пользовательскими типами, правда, в отличие от types.h, содержит по большей части не синонимы, а сложные вложенные структуры, union'ы и enum'ы. Создаю файлы с прототипами функций: m20xx_time.h, m20xx_spi.h, m20xx_can.h и т.д. Во всех этих header-файлах есть по 2 строки:
Если я в каждом из hedar-файлов с прототипами закомментирую строку "#include <m20xx.h>", компилятор выдаёт вполне ожидаемо ошибку в описании каждого из прототипов, имеющих типы аргументов, описанных в m20xx.h. Точнее говоря, каждый неизвестный компилятору аргумент генерирует 4 сообщения об ошибке: "Declaration syntax", "Identifer list in function declaration", "Empty declaration" и "Expecting data or function declaration". Если же раскоментировать включение m20xx.h в каждом из файлов с описаниями прототипов функций, то ошибки возникают уже в самом m20xx.h. Каждая описанная мною структура (или union) сопровождаются сообщением: "Imcompotible declaratio for ... (имя структуры или union'а)". У enum'ов, почему, то только отдельные элементы сопровождаются сообщением: "Duplicate name "ИМЯ"". Но хотя бы один компонент у каждогог enum'а таким сообщением сопровождён... Я, конечно, могу всё это обойти (точнее говоря, пока так и обхожу). Фактически можно заставить препроцессор собрать всё в один линейный файл, а уже потом компилировать. Переношу все исходники и header-файлы, кроме main.c и m20xx.h в "параллельную" директорию, чтобы компилятор не видел (во вложенной всё равно видит, собака, а искать, есть ли соответствующий флажок в настройках проекта - в лом). Из всех собранных в общую директорию header- и с-файлов убираю все директивы #include.В файле m20xx.h оставляю только #include <types.h> А в main.c собираю последовательно, сначала все header'ы:
а затем все с-файлы:
0
|
06.04.2015, 17:01 | |
Ответы с готовыми решениями:
1
Ошибки при компиляции файла exe Ошибки после компиляции на Visual Express 2012.Ошибки в теме Многоуровневое меню из конфигурационного файла с2079 и с2228 ошибки при компиляции ниже участок кода, с которым праблема и скрины ошибки |
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|||||||||||
06.04.2015, 20:24 | 2 | ||||||||||
Bold, Есть специальный простой метод. И если ты посмотришь системные хедеры, ты его увидишь.
Пусть у тебя есть собственный хедер My.h В его начале пишешь 2 строчки
Но после этого ты можешь свои хедеры включать друг в дружку, располагать почти в произвольной последовательности и жить совершенно счастливо
1
|
06.04.2015, 20:24 | |
06.04.2015, 20:24 | |
Помогаю со студенческими работами здесь
2
Ошибки при компиляции - исправить ошибки в коде Включение/выключение try/catch по условию на этапе компиляции. Возможно ли это? Непонятная ошибка при компиляции: Не удается открыть файл включение Ошибки при использовании header'а Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |