@drVatman

Как узнать, подо что компилирунтся код?

Есть код на си (расширение для php). Мне надо в нём понять, под какую сборку его компилируют: 32 или 64 бита. Желательно конечно макросом, чтобы было 2 ветки: одна выполнялась на 64х, вторая на 32х битах. Но если нельзя макросами, то хотя бы в рантайме. Выполняется под linux (debian). Хотя желательно максимально общее решение.
  • Вопрос задан
  • 2364 просмотра
Решения вопроса 1
@drVatman Автор вопроса
После копания в исходниках zend api нашёлся файл zend_long.h, а в нём определитель ZEND_ENABLE_ZVAL_LONG64, который как раз отвечает за разрядность целых чисел в пхп. Поэтому макрос такой: #ifdef ZEND_ENABLE_ZVAL_LONG64.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
#if _WIN32 || _WIN64
   #if _WIN64
     #define ENV64BIT
  #else
    #define ENV32BIT
  #endif
#endif

// Check GCC
#if __GNUC__
  #if __x86_64__ || __ppc64__
    #define ENV64BIT
  #else
    #define ENV32BIT
  #endif
#endif
Ответ написан
GavriKos
@GavriKos
Ну самый простой вариант для рантайма - узнавать размер типа, который отличается в 64 и 32 системах.
Ответ написан
@mayorovp
Если интересует рантайм-версия, то вот самый простой вариант: sizeof(void*) - может быть равен 4 или 8 :)

Но, если не секрет, в чем именно отличие этих двух веток? Мне во всех моих проектах хватало исключительно правильной расстановки типов size_t и ptrdiff_t, и ни разу не пришлось прибегать к явному определению разрядности.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы