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

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

Войти
Регистрация
Восстановить пароль
 
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
#1

Много макросов - это плохо? - C++

07.04.2013, 12:24. Просмотров 352. Ответов 5
Метки нет (Все метки)

Здравствуйте. Скажите, нормально-ли, что в данном примере я использую большое количество макросов?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Field {
 
    #define HEIGHT 16
    #define WIDTH 16
 
    #define WEAPON 1
    #define RIVER 2
    #define HOME 3
    #define FOOD 4
    #define NOTHING 5
 
    #define NUMBER_OF_ELEMENTS 5
 
  public:
 
      static int fieldArray [HEIGHT][WIDTH];
 
      // Элементы для инициализации массива fieldArray
      int itemsOfTheFieldInitialization(int indexOfArray) {
        int itemsOfTheField[NUMBER_OF_ELEMENTS] = { WEAPON, RIVER, HOME, FOOD, NOTHING };
        return itemsOfTheField[indexOfArray];
      }
 
      // Инициализация массива fieldArray
      void fieldArrayInitialization() {     
        for(int i = 0; i < HEIGHT; i++)
            for(int j = 0; j < WIDTH; j++)          
                fieldArray[i][j] = itemsOfTheFieldInitialization(rand() % NUMBER_OF_ELEMENTS);
      }
 
      // Вывод на экран массива fieldArray
      void displayFieldArray() {
        for(int i = 0; i < HEIGHT; i++)
            for(int j = 0; j < WIDTH; j++) {
                cout << fieldArray[i][j] << " ";
            }
            cout << endl;
      }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 12:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Много макросов - это плохо? (C++):

Множественное наследование - так ли это плохо? - C++
Вопрос не в том, что это такое и пр. С момента изучения Си++ во всех книжках все авторы (кроме самого Страуструпа) пишут, что множественное...

С && C++ - это плохо? - C++
Большинство программистов говорят о том что С# и C++ мешать в одном коде не хорошо. Но что в этом такого плохого?

как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке c=a+b,c; - C++
как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке...

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? - C++
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Использование макросов - C++
Всем известно что в C подобных языках могут использоваться такие директивы компилятора как #define или макрос полное...

[дизайн и эволюция] перегрузка макросов - C++
Часть 0. Вместо предисловия. всем привет. недавно, для одной из моих задач, мне потребовалось иметь возможность перегрузить...

5
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.04.2013, 12:31 #2
Нет. Используйте константы в данном случае.
1
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
07.04.2013, 12:35  [ТС] #3
А вообще когда лучше использовать макросы, а когда константы?
0
zss
Модератор
Эксперт С++
6686 / 6248 / 2083
Регистрация: 18.12.2011
Сообщений: 16,319
Завершенные тесты: 1
07.04.2013, 12:42 #4
Недостаток макросов в том, что они тупо вставляют, то что написано в текст.
Поэтому могут возникнуть непредвиденные ошибки, т.к. получается текст не тот,
который ожидался.
В этом отношении константы лучше. Но под них выделяется память.
Еще один способ задания констант (который очень подходит для Вашего случая) оператор
C++
1
enum  {WEAPON=1,RIVER,HOME,FOOD,NOTHING};
Под такие перечисления память дополнительно не выделяется.
1
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
07.04.2013, 12:44  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
Еще один способ задания констант (который очень подходит для Вашего случая) оператор
Код C++
1
enum *{WEAPON=1,RIVER,HOME,FOOD,NOTHING};
О, точно, спасибо
0
Avazart
Эксперт С++
7459 / 5505 / 315
Регистрация: 10.12.2010
Сообщений: 24,559
Записей в блоге: 17
07.04.2013, 13:26 #6
Цитата Сообщение от dimkaok Посмотреть сообщение
А вообще когда лучше использовать макросы, а когда константы?
Использовать всегда где можно константы и др средства С++, и стараться не использовать макросы.
2
07.04.2013, 13:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 13:26
Привет! Вот еще темы с ответами:

Факториал! Для кого-то это легко, а кто-то вообще это не знает! - C++
Написать определение функции факториал которая возвращает факториал от полученного в качестве аргумента числа. Реализовать на С++ и...

this это адресс объекта, а *this это сам объект. я всё правельно понял? - C++
this это адресс объекта, а *this это сам объект. я всё правельно понял?

Связанный список. Как это делается и зачем это нужно? - C++
Добрый день. Уже который день не могу понять эту тему. Гуглил, но понятнее от этого не стало. Кто-нибудь знает где найти понятный мануал?

нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ? - C++
Здравствуйте.У меня возникла проблема. Помогите пожалуйста!Модуль в понедельник , про таблицы ничего не рассказывали , а преподаватель...


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

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

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