Форум программистов, компьютерный форум CyberForum.ru

Что лучше использовать, #define или typedef? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
29.07.2013, 13:37     Что лучше использовать, #define или typedef? #1
Вот привожу пример программы. Здесь можно и с #define сделать и с typedef.
Программа в любом случае будет прекрасно работать. Там что же использовать?

C++
1
2
3
4
5
6
7
8
//#define ui unsigned int
typedef unsigned int ui;
 
 
int main()
{
    ui n = 5;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 13:43     Что лучше использовать, #define или typedef? #2
C++
1
2
3
4
5
#define unsigned int ui
 
//  где то в коде, возможно это имя функции или переменной
void gui(/*че то чето*/)
//  и дальше код
удачной компиляции...
Dani
29.07.2013, 13:48
  #3

Не по теме:

Kukurudza, неет, удачной компиляции - это #define true false

BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
29.07.2013, 13:55  [ТС]     Что лучше использовать, #define или typedef? #4
Цитата Сообщение от Kukurudza Посмотреть сообщение
удачной компиляции...
все компилируется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
#define ui unsigned int
 
void gui()
{
    std::cout << "gui";
}
 
int main()
{
    gui();
 
    system("pause");
    return 0;
}
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:03     Что лучше использовать, #define или typedef? #5
блин неудачный пример привел в начале. вот такой попробуйте скомпилить
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
#define ui unsigned int
 
int main() {
    int ui = 6;
 
    system("pause");
    return 0;
}
смысл то вот в чем. задефайнили вы где то в глубине проекта какую нить фигню, ну и естественно через месяц разработки забыли, или вообще ваш партнер об этом дефайне слыхать не слышал, ибо репозиторий не разбирал.
ну и собственно через месяц вы можете напороться на такую фигню.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
29.07.2013, 14:04     Что лучше использовать, #define или typedef? #6
Kukurudza, да ну.
C++
1
2
3
#define ui 666
int ui = 9; // Заругает
int gui = 9; // Все хорошо
В gui не будет подмены части имени.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.07.2013, 14:04     Что лучше использовать, #define или typedef? #7
Цитата Сообщение от BigLow Посмотреть сообщение
Там что же использовать?
С++11
C++
1
using ui = unsigned int;
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:06     Что лучше использовать, #define или typedef? #8
SatanaXIII, угумс, ступил. пост №5
Убежденный
Системный программист
 Аватар для Убежденный
14213 / 6228 / 988
Регистрация: 02.05.2013
Сообщений: 10,385
Завершенные тесты: 1
29.07.2013, 14:10     Что лучше использовать, #define или typedef? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от BigLow Посмотреть сообщение
Программа в любом случае будет прекрасно работать. Там что же использовать?
Для данного кода - все равно. Он минимален, не имеет зависимостей, и изменения,
сделанные в нем, локальны, то есть, не распостраняются в другие компоненты.
В серъезном проекте лучше воздержаться от define, так как это очень грубое и
плохоуправляемое средство. Включите один раз define в заголовочный файл - и
он "заразит" все зависимые исходники, не обращая внимания на неймспейсы и
прочие области видимости. typedef в этом плане более "деликатен".
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 14:33     Что лучше использовать, #define или typedef? #10
Стоит понять всего одну вещь - с define работает препроцессор, а typedef обрабатывается уже при компиляции.

К тому же есть undef, если что
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:38     Что лучше использовать, #define или typedef? #11
Croessmah не очень удобно андеф эзать
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 14:47     Что лучше использовать, #define или typedef? #12
Так же вот такое различие очень даже существенное:
C++
1
2
3
typedef int mytype;
mytype obj;
obj.~mytype()
Так что typedef - это не просто тупая замена имени
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.07.2013, 14:56     Что лучше использовать, #define или typedef? #13
Цитата Сообщение от Croessmah Посмотреть сообщение
obj.~mytype()
Забавно. Но какой от этого прок?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 15:04     Что лучше использовать, #define или typedef? #14
Tulosba, когда не известен тип объекта и неизвестно есть ли у этого типа деструктор.
Например, в шаблонах тоже самое - не важно есть ли у типа деструктор - вы просто пишите один код для всех типов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 17:24     Что лучше использовать, #define или typedef?
Еще ссылки по теме:

C++ Пытаться ли использовать Windows forms с C++? Или лучше иди в C#?
C++ Что лучше использовать для работы со строками класс wstring или wchar_t напрямую?
Что лучше использовать? Шаг переменной dx C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
29.07.2013, 17:24     Что лучше использовать, #define или typedef? #15
Цитата Сообщение от BigLow Посмотреть сообщение
Здесь можно и с #define сделать и с typedef.
Программа в любом случае будет прекрасно работать.
#define - это #define, typedef - это typedef typedef в отличии от #define не занимается простой подстановкой текста, в этом достаточно легко убедиться на примере указателей и ссылок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
#define std_string_ref_t std::string&
//typedef std::string& std_string_ref_t;
 
int main()
{
    std::string s = "text";
    std_string_ref_t r1 = s, r2 = s;
    s = "TEXT";
    std::cout << "r1 = " << r1 << ", r2 = " << r2 << '\n';
}
Yandex
Объявления
29.07.2013, 17:24     Что лучше использовать, #define или typedef?
Ответ Создать тему
Опции темы

Текущее время: 05:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru