LINUX.ORG.RU

Как реализуется в исходниках выбор специфичного для компилятора кода?

 


0

1

Вот есть у меня некий кусок кода (конструктор шаблонного класса), который под gcc-4.4 работает, а под gcc-4.7 нет. И есть ему на замену кусок который под gcc-4.7 работает а под 4.4 нет. Как бы сделать исходник, который собирался без лишних телодвижений и там и там?

Понятно что это надо делать на директивах условной компиляции, как это делать Ъ?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)
#ifdef __GNUC__
#  include <features.h>
#  if __GNUC_PREREQ(4,4)
//      If  gcc_version >= 4.4
#  elif __GNUC_PREREQ(4,7)
//       If gcc_version >= 4.7
#  else
//       Else
#  endif
#else
//    If not gcc
#endif
AF ★★★
()
Ответ на: комментарий от AF

и всегда будет срабатывать первое условие, местами их поменяй

#ifdef __GNUC__
#  include <features.h>
#  if __GNUC_PREREQ(4,7)
//      If  gcc_version >= 4.7
#  elif __GNUC_PREREQ(4,4)
//       If gcc_version >= 4.4
#  else
//       Else
#  endif
#else
//    If not gcc
#endif
Skolotovich ★★★
()

Покажи код. Есть мнение, что ты страдаешь какой-то фигнёй.

Твой код будет компилироваться SS, ICC, Clang?

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

У меня вообще c __GNUC_PREREQ gcc4.4 собирать не хочет, но я разобрался с __GNUC_MINOR__ и пр.

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

clang не проприетарный. Ещё можно добавить openpath. Остальное, да - хлам.

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