Jak naprawić błąd GCC "for loop initial declaration used outside C99 mode"?

Próbuję rozwiązać problem 3n+1 i mam pętlę for, która wygląda tak:

for(int i = low; i <= high; ++i)
        {
                res = runalg(i);
                if (res > highestres)
                {
                        highestres = res;
                }

        }

Niestety dostaję ten błąd, gdy próbuję skompilować z GCC:

3np1.c: 15: error:' for ' loop initial deklaracja używana poza trybem C99

Nie wiem co to jest tryb C99. Jakieś pomysły?
 108
Author: Sina, 2008-08-24

10 answers

Starałbym się zadeklarować i poza pętlą!

Powodzenia w rozwiązywaniu 3N+1: -)

Oto przykład:

#include <stdio.h>

int main() {

   int i;

   /* for loop execution */
   for (i = 10; i < 20; i++) {
       printf("i: %d\n", i);
   }   

   return 0;
}

Więcej informacji na temat pętli for W C tutaj .

 135
Author: OysterD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 07:20:39

Istnieje przełącznik kompilatora, który włącza tryb C99 , który między innymi umożliwia deklarację zmiennej wewnątrz pętli for. Aby go włączyć, użyj przełącznika kompilatora -std=c99

Lub, jak mówi @OysterD, zadeklaruj zmienną poza pętlą.

 109
Author: JamesSugrue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-15 09:39:45

Aby przełączyć się na tryb C99 w CodeBlocks , wykonaj następujące kroki:

Kliknij Project / Build options, Następnie w zakładce Compiler Settings Wybierz subtab Other options i umieść -std=c99 w obszarze tekstowym, a następnie kliknij Ok.

Spowoduje to włączenie trybu C99 dla Twojego kompilatora.

Mam nadzieję, że to komuś pomoże!
 20
Author: akelec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-02 12:17:30

Też mam ten błąd.

for (int i=0;i<10;i++) { ..

Nie obowiązuje w standardzie C89/C90. Jak mówi Osterd, musisz zrobić:

int i;
for (i=0;i<10;i++) { ..

Twój oryginalny kod jest dozwolony w C99 i późniejszych standardach języka C.

 14
Author: Blorgbeard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-13 01:25:37

@Blorgbeard :

Nowe funkcje w C99

  • Funkcje inline
  • deklaracja zmiennej nie ogranicza się już do zakresu Pliku ani do początku instrukcji złożonej
  • kilka nowych typów danych, w tym long long int, opcjonalne rozszerzone typy całkowite, jawny typ danych boolean i typ złożony do reprezentowania liczb złożonych
  • tablice o zmiennej długości
  • wsparcie dla komentarzy jednolinijkowych zaczynających się od//, jak w BCPL lub C++
  • nowe funkcje biblioteczne, takie jak snprintf
  • nowe pliki nagłówkowe, takie jak stdbool.h i intypy.h
  • Typ-ogólne funkcje matematyczne (tgmath.h)
  • Ulepszone wsparcie dla zmiennoprzecinkowego IEEE
  • wyznaczone inicjalizatory
  • literały złożone
  • wsparcie dla makr zmiennych (makra zmiennej arity)
  • ogranicz kwalifikację, aby umożliwić bardziej agresywny kod optymalizacja

Http://en.wikipedia.org/wiki/C99

Wycieczka po C99

 13
Author: Imran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:18

Jeśli skompilujesz w C Zmień

for (int i=0;i<10;i++) { ..

Do

int i;
for (i=0;i<10;i++) { ..

Można również skompilować za pomocą zestawu przełączników C99. Put-std = c99 w linii kompilacji:

gcc -std=c99 foo.c -o foo

REF: http://cplusplus.syntaxerrors.info/index.php?title='for'_loop_initial_declaration_used_outside_c99_mode

 5
Author: Roberto Cuadros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-08 05:25:12

Dla Qt-creator: dodaj kolejne wiersze do pliku*. pro...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99
 0
Author: demiurg_spb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-29 14:27:19

Miałem ten sam problem i działa Wystarczy zadeklarować i poza pętlą:

int i;

for(i = low; i <= high; ++i)

{
        res = runalg(i);
        if (res > highestres)
        {
                highestres = res;
        }

}
 0
Author: Jihene Stambouli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-12 23:32:33

Dla każdego, kto próbuje skompilować kod z zewnętrznego źródła, które używa automatycznego narzędzia do budowania, takiego jak Make , Aby uniknąć konieczności śledzenia jawnych wywołań kompilacji gcc, możesz ustawić zmienną środowiskową. Wprowadź w wierszu polecenia lub włóż .bashrc (or .bash_profile na Mac):

export CFLAGS="-std=c99"

Zauważ, że podobne rozwiązanie ma zastosowanie, jeśli napotkasz podobny scenariusz z kompilacją C++, która wymaga C++ 11, możesz użyć:

export CXXFLAGS="-std=c++11"
 0
Author: Mink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-27 15:37:50

Wystarczy skompilować w trybie C++. Nie musisz używać klas, aby używać C++. W zasadzie używam C++ jako "ładniejszego C":)

Prawie nigdy nie używam klas i nigdy nie używam metody overiding.

 -2
Author: boytheo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-21 13:52:50