Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Stitch Igorek
47 / 47 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
#1

Как разделить участки кода в одном исходнике для разных битовых систем - C++

19.08.2016, 07:14. Просмотров 265. Ответов 9
Метки нет (Все метки)

В проекте нужно разделить участки программы примерно таким образом, как показано псевдокодом
C++
1
2
3
4
if (сборка выполняется для х64)
     компилируется эта часть программы;
else if (сборка выполняется для х86)
     компилируется эта часть;
возможно ли такое сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2016, 07:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как разделить участки кода в одном исходнике для разных битовых систем (C++):

функции для перевода из разных систем счисления - C++
подскажите функции для перевода из разных систем счисления Добавлено через 1 час 19 минут А такая вообще есть, и если нед то как...

Объясните пожалуйста некоторые участки кода - C++
Есть код (Идеально сбалансированное дерево): // #include "stdafx.h" #include <stdio.h> #include <iostream> using namespace...

Функция вывода шестнадцатеричного кода с помощью битовых полей - C++
Помогите решить задачу: "С помощью битовых полей создайте функцию для вывода шестнадцатеричного кода символа".

Как хранить объекты разных классов в одном контейнере - C++
Здравствуйте! Хочу реализовать хранение разных классов(базовый и наследник) в одном контейнере. На форуме искал, но, к сожалению, не...

Внутри участки кода. Прошу опытных сказать что это за вид языка - C++
Здравствуйте!Я до сих пор мучаюсь какие бывают виды c++.вот наконец нашел такойразнообразный код и теперь прошу Вас сказать что код это?...

Как правильно разделить файл исходного кода? - C++
Имеем работающий код на ВС++ 6 (более 10 тысяч строк) в одном *.cpp Нужно разделить его на несколько файлов. Конкретнее: ...

9
Vort_
189 / 189 / 52
Регистрация: 10.07.2012
Сообщений: 400
19.08.2016, 07:53 #2
Можно сделать вот так:
C++
1
2
3
4
5
#if defined(__x86_64__) || defined(_M_X64)
    cout << "64" << endl;
#elif defined(__i386) || defined(_M_IX86)
    cout << "32" << endl;
#endif
2
vxg
Модератор
3208 / 2011 / 230
Регистрация: 13.01.2012
Сообщений: 7,790
19.08.2016, 08:31 #3
Vort_, и как широко распространены эти определения?
0
Vort_
189 / 189 / 52
Регистрация: 10.07.2012
Сообщений: 400
19.08.2016, 08:45 #4
Цитата Сообщение от vxg Посмотреть сообщение
Vort_, и как широко распространены эти определения?
Я взял их из вот этой статьи:
C/C++ tip: How to detect the processor type using compiler predefined macros
Там написано какие компиляторы что из этого поддерживают.
1
Байт
Диссидент
Эксперт C
17221 / 11291 / 1789
Регистрация: 24.12.2010
Сообщений: 22,226
19.08.2016, 08:46 #5
А вот так можно (не уверен)
C++
1
2
3
4
5
6
if (sizeof(int)==8) {
 ...
}
else {
 ...
}
И 2 раза компилить не надо...
1
Vort_
189 / 189 / 52
Регистрация: 10.07.2012
Сообщений: 400
19.08.2016, 09:01 #6
Цитата Сообщение от Байт Посмотреть сообщение
А вот так можно (не уверен)
Это если внутри if-а нет ничего специфичного для конкретной архитектуры (к примеру, ассемблерных вставок)

Добавлено через 13 минут
upd. И проверять в таком случае лучше указатель (к примеру, void*).
2
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
19.08.2016, 12:18 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct x86 {};
struct x64 {};
 
typedef x86 current_system_t;
 
void func(x86) {}
void func(x64) {}
void func() { func(current_system_t()); }
 
int main()
{
    func();
}
3
dailydose
LINQ головного мозга.
433 / 173 / 48
Регистрация: 21.07.2016
Сообщений: 895
19.08.2016, 17:45 #8
C++
1
2
3
4
5
6
7
8
#ifdef _WIN64
    if(isWow64())
        // Программа запущена на х86, но скомпилирована на х64
    else
        // Программа запущена на х64, и скомпилирована на х64
#else
    // Программа запущена на х86, и скомпилирована на х86
#endif
Добавлено через 19 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
BOOL isWow64()
{
    BOOL bIsWow64 = FALSE;
 
    typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
 
    LPFN_ISWOW64PROCESS fnIsWow64Process;
    fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
        GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
 
    if (NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(hProc, &bIsWow64))
        {
            //handle error
        }
    }
    return bIsWow64;
}
2
Убежденный
Ушел с форума
Эксперт С++
15793 / 7230 / 1138
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
19.08.2016, 18:40 #9
Еще один, более компактный, вариант реализации:
C++
1
2
3
4
5
6
7
// Только для 32-битного кода. В x64 сразу можно возвращать false.
bool isWow64()
{
    SYSTEM_INFO SysInfo;
    GetNativeSystemInfo(&SysInfo);
    return (PROCESSOR_ARCHITECTURE_AMD64 == SysInfo.wProcessorArchitecture);
}
2
dailydose
LINQ головного мозга.
433 / 173 / 48
Регистрация: 21.07.2016
Сообщений: 895
19.08.2016, 19:29 #10
Убежденный,
Цитата Сообщение от Убежденный Посмотреть сообщение
// Только для 32-битного кода. В x64 сразу можно возвращать false.
C++
1
2
3
4
5
6
7
8
9
bool isWow64()
{
#ifdef _WIN64
    return false;
#endif
    SYSTEM_INFO SysInfo;
    GetNativeSystemInfo(&SysInfo);
    return (PROCESSOR_ARCHITECTURE_AMD64 == SysInfo.wProcessorArchitecture);
}
0
19.08.2016, 19:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2016, 19:29
Привет! Вот еще темы с ответами:

VBS Объединить три разных кода в одном скрипте - VBScript/JScript
Здравствуйте. Есть около 3 скриптов написанных на VBS. Хочу их объединить в один. Есть вопрос-можете привести пример структуры кода? Т.е....

Как сохранить в одном css документе стили для 2 разных таблиц, чтобы можно было их легко подключить? - HTML, CSS
У меня заданы параметры одной таблицы, и они автоматически применяются к обоим. table{ width:75%; border:0px; ...

Есть ли стандартные значения для препроцессора для разных операционных систем? - C (СИ)
Допустим,необходимо сделать код на C более переносимым на другие операционные системы. Существуют ли какие-то стандартные define-ы ,которые...

Удаление всех комментариев в исходнике python кода - Python
Файл input.txt содержит корректный Python код. Написать программу, которая удаляет все комментарии из исходного файла и сохраняет его в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru