C++/Delphi/Asm/Py/PHP
6076 / 1835 / 206
Регистрация: 14.12.2014
Сообщений: 3,740
Записей в блоге: 12
1

Предопределённые константы препроцессора

08.03.2019, 23:45. Показов 2420. Ответов 15
Метки нет (Все метки)

Добрый вечер.

Подскажите, кто знает, где найти список предопределённых констант препроцессора для определения платформы, разрядности, ОС и пр.?
Т.е. мне нужно понять, компилируется ли мой код для x86 (x86-64), какова разрядность, а также под Windows, скажем, или под Linux.

В идеале, если будет исчерпывающий список всех таких констант для каждого компилятора (т.к. не только платформы интересуют)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2019, 23:45
Ответы с готовыми решениями:

Директивы препроцессора Составить программу, использующую директивы препроцессора
1) Задать константы M1,M2,...,M5 и вычислить M1+ 2M2 + 3M3 + 4M4 + 5M5 2) С помощью директив #if,...

Комбинаторно- вероятностный смысл константы пи, гамма функция и обобщение константы пи
Добавлено через 33 минуты Известна формула для выражения \pi, ...

Предопределённые макросы
Всем привет! Скажите кто знает как объяснить компилятору что он работает в Linux или Win32? Я...

Предопределенные значения в DrawFrameControl
Написал програмку, в ней есть чекбокс в StringGride, реализовал по широко известным примерам из...

15
2548 / 1207 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.03.2019, 23:56 2
Гугл на запрос predefined macros win выдал ссылку
https://docs.microsoft.com/en-... ew=vs-2017
0
Don't worry, be happy
17752 / 10522 / 2028
Регистрация: 27.09.2012
Сообщений: 26,496
Записей в блоге: 1
08.03.2019, 23:58 3
Jin X, стандартизированных констант нет, поэтому нужно смотреть документацию на каждый компилятор и платформу, либо использовать готовые решения, ну или подсмотреть как там всё это устроено.
Например, можно использовать Boost - https://www.boost.org/doc/libs... acros.html
Или посмотреть в исходниках оного как и что определяется.
0
C++/Delphi/Asm/Py/PHP
6076 / 1835 / 206
Регистрация: 14.12.2014
Сообщений: 3,740
Записей в блоге: 12
11.03.2019, 00:14  [ТС] 4
rikimaru2013, это только для винды.

Вот что нашёл: https://sourceforge.net/p/predef/wiki/Home/
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,745
11.03.2019, 08:58 5
Цитата Сообщение от Jin X Посмотреть сообщение
Подскажите, кто знает, где найти список предопределённых констант препроцессора для определения платформы, разрядности, ОС и пр.?
Эти константы зависят от используемой IDE. Они никак не связаны с ОС.
0
Don't worry, be happy
17752 / 10522 / 2028
Регистрация: 27.09.2012
Сообщений: 26,496
Записей в блоге: 1
11.03.2019, 10:47 6
jugu, причем здесь IDE?
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,745
11.03.2019, 11:04 7
Цитата Сообщение от Croessmah Посмотреть сообщение
jugu, причем здесь IDE?
Еще как причем. Например, в Visual Studio свои константы, в C++ Builder свои. От библиотек еще эти константы зависят, поставляемых с IDE или имеющихся в системе.
0
Don't worry, be happy
17752 / 10522 / 2028
Регистрация: 27.09.2012
Сообщений: 26,496
Записей в блоге: 1
11.03.2019, 11:06 8
jugu, а если к IDE можно люблй компилятор прицепить, то IDE должна предоставлять константы для любого, даже еще не созданного компилятора? )))
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,745
11.03.2019, 11:16 9
Цитата Сообщение от Croessmah Посмотреть сообщение
jugu, а если к IDE можно люблй компилятор прицепить, то IDE должна предоставлять константы для любого, даже еще не созданного компилятора? )))
IDE ничего не предоставляет. Предоставляют библиотеки, которые поставляются в том числе и с IDE. А препроцессор (не компилятор) их распознает и обрабатывает.
0
C++/Delphi/Asm/Py/PHP
6076 / 1835 / 206
Регистрация: 14.12.2014
Сообщений: 3,740
Записей в блоге: 12
11.03.2019, 11:28  [ТС] 10
Цитата Сообщение от jugu Посмотреть сообщение
Эти константы зависят от используемой IDE
Почему от IDE ? И от компилятора ж тоже...
И они определяют разные define'ы в зависимости от платформы, ОС и пр.

