Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
BigLow
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
#1

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

29.07.2013, 13:37. Просмотров 1862. Ответов 14
Метки нет (Все метки)

Вот привожу пример программы. Здесь можно и с #define сделать и с typedef.
Программа в любом случае будет прекрасно работать. Там что же использовать?

C++
1
2
3
4
5
6
7
8
//#define ui unsigned int
typedef unsigned int ui;
 
 
int main()
{
    ui n = 5;
}

http://www.cyberforum.ru/cpp-beginners/thread11336.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2013, 13:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что лучше использовать, #define или typedef? (C++):

Что лучше использовать: string или char[]?
Ребят, я только начинаю учить c++. Подскажите что лучше использовать string или...

Что лучше использовать vector или массив
Что лучше использовать и когда vector или массив ?

Что лучше использовать: псевдокод или блок-схемы?
Я вроде в какой то книжке читал, что лучше использовать псевдокод. Так ли это?

Что лучше использовать, наследование или дружественные классы?
Подскажите, пожалуйста что, лучше использовать наследования или дружественные...

Что лучше использовать библиотеку <vector> или динамический массив
Что лучше использовать библиотеку &lt;vector&gt; или динамический массив

14
Kukurudza
105 / 86 / 13
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 13:43 #2
C++
1
2
3
4
5
#define unsigned int ui
 
//  где то в коде, возможно это имя функции или переменной
void gui(/*че то чето*/)
//  и дальше код
удачной компиляции...
0
Dani
29.07.2013, 13:48
  #3

Не по теме:

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

1
BigLow
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
29.07.2013, 13:55  [ТС] #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;
}
1
Kukurudza
105 / 86 / 13
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:03 #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;
}
смысл то вот в чем. задефайнили вы где то в глубине проекта какую нить фигню, ну и естественно через месяц разработки забыли, или вообще ваш партнер об этом дефайне слыхать не слышал, ибо репозиторий не разбирал.
ну и собственно через месяц вы можете напороться на такую фигню.
1
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
29.07.2013, 14:04 #6
Kukurudza, да ну.
C++
1
2
3
#define ui 666
int ui = 9; // Заругает
int gui = 9; // Все хорошо
В gui не будет подмены части имени.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
29.07.2013, 14:04 #7
Цитата Сообщение от BigLow Посмотреть сообщение
Там что же использовать?
С++11
C++
1
using ui = unsigned int;
0
Kukurudza
105 / 86 / 13
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:06 #8
SatanaXIII, угумс, ступил. пост №5
0
Убежденный
Ушел с форума
Эксперт С++
15941 / 7252 / 1176
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
29.07.2013, 14:10 #9
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от BigLow Посмотреть сообщение
Программа в любом случае будет прекрасно работать. Там что же использовать?
Для данного кода - все равно. Он минимален, не имеет зависимостей, и изменения,
сделанные в нем, локальны, то есть, не распостраняются в другие компоненты.
В серъезном проекте лучше воздержаться от define, так как это очень грубое и
плохоуправляемое средство. Включите один раз define в заголовочный файл - и
он "заразит" все зависимые исходники, не обращая внимания на неймспейсы и
прочие области видимости. typedef в этом плане более "деликатен".
3
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
29.07.2013, 14:33 #10
Стоит понять всего одну вещь - с define работает препроцессор, а typedef обрабатывается уже при компиляции.

К тому же есть undef, если что
0
Kukurudza
105 / 86 / 13
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:38 #11
Croessmah не очень удобно андеф эзать
0
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
29.07.2013, 14:47 #12
Так же вот такое различие очень даже существенное:
C++
1
2
3
typedef int mytype;
mytype obj;
obj.~mytype()
Так что typedef - это не просто тупая замена имени
2
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
29.07.2013, 14:56 #13
Цитата Сообщение от Croessmah Посмотреть сообщение
obj.~mytype()
Забавно. Но какой от этого прок?
0
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
29.07.2013, 15:04 #14
Tulosba, когда не известен тип объекта и неизвестно есть ли у этого типа деструктор.
Например, в шаблонах тоже самое - не важно есть ли у типа деструктор - вы просто пишите один код для всех типов.
0
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
29.07.2013, 17:24 #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';
}
0
29.07.2013, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 17:24
Привет! Вот еще темы с решениями:

Что лучше использовать для строк? Массив char или же string?
Только не давно начал изучать с++, подскажите что лучше использовать для строк?...

Что лучше использовать для работы со строками класс wstring или wchar_t напрямую?
Всем привет! Мучает меня один вопрос: как грамотнее и безопаснее работать со...

Проблема с define и typedef
Объясните мне пожалуйста, товарищи... В чем смысл объявлять такие дурацкие...

Что лучше использовать? Шаг переменной dx
Есть описание функции. вот как я её сделал: if (abs(x) &gt;= 10){...


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

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

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