Использование inline для вставки содержимого заголовка - PullRequest
0 голосов
/ 18 июля 2011

Содержимое файла заголовка необходимо скопировать и вставить в несколько моих классов.Причина была в том, что директива include не делает ссылку на файл доступной для внешнего компилятора, поэтому, похоже, мой единственный вариант - скопировать содержимое заголовка в мои классы.

Мне было интересно, смогу ли яДля этого используйте специальные директивы * inline .

Каков наилучший подход к созданию собственного препроцессора, который будет вести себя как таковой?!

Ответы [ 4 ]

3 голосов
/ 23 июля 2011

Как насчет использования макроязыка m4?См., Например,

m4 - язык обработки макросов общего назначения.Это особенно активно используется в автоинструментах GNU.Возможно, вы сможете определить некоторые макросы m4, чтобы получить то, что вам нужно, а затем предварительно обработать код, пропустив его через m4 перед компиляцией и т. Д.

1 голос
/ 29 июля 2011

Наиболее вероятная причина того, что ваш внешний компилятор не раскрывает файл includefile при компиляции, - это ошибка установки пути поиска include - однако, решая конкретный вопрос, вы можете заставить компилятор gcc развернуть всевключайте файлы, используя опцию -E.

Итак,

  gcc -E mycfile.c >myexpeandedcfile.c

должно работать, если я правильно понимаю вашу проблему.

1 голос
/ 27 июля 2011

Это зависит от того, какой компилятор вы используете для компиляции ваших двоичных файлов.Некоторые компиляторы предлагают флаги оптимизации, которые могут повлиять на встраивание вашей программы.В gcc и g ++ флаг оптимизации -finline-functions заставит встраивать функции, которые он считает «простыми».Компилятор использует набор эвристик для определения простоты функции, поэтому это может работать или не работать в зависимости от вашего кода.Флаг -finline-function также устанавливается на уровне оптимизации 3, включается в gcc и g ++ с флагом -O3.

С небольшими изменениями и добавлением встроенных директив в ваш код, вы сможете установить некоторыефлаги компилятора для достижения полного встраивания.

1 голос
/ 18 июля 2011

Вам потребуется создать собственный инструмент препроцессора, чтобы сделать эквивалент #include.

...