Почему неподписанные индексные переменные OpenMP не позволены?

У меня есть цикл в моем 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 для этой ошибки не дает мне ключа к разгадке.

20
задан Moe 12 May 2010 в 16:08
поделиться

1 ответ

В соответствии со спецификацией OpenMP 2.0 C / C ++ API (pdf), раздел 2.4.1, это одно из ограничений цикла for . Для этого не указывается причина, но я подозреваю, что это просто для упрощения предположений, которые должны сделать код и компилятор, поскольку есть специальный код, гарантирующий, что диапазон не превышает максимальное значение типа.

OpenMP 3.0, очевидно, допускает и беззнаковые типы, но я еще не видел этого в действии.

14
ответ дан 30 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: