Zmienne lokalne a zgodność ze standardem

0

Witam

Mam takie pytanie, dlaczego Code::Blocks wywala ostrzeżenie o braku zgodności ze standardem w takiej sytuacji?

//nie zwracajcie uwagi na niezainicjowane zmienne bo to nie jest sednem sprawy
for(int i = 0; i < n; i++)
{
    if(wszystko_ok)
    {
        for(int i = 0; i < x; i++) // (1) tutaj informacja o zakryciu zmiennej i z pętli zewnętrznej
            ...
        tab[i] = wartosc; // (2) tu się czepia o "i"
    }
    else
        tab[i] = -1; // (3) i tu się czepia o "i"
}

Dokładnie log jest taki:

|1|warning: name lookup of i' changed| |2|warning: matches this i' under ISO standard rules|
|3|warning: matches this `i' under old rules|

Czy taki kod jest faktycznie niezgodny ze standardem C++? Program sie kompiluje i działa zgodnie z oczekiwaniami, jednak wolałbym by jednak był z tym standardem zgodny.

No więc Panowie jak to jest?

0

Myślałem, że to w ogóle się nie skompiluję... a jednak. Tylko ten zapis dla mnie nie ma trochę sensu. Bo powiedzmy, że działasz na tablicach wielowymiarowych... Jak rozpoznasz które i to które???
Nie wiem jak jest z standardem, ale dla mnie sam zapis jest juz z lekka debilny

0

Nie potrafie odpowiedziec na to pytanie, ale... czy Ty lubisz sobie utrudniac zycie ?

0
lukasz93 napisał(a)

No więc Panowie jak to jest?

To nie jest ostrzeżenie o braku zgodności ze standardem, to jest ostrzeżenie o napotkaniu „głupiej” konstrukcji. W linijce (3) niektóre kompilatory (np. starsze wersje MSVC) łapią i z wewnętrznej pętli, zamiast z zewnętrznej.
Po prostu nie rób tak.

0

Jejku po prostu nieświadomie sobie tak napisałem, zobaczyłem w logu jakieś ostrzeżenie i z ciekawości zapytałem.
Zmiana nazwy zmiennej "i" w wewnętrznej pętli nie stanowi żadnego problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1