Имам математически вектор, чиито размери определям с параметър на шаблона int N
. Проблемът е, че добавям към много параметри в конструктора до N=9, g++ беше ОК с това, но компилаторът на Intel се оплаква от това с предупреждение
предупреждение #175: долен индекс извън диапазона
Да, индексът е извън обхвата, както изглежда, но не, това няма да създаде проблем, защото е написано така:
template <int N, typename T>
Vector<N,T>::Vector(T val0, T val1, T val2, T val3, T val4, T val5, T val6, T val7, T val8, T val9)
{
for(int i = 0; i < N; i++)
{
_values[i] = T();
}
_values[0] = val0;
if(N > 1)
_values[1] = val1;
if(N > 2)
_values[2] = val2;
if(N > 3)
_values[3] = val3;
if(N > 4)
_values[4] = val4;
if(N > 5)
_values[5] = val5;
if(N > 6)
_values[6] = val6;
if(N > 7)
_values[7] = val7;
if(N > 8)
_values[8] = val8;
if(N > 9)
_values[9] = val9;
}
където N е размерността, както споменах, а T е типът данни. Така че компилаторът на Intel не е достатъчно умен, за да осъзнае, че това няма да създаде проблем, тъй като нямам достъп до елемента, освен ако индексът не е валиден.
Въпросът е: Как мога да кажа на компилатора с нещо като команди за макрос/предварителен компилатор, че не трябва да издава предупреждение #175 за тези редове? Забележете, че пълното деактивиране на предупреждение #175 не би било умно, въпреки че все още мога да направя истинска грешка някъде другаде; Просто искам да го деактивирам за този регион на кода.
Благодаря за всички усилия.
N
вместо N параметри? - person Mario   schedule 30.08.2013