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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

Чем оличается define от const - C++

01.02.2010, 19:20. Просмотров 2560. Ответов 13
Метки нет (Все метки)

define A 5;
и
const a = 5;

В первом случае идет замена в предпроцессоре...
а во втором?
и еще слышал что define оч редко стал использоваться и это устаревшая вещь . правда ли это?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2010, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чем оличается define от const (C++):

Const #define - C++
{ const int HOLFSDsize= 2;//#define HOLFSDsize 2 // m-угольник void HOLFSD() { int i, n, l; // объявляем...

Различия между #define и const - C++
Собственно вопрос: в чем различия и что лучше использовать? Хотелось бы получить развернутый ответ со всеми "pros and cons".

#define PI or static const float PI - C++
Что лучьше обьясните? #define PI 3,14159265 или static const float PI=3,14159265;

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения - C++
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start->next;} return c; } Функция...

int const и const int в чем разница этих записей - C++
Попалась мне тут программа для выборочно сортировки, с ней все в принципе ясно, но я в ней встретил записи, которые раньше не встречал,...

Чем отличаются выражения (const int[]){value} от (const int[]){100} - C++
(const int){22} //Приведение к массиву и инициализация его значениями 22 от (const int){i} //Приведение к массиву и инициализация его...

13
Darky
Быдлокодер
508 / 295 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
01.02.2010, 19:33 #2
"const a = 5;"
Это бред сумасшедшего, во-первых.
Во-вторых, #define и есть - изменение директивы препроцессора, а второй - задание константы.
Отвечая на последний вопрос - например, матричным принтером пользуются и сейчас. Те же паспорта им и печатаются. Вопрос в том, а надо ли это в той области, в которой планируется применение.
1
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
01.02.2010, 19:40 #3
C++
1
const int a = 5;
1
syd2010
23 / 37 / 1
Регистрация: 14.12.2009
Сообщений: 273
01.02.2010, 19:42 #4
Количеством букв и всё! difine - 6 букв, а const -5 )))))))))
1
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,487
01.02.2010, 19:45 #5
C++
1
2
3
4
const int a = 5; // переменная к которой можно обратиться по имени
 
#define A 5
// сообщение компилятору "встретишь А замени его на 5"
В книге "Эффективное использование С++" (Скотт Майерс) первый совет - "Предпочитайте const и inline использованию #define.
Если кратко то допустим
C++
1
#define max(a, b) ((a) > (b) ? (a) : (b))
может серьёзно подвести если пользоваться так
C++
1
max(++a, b);
Если бы мы использовали функцию то мы бы сравнили a+1 и b
а define выполнит подобное:
C++
1
(++a) > (b) ? (++a) : (b)
Получится что a у нас возрастет хотя мы этого не хотели.

В любом случае #define это лишь инструмент и его использование зависит от обстоятельств, однако используя его вы должны понимать как оно действует и представлять как им нельзя пользоваться.
В случае с const все прозрачно... ведь это обычная переменная, основа основ, что тут сделаешь...
1
Андрейка
421 / 225 / 27
Регистрация: 25.03.2009
Сообщений: 744
01.02.2010, 20:10 #6
Krist_ALL, насчёт Мейерса - всё же скачайте прочтите, вопросов будет меньше и не только по поводу define, ну и забудьте define если на С++ пишите) и вместо define max пишите функцию с таким именем чтобы уж наверняка.
0
insideone
01.02.2010, 21:34
  #7

Не по теме:

Хех, если уж советовать... посоветую Джефф Элджер "С++ for real programmers"("C++ : библиотека программиста"), стиль изложения больше понравился чем у Майерса, да и все как то более последовательно. Дает очень много!

0
Rififi
2360 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
01.02.2010, 22:11 #8
Krist_ALL,

Чем оличается define от const

Цитата Сообщение от syd2010 Посмотреть сообщение
Количеством букв и всё! difine - 6 букв, а const -5 )))))))))
.. подписи не хватает: "Здесь был Бред" :lol:

константа отличается как минимум наличием типа и области видимости
0
Evg
Эксперт CАвтор FAQ
18697 / 6663 / 469
Регистрация: 30.03.2009
Сообщений: 18,656
Записей в блоге: 29
01.02.2010, 22:17 #9
Цитата Сообщение от Krist_ALL Посмотреть сообщение
define A 5;
и
const a = 5;

