У меня есть цикл в моем C++ / код OpenMP, который похож на это:
#pragma omp parallel for
for(unsigned int i=0; i
Когда я компилирую его (с Visual Studio 2005), я получаю следующую ошибку:
error C3016: 'i' : index variable in OpenMP 'for' statement must have signed integral type
Я понимаю, что ошибка происходит потому что i
не подписано вместо со знаком, и изменение i
быть подписанным удаленный эта ошибка. То, что я хочу знать, - то, почему это - ошибка? Почему неподписанные индексные переменные не позволяются? Рассмотрение страницы MSDN для этой ошибки не дает мне ключа к разгадке.
В соответствии со спецификацией OpenMP 2.0 C / C ++ API (pdf), раздел 2.4.1, это одно из ограничений цикла for
. Для этого не указывается причина, но я подозреваю, что это просто для упрощения предположений, которые должны сделать код и компилятор, поскольку есть специальный код, гарантирующий, что диапазон не превышает максимальное значение типа.
OpenMP 3.0, очевидно, допускает и беззнаковые типы, но я еще не видел этого в действии.