Как заменить тип переменной при помощи #define?

177
05 мая 2019, 05:10

На протяжении всей программы необходимо работать с большими данными, но писать вместо int везде long long int крайне неудобно. Слышал про способ с использованием #define. Написал:

#define int long long int

Но выдает ошибку, мол, функция main должна возвращать тип int. Как исправить?

Answer 1

Создайте новый тип, вернее, синоним типа. Что-то вроде

typedef long long int large;

или

using large = long long int;

Ну, или используйте вместо large какое-то иное имя. И Используйте его везде, где нужно. Если потом нужно будет его заменить - это можно будет сделать в месте определения и все.

Заменять глобально все int на long long int - как и вообще любое ключевое слово на что-то иное - решение, чреватое большими неприятностями...

Answer 2

#define крайне не практично, для этого есть typedef

#include <iostream>
typedef long long int64;
typedef unsigned long long uint64;
int main()
{
    int64 a = 9223372036854775807;
    uint64 b = 18446744073709551615;
    std::cout << a << std::endl;
    std::cout << b << std::endl;
}

Но можно воспользоваться ванильными int64_t или uint64_t

#include <iostream>

int main()
{
    int64_t a = 9223372036854775807;
    uint64_t b = 18446744073709551615;
    std::cout << a << std::endl;
    std::cout << b << std::endl;
}
Answer 3

Никак. Никаких осмысленных способов "подменить" ключевое слово языка не существует. И препроцессор вам в этом не поможет. Если код напрямую ссылается на фундаментальные типы, то "подменить" эти типы не получится.

Переписывайте код так, чтобы вместо прямого использования фундаментальных типов он использовал имена-псевдонимы, определенные вами через typedef (или using). В таком варианте вы сможете легко подменять типы так, как вам заблагорассудится.

Правильное использование таких имена-псевдонимов потребует бОльших усилий, чем просто определения typedef, но ничего из ряда вон выходящего там нет.

READ ALSO
В чем ошибка в моем коде?

В чем ошибка в моем коде?

У Вас прототипы функций не соответствуют фактическому определению

130
Помогите настроить Jenkins

Помогите настроить Jenkins

Просьба помочь в настройке jenkins для запуска автотестов Java+Selenium+Cucumber Локально тесты запускаются а вот запустить на Jenkins не получаетсяPom Использую...

153
Ошибка при выводе информации объекта из массива

Ошибка при выводе информации объекта из массива

Судя по всему у вас в массив employers лежит null после работника с именем "b"Посмотрите, как он мог туда попасть

176