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

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

29.07.2013, 13:37. Просмотров 1960. Ответов 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;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2013, 13:37
Ответы с готовыми решениями:

Что лучше использовать, матрицу или списки?
Задание: Дан граф, определить является ли он связным. Подскажите пожалуйста,...

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

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

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

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

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
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
29.07.2013, 14:04 6
Kukurudza, да ну.
C++
1
2
3
#define ui 666
int ui = 9; // Заругает
int gui = 9; // Все хорошо
В gui не будет подмены части имени.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 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
Убежденный
Ушел с форума
Эксперт С++
15998 / 7269 / 1180
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
29.07.2013, 14:10 9
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от BigLow Посмотреть сообщение
Программа в любом случае будет прекрасно работать. Там что же использовать?
Для данного кода - все равно. Он минимален, не имеет зависимостей, и изменения,
сделанные в нем, локальны, то есть, не распостраняются в другие компоненты.
В серъезном проекте лучше воздержаться от define, так как это очень грубое и
плохоуправляемое средство. Включите один раз define в заголовочный файл - и
он "заразит" все зависимые исходники, не обращая внимания на неймспейсы и
прочие области видимости. typedef в этом плане более "деликатен".
3
Croessmah
++Ͻ
14625 / 8376 / 1580
Регистрация: 27.09.2012
Сообщений: 20,579
Записей в блоге: 2
Завершенные тесты: 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
++Ͻ
14625 / 8376 / 1580
Регистрация: 27.09.2012
Сообщений: 20,579
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 14:47 12
Так же вот такое различие очень даже существенное:
C++
1
2
3
typedef int mytype;
mytype obj;
obj.~mytype()
Так что typedef - это не просто тупая замена имени
2
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.07.2013, 14:56 13
Цитата Сообщение от Croessmah Посмотреть сообщение
obj.~mytype()
Забавно. Но какой от этого прок?
0
Croessmah
++Ͻ
14625 / 8376 / 1580
Регистрация: 27.09.2012
Сообщений: 20,579
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 15:04 14
Tulosba, когда не известен тип объекта и неизвестно есть ли у этого типа деструктор.
Например, в шаблонах тоже самое - не важно есть ли у типа деструктор - вы просто пишите один код для всех типов.
0
rangerx
1942 / 1551 / 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

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

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

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


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

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

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