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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
01.02.2010, 19:20     Чем оличается define от const #1
define A 5;
и
const a = 5;

В первом случае идет замена в предпроцессоре...
а во втором?
и еще слышал что define оч редко стал использоваться и это устаревшая вещь . правда ли это?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
01.02.2010, 19:33     Чем оличается define от const #2
"const a = 5;"
Это бред сумасшедшего, во-первых.
Во-вторых, #define и есть - изменение директивы препроцессора, а второй - задание константы.
Отвечая на последний вопрос - например, матричным принтером пользуются и сейчас. Те же паспорта им и печатаются. Вопрос в том, а надо ли это в той области, в которой планируется применение.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
01.02.2010, 19:40     Чем оличается define от const #3
C++
1
const int a = 5;
syd2010
23 / 43 / 1
Регистрация: 14.12.2009
Сообщений: 273
01.02.2010, 19:42     Чем оличается define от const #4
Количеством букв и всё! difine - 6 букв, а const -5 )))))))))
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
01.02.2010, 19:45     Чем оличается define от const #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 все прозрачно... ведь это обычная переменная, основа основ, что тут сделаешь...
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
01.02.2010, 20:10     Чем оличается define от const #6
Krist_ALL, насчёт Мейерса - всё же скачайте прочтите, вопросов будет меньше и не только по поводу define, ну и забудьте define если на С++ пишите) и вместо define max пишите функцию с таким именем чтобы уж наверняка.
insideone
01.02.2010, 21:34
  #7

Не по теме:

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

Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
01.02.2010, 22:11     Чем оличается define от const #8
Krist_ALL,

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

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

константа отличается как минимум наличием типа и области видимости
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,133
Записей в блоге: 26
01.02.2010, 22:17     Чем оличается define от const #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 - надо стараться обходиться
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
02.02.2010, 11:13     Чем оличается define от const #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 не используется (а это действительно так).
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,133
Записей в блоге: 26
02.02.2010, 12:05     Чем оличается define от const #11
CheshireCat, всё-таки Си-99 это уже не просто Си. А точнее не то, что сейчас принято называть как "чистый Си". А автор темы наврядли имеет возможность работать с Си-99
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
02.02.2010, 12:21     Чем оличается define от const #12
Цитата Сообщение от Evg Посмотреть сообщение
В случае Си нельзя использовать константные объекты для описывания размерности массива
в С99 размерность массива можно задавать вообще без const
C++
1
2
int size = 5;
int array[size];
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
02.02.2010, 12:22     Чем оличается define от const #13
Хм, а что же тогда считать "чистым Си" ? Си времен Очаковских и покоренья Крыма? То есть тьфу, времен Кернигана и Ричи?

А почему бы, собссна, автору темы и не работать с C99 ? Компилятор GCC доступен для свободного скачивания, бесплатен, распространен под кучу платформ....... Да и LCC вроде как существует..... Что остается - религиозное неприятие современных стандартов? Книги, уже устаревшие на пару ледниковых периодов?
Или какие-то внутрифирменные стандарты кодирования, ограничивающие используемый инструментарий? До этого автору, кажется, еще далеко.....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2010, 13:34     Чем оличается define от const
Еще ссылки по теме:

C++ Чем отличаются объявления const char* и const* char
C++ Чем отличаются выражения (const int[]){value} от (const int[]){100}
#define PI or static const float PI C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,133
Записей в блоге: 26
02.02.2010, 13:34     Чем оличается define от const #14
Цитата Сообщение от CheshireCat Посмотреть сообщение
Хм, а что же тогда считать "чистым Си" ? Си времен Очаковских и покоренья Крыма? То есть тьфу, времен Кернигана и Ричи?
То, что называется "ansi C" или "C89" (если я ничего не путаю в терминологии). Этот стандарт поддерживают все вменяемые современные компиляторы

Цитата Сообщение от CheshireCat Посмотреть сообщение
А почему бы, собссна, автору темы и не работать с C99?
Автор - новичок. И работает на том, на чём работает. Насколько я знаю, компиляторы под винду от микрософта и борланда не поддерживают Си99. А если продолжать по той же логике, то почему бы ему сразу на Gnu-C не перейти? И снести свою ось и поставить линух
Yandex
Объявления
02.02.2010, 13:34     Чем оличается define от const
Ответ Создать тему
Опции темы

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