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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
#1

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

29.07.2013, 13:37. Просмотров 1657. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что лучше использовать, #define или typedef? (C++):

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

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

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

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

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

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

14
Kukurudza
105 / 86 / 6
Регистрация: 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 / 2
Регистрация: 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 / 6
Регистрация: 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
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
29.07.2013, 14:04 #6
Kukurudza, да ну.
C++
1
2
3
#define ui 666
int ui = 9; // Заругает
int gui = 9; // Все хорошо
В gui не будет подмены части имени.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.07.2013, 14:04 #7
Цитата Сообщение от BigLow Посмотреть сообщение
Там что же использовать?
С++11
C++
1
using ui = unsigned int;
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:06 #8
SatanaXIII, угумс, ступил. пост №5
0
Убежденный
Системный программист
Эксперт С++
15637 / 7147 / 1131
Регистрация: 02.05.2013
Сообщений: 11,586
Записей в блоге: 1
Завершенные тесты: 1
29.07.2013, 14:10 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от BigLow Посмотреть сообщение
Программа в любом случае будет прекрасно работать. Там что же использовать?
Для данного кода - все равно. Он минимален, не имеет зависимостей, и изменения,
сделанные в нем, локальны, то есть, не распостраняются в другие компоненты.
В серъезном проекте лучше воздержаться от define, так как это очень грубое и
плохоуправляемое средство. Включите один раз define в заголовочный файл - и
он "заразит" все зависимые исходники, не обращая внимания на неймспейсы и
прочие области видимости. typedef в этом плане более "деликатен".
3
Croessmah
Эксперт CЭксперт С++
13427 / 7582 / 856
Регистрация: 27.09.2012
Сообщений: 18,674
Записей в блоге: 3
Завершенные тесты: 1
29.07.2013, 14:33 #10
Стоит понять всего одну вещь - с define работает препроцессор, а typedef обрабатывается уже при компиляции.

К тому же есть undef, если что
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
29.07.2013, 14:38 #11
Croessmah не очень удобно андеф эзать
0
Croessmah
Эксперт CЭксперт С++
13427 / 7582 / 856
Регистрация: 27.09.2012
Сообщений: 18,674
Записей в блоге: 3
Завершенные тесты: 1
29.07.2013, 14:47 #12
Так же вот такое различие очень даже существенное:
C++
1
2
3
typedef int mytype;
mytype obj;
obj.~mytype()
Так что typedef - это не просто тупая замена имени
2
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.07.2013, 14:56 #13
Цитата Сообщение от Croessmah Посмотреть сообщение
obj.~mytype()
Забавно. Но какой от этого прок?
0
Croessmah
Эксперт CЭксперт С++
13427 / 7582 / 856
Регистрация: 27.09.2012
Сообщений: 18,674
Записей в блоге: 3
Завершенные тесты: 1
29.07.2013, 15:04 #14
Tulosba, когда не известен тип объекта и неизвестно есть ли у этого типа деструктор.
Например, в шаблонах тоже самое - не важно есть ли у типа деструктор - вы просто пишите один код для всех типов.
0
rangerx
1933 / 1542 / 141
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 17:24
Привет! Вот еще темы с ответами:

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

Что лучше использовать? Шаг переменной dx - C++
Есть описание функции. вот как я её сделал: if (abs(x) &gt;= 10){ printf(&quot;Y(x)=%1.2f\n\n&quot;, y = x*x); } else {...

Пытаться ли использовать Windows forms с C++? Или лучше иди в C#? - C++
Знаю, что много таких тем уже было т .д., но хочу конкретно сформулировать вопрос и получить ответ. Изучил с++ и теперь хочу писать...

Что лучше использовать для низкоуровневого программирования? - C++
Здравствуйте, задался я вопросом, а что лучше использовать для низкоуровневого программирования (работы со звуком и буфером), + еще...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
29.07.2013, 17:24
Ответ Создать тему
Опции темы

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