Сейчас пытаюсь определить разрядность кода: 64 бита или меньше. Хотя бы для GCC, Clang, VC++, ICC, C++Builder.
Думал, _LLP64 (или _LP64) решит вопрос, но оказалось под виндой они не выставляются, по поводу других ОС тоже не уверен. Вот и ковыряюсь: defined(__x86_64__) || defined(_M_X64) || defined(__ia64__) || defined(_M_IA64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__ppc64__).

Думаю, есть ли альтернативные способы определения разрядности?
__WORDSIZE тоже отсутствует.

Добавлено через 3 минуты
Нельзя вот взять и написать #if sizeof(void*) * CHAR_BIT == 64 || sizeof(long) * CHAR_BIT == 64
0
Don't worry, be happy
17752 / 10522 / 2028
Регистрация: 27.09.2012
Сообщений: 26,496
Записей в блоге: 1
11.03.2019, 11:35 11
Цитата Сообщение от Jin X Посмотреть сообщение
Сейчас пытаюсь определить разрядность кода: 64 бита или меньше.
https://stackoverflow.com/ques... 4-bit-in-c
2
C++/Delphi/Asm/Py/PHP
6076 / 1835 / 206
Регистрация: 14.12.2014
Сообщений: 3,740
Записей в блоге: 12
11.03.2019, 12:23  [ТС] 12
Croessmah, отлично, спасибо!

C++
1
2
3
4
5
6
7
#if UINTPTR_MAX == UINT64_MAX || ULONG_MAX == UINT64_MAX
  cout << "64-bit\n";
#elif UINTPTR_MAX == UINT32_MAX
  cout << "32-bit\n";
#else
  cout << "??? 16-bit ???\n";
#endif
(ULONG тут для определения Linux x32 как 64-битного.
Надеюсь, будет работать (надо проверить)).
0
Don't worry, be happy
17752 / 10522 / 2028
Регистрация: 27.09.2012
Сообщений: 26,496
Записей в блоге: 1
11.03.2019, 12:28 13
Цитата Сообщение от Jin X Посмотреть сообщение
ULONG тут для определения Linux x32 как 64-битного
Это код из вопроса?
0
C++/Delphi/Asm/Py/PHP
6076 / 1835 / 206
Регистрация: 14.12.2014
Сообщений: 3,740
Записей в блоге: 12
11.03.2019, 12:29  [ТС] 14
Интересно, бывает ли такое, когда long 64-битный в не 64-битном коде?
Хоть на каких-нибудь архитектурах.

Добавлено через 20 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
Это код из вопроса?
Из какого вопроса?
0
Don't worry, be happy
17752 / 10522 / 2028
Регистрация: 27.09.2012
Сообщений: 26,496
Записей в блоге: 1
11.03.2019, 12:57 15
Цитата Сообщение от Jin X Посмотреть сообщение
Из какого вопроса?
Я ссылку на SO скидывал выше, там в вопросе как раз такой метод.
Где-то у меня картинка была на такой случай - потерялась. )
0
C++/Delphi/Asm/Py/PHP
6076 / 1835 / 206
Регистрация: 14.12.2014
Сообщений: 3,740
Записей в блоге: 12
11.03.2019, 13:17  [ТС] 16
Croessmah, ну да.
Только я скомпилил под Ubuntu в режиме -mx32, там long имеет размер 32 бита

Добавлено через 2 минуты
Так что defined(__x86_64__) || defined(_M_X64) || defined(__ia64__) || defined(_M_IA64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__ppc64__) лучше...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2019, 13:17
Помогаю со студенческими работами здесь

Предопределенные варианты отчета в 1с унф
подскажите, как вывести предопределенные варианты отчета , что сделать для вывода этих вариантов в...

Как записать предопределенные данные в справочник?
Сделал все как на диске итс https://its.1c.ru/db/metod8dev#content:5367:hdoc &amp;НаСервере...

Как заменить среднее значение на предопределенные слова
Прошу помочь: есть 2 таблицы: tabl1 (столбцы name, ocenka) name - имя, ocenka - число от 1 до 5...

Как в symfony выводить в шаблон предопределенные данные?
Хочу когда пользователь заходит на сайт вызывать eventlistener, в котором определялось бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru