Могу ли я указать элементы динамически распределенного массива с помощью макроконстанты, используя new? - PullRequest
0 голосов
/ 26 января 2020

Я знаю, что это не имеет особого смысла, так как одна из целей выбора распределения в куче - предоставить количество элементов переменным объектом, но я могу указать количество элементов динамически распределенного массива с помощью макроса константа?

Например, например:

int* ptr = new int[SIZE];

с макропостоянной SIZE:

#define SIZE 25

Я уже тестировал ее с g ++ и компилятор передал его без ошибки или предупреждения. Но это не означает, что это не вызвало никаких проблем или, возможно, является неопределенным поведением.

  • Могу ли я указать элементы динамически размещаемого массива с макро константой в C ++?

1 Ответ

2 голосов
/ 26 января 2020

Могу ли я указать элементы динамически выделенного массива с макро константой в C ++?

Краткий ответ: Да!

Причина: Макросы, указанные с помощью директива #define вычисляется, а заменяется оцененными значениями на препроцессор , то есть до , с которым фактический компилятор начинает работать код. Таким образом, для вашей (предыдущей) строки #define SIZE 25 код:

int* ptr = new int[SIZE];

для компилятора будет в точности эквивалентным :

int* ptr = new int[25];

На самом деле такое использование макросов довольно распространено - например, в коде, который должен быть собран для разных платформ, где значение SIZE будет варьироваться между такими сборками. Например, можно условно определить SIZE следующим образом:

#ifdef PLATFORM25
#define SIZE 25
#else
#define SIZE 50
#endif

Или можно даже определить макрос SIZE с помощью параметра командной строки компилятора - переключить что-то как (в зависимости от компилятора):

/DSIZE=25
...