Почему VS требует константы для размера массива, а MinGW - нет? И есть ли способ обойти это? - PullRequest
4 голосов
/ 14 августа 2010

Я перенес некоторый код из Mingw, который я написал, используя code :: blocks, в visual studio и их компилятор, он обнаружил много ошибок, что размеры моего массива должны быть постоянными!Зачем VS нужен постоянный размер, а mingw - нет?

например,

const int len = (strlen(szPath)-20);
char szModiPath[len];

переменная len подчеркнута красным, чтобы сказать, что она является ошибкой, и говорит "ожидаемое постоянное выражение"

Единственный способ, которым я могу обойти это, - это ....

char* szModiPath = new char[len];
delete[] szModiPath;

Должен ли я изменить все на динамическое или есть другой способ в VS?

Ответы [ 3 ]

6 голосов
/ 14 августа 2010

Единственный способ обойти это - ....

Это не «единственный путь».Используйте контейнеры STL.

#include <string>

....
std::string s;
s.resize(len);

или

#include <vector>

....

std::vector<char> buffer(len);

PS Кроме того, я не думаю, что использование венгерской нотации в коде C ++ является хорошей идеей.

5 голосов
/ 14 августа 2010

Зачем VS нужен постоянный размер, а mingw - нет?

Поскольку массивы переменной длины не являются частью C ++, хотя MinGW (g ++) поддерживает их как расширение. Размер массива должен быть постоянным выражением в C ++.

В C ++ всегда рекомендуется использовать std::vector вместо C-style arrays. :)

0 голосов
/ 14 августа 2010

Используйте _alloca для выделения переменных сумм из стека, затем напишите инкапсулирующий класс.Это немного грязно, но вы МОЖЕТЕ написать свои собственные массивы на основе стека переменной длины.

...