В первом случае идет замена в предпроцессоре...
а во втором?
и еще слышал что define оч редко стал использоваться и это устаревшая вещь . правда ли это?
В случае Си нельзя использовать константные объекты для описывания размерности массива. Т.е. на Си можно написать только так:

C
1
2
#define A 5
int x[A];
а вот на Си++ можно (и нужно) писать так:

C++
1
2
const int A = 5;
int x[A];
По поводу использования - можешь почитать тут
Если есть простая возможность обойтись без define - надо стараться обходиться
1
CheshireCat
Эксперт С++
2899 / 1248 / 78
Регистрация: 27.05.2008
Сообщений: 3,414
02.02.2010, 11:13 #10
Цитата Сообщение от Evg Посмотреть сообщение
В случае Си нельзя использовать константные объекты для описывания размерности массива.
Это не совсем так.
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
const int size = 5;
 
int main()
{
    int array[size];
 
    printf("Hello world!\n");
    return 0;
}
GCC с опциями --std=c99, -pedantic и -pedantic-errors (код должен точно соответствовать Стандарту C99, любое отклонение от Стандарта трактовать как ошибку) компилирует с одним предупреждением - переменная array не используется (а это действительно так).
0
Evg
Эксперт CАвтор FAQ
18697 / 6663 / 469
Регистрация: 30.03.2009
Сообщений: 18,656
Записей в блоге: 29
02.02.2010, 12:05 #11
CheshireCat, всё-таки Си-99 это уже не просто Си. А точнее не то, что сейчас принято называть как "чистый Си". А автор темы наврядли имеет возможность работать с Си-99
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
02.02.2010, 12:21 #12
Цитата Сообщение от Evg Посмотреть сообщение
В случае Си нельзя использовать константные объекты для описывания размерности массива
в С99 размерность массива можно задавать вообще без const
C++
1
2
int size = 5;
int array[size];
0
CheshireCat
Эксперт С++
2899 / 1248 / 78
Регистрация: 27.05.2008
Сообщений: 3,414
02.02.2010, 12:22 #13
Хм, а что же тогда считать "чистым Си" ? Си времен Очаковских и покоренья Крыма? То есть тьфу, времен Кернигана и Ричи?

А почему бы, собссна, автору темы и не работать с C99 ? Компилятор GCC доступен для свободного скачивания, бесплатен, распространен под кучу платформ....... Да и LCC вроде как существует..... Что остается - религиозное неприятие современных стандартов? Книги, уже устаревшие на пару ледниковых периодов?
Или какие-то внутрифирменные стандарты кодирования, ограничивающие используемый инструментарий? До этого автору, кажется, еще далеко.....
0
Evg
Эксперт CАвтор FAQ
18697 / 6663 / 469
Регистрация: 30.03.2009
Сообщений: 18,656
Записей в блоге: 29
02.02.2010, 13:34 #14
Цитата Сообщение от CheshireCat Посмотреть сообщение
Хм, а что же тогда считать "чистым Си" ? Си времен Очаковских и покоренья Крыма? То есть тьфу, времен Кернигана и Ричи?
То, что называется "ansi C" или "C89" (если я ничего не путаю в терминологии). Этот стандарт поддерживают все вменяемые современные компиляторы

Цитата Сообщение от CheshireCat Посмотреть сообщение
А почему бы, собссна, автору темы и не работать с C99?
Автор - новичок. И работает на том, на чём работает. Насколько я знаю, компиляторы под винду от микрософта и борланда не поддерживают Си99. А если продолжать по той же логике, то почему бы ему сразу на Gnu-C не перейти? И снести свою ось и поставить линух
1
02.02.2010, 13:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2010, 13:34
Привет! Вот еще темы с ответами:

Чем отличаются объявления const char* и const* char - C++
Прошу объяснить мне, чем отличаются объявления const char* и const* char и как объявить: указатель на константный массив символов, ...

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

Чем же макрос define так плох? - C++
После прочтения про директиву препроцессора define возник вопрос по поводу применения define, как функции: #define QQ (q) (q^q) Можно...

Объясните, в чем суть директив #ifndef/#define/#endif - C++
Не понял в чем суть директив: #ifndef .. #define.. #endifОбъясните пожалуйста..это как - то связано с хедерами, но вот как ??


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

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

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