LINUX.ORG.RU

Как определить компилятор?


0

0

Приветствую!

Интересно, существует более-менее стандартный способ сформировать некоторую метку, уникальную для каждого компилятора C/C++? Поясню. Есть программа, которая генерирует некоторый файл, включающий значения смещений полей относительно начала объектов. И есть вторая программа, которая использует смещения из этого файла для доступа к полям объектов. Хотелось бы записать в начало файла метку, которую вторая программа могла бы сверить с собственной и отказаться обрабатывать файл, если он сгенерирован другим компилятором. Я сейчас использую информацию от uname, но например на sparc компилятор можно запускать в разных режимах и он может генерировать разные смещения. Можете посоветовать более надёжный способ?

С уважением


А ты в свой makefile, или что у тебя там впиши, что то типа:

gcc -DCOMPILER="$(gcc -v)" ...

и будет тебе счастье, сможеш потом потом в своей проге этим предефайном
пользоваться

aton
()
Ответ на: комментарий от aton

Просто как всё гениальное! :-) Правда придётся к этому определению вручную добавлять ключи, определяющие режим компиляции, но тут уж точно универсального рецепта не найти.

Спасибо!

ivans
() автор топика
Ответ на: комментарий от ivans

ну во-первых для каждого компилятора существует стандартизованный идентификатор, доступный в препроцессоре, как то _MSC_VER, __GNUC__, __BORLANDC__ и т.д., поройся в инете. дублировать это в -D imho не правильно.

во-вторых затачивать сериализацию на особенности работы компилятора не есть хорошее решение. никто не гарантирует неизменность структуры объекта от версии к версии компилятора, не говоря у же о том, что файлы у тебя не совместимы. c++ конечно не имеет такой продвинутый rtti как в яве или c#, но если подумать - все можно решить. группируй поля в структуры и используй множественное наследование для доступа к ним независимо от класса-предка и смещения полей от начала объекта, по идеологии com-интерфейтов. или смотри в сторону xml.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.