автоматически генерировать заголовок с помощью gcc или clang

Учитывая исходный файл source.cpp, как я могу сгенерировать соответствующие заголовки source.hpp?

У меня 64-разрядная версия Linux, и я хотел бы избежать написания заголовков вручную, чтобы сократить количество времени, которое я трачу на написание кода, и ограничить возможные ошибки.


person user2485710    schedule 24.07.2013    source источник
comment
Кто подскажет, что подходит? Обычно вы начинаете с определений классов, а затем ваша цепочка инструментов генерирует исходный файл из этого...   -  person Kerrek SB    schedule 24.07.2013
comment
Вы можете попробовать: hwaci.com/sw/mkhdr   -  person trojanfoe    schedule 24.07.2013
comment
@KerrekSB с соответствующим, я имею в виду последовательный. если мой foo() возвращает логическое значение, я бы не хотел видеть int foo() в своем заголовке... вот и все.   -  person user2485710    schedule 24.07.2013
comment
@ user2485710: Однако, если вы это сделаете, вы получите ошибку компилятора, поэтому маловероятно, что такая ошибка приведет к ошибкам. Есть гораздо более коварные нарушения ODR, которые вы можете придумать с помощью магии заголовков, и это было бы интересно проанализировать.   -  person Kerrek SB    schedule 24.07.2013
comment
@KerrekSB ... но мне нравится быть ленивым ... чертова компиляция, теперь удобно писать свои собственные заголовки, никогда об этом не думал. Из любопытства, ваша аббревиатура ODR означает ...?   -  person user2485710    schedule 24.07.2013
comment
ODR: Единое правило определения   -  person Oswald    schedule 24.07.2013
comment
@Oswald спасибо +a_lot_of_extra_char   -  person user2485710    schedule 24.07.2013
comment
Вам не нужны предварительные объявления функций, если источник функции находится до источников вызывающей его функции. Бывший. если main() вызывает foo(), вам просто нужно поместить источник foo() до main() в ваш файл .cpp. То же самое относится и к классам, так как весь код может быть написан внутри файла .h — хотя это не означает, что это хорошая практика.   -  person    schedule 24.07.2013
comment
@IngeHenriksen Я планирую написать библиотеку, мне нужны эти заголовки для всех желающих!   -  person user2485710    schedule 24.07.2013


Ответы (2)


Вы не можете автоматически создавать соответствующие заголовки из исходных файлов, поскольку не существует формального определения того, что такое подходящий заголовок. В частности, инструмент, который извлекает объявления из исходного файла, не может знать, должно ли объявление быть частным для единицы перевода или общим для других единиц перевода. В первом случае объявление в шапке было бы ИМХО неуместным.

person Oswald    schedule 24.07.2013
comment
stackoverflow.com /вопросы/17832010/ - person user2485710; 24.07.2013
comment
@ user2485710 Вы предоставили ссылку на этот вопрос? - person trojanfoe; 24.07.2013
comment
@trojanfoe это ссылка на комментарий - person user2485710; 24.07.2013
comment
@ user2485710 О, так оно и есть. - person trojanfoe; 24.07.2013

Вы не можете сгенерировать код для своих заголовков, так как в заголовке есть вещи, о которых вы не можете догадаться из файла cpp. Первое, что приходит мне на ум, это доступность (общедоступная/защищенная/частная) и наследование.

Однако, если вы пытаетесь улучшить свой рабочий процесс/производительность, вы можете использовать IDE, которая имеет множество встроенных функций, помогающих редактировать код. Создание нового класса, например, создаст заголовок и файл cpp, добавит возможное наследование, защиту заголовков и т. д. Это также может помочь вам переименовать символы, например, для облегчения рефакторинга.

Я лично использую бесплатный QtCreator (как в случае с бесплатным пивом и свободой слова), но это только предпочтение. Я также использовал Visual Studio с подключаемым модулем Visual Assist X (коммерческим), который также предоставляет некоторые полезные функции. Я знаю, что есть люди, которым нравится Eclipse CDT, но я никогда им не пользовался.

В любом случае выбор IDE - это только вопрос предпочтений;)

person Uflex    schedule 24.07.2013