For-Schleife sagt expression syntax-Fehler beim initialisieren integer in der Schleife
Beim Programmieren bin ich gekommen, um eine ungewöhnliche Fehler. Wenn ich die Initialisierung einer integer in eine Schleife, manchmal heißt es, dass der Ausdruck nicht gültig ist, aber manchmal nimmt es Sie an.
Das ist mein code, die Fehler gibt:
int pow(int x,int n);
int main()
{
int x,n,result;
printf("Enter a number:\n");
scanf("%d",&x);
printf("Enter its power:\n");
scanf("%d",&n);
result=pow(x,n);
printf("Result is %d\n",result);
getch();
return 0;
}
int pow(int x,int n)
{
for(int i=1;i<n;i++) //<-- here it says that declaration syntax error
x=x*i;
return x;
}
Während, wenn ich es wie folgt :
int pow(int x,int n)
{
int i;
for(i=1;i<n;i++)
x=x*i;
return x;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
C89 und frühere Versionen unterstützen nur die Erklärung Aussagen an den Kopf der einen block (IOW, ist die einzige Sache, die angezeigt werden können zwischen einer öffnung
{
- und eine Erklärung ist, eine andere Erklärung):Mit C99 -, deklarations-Anweisungen können so ziemlich überall, einschließlich der Kontrolle Ausdrücken (mit der Einschränkung, dass so etwas deklariert werden muss, bevor es verwendet wird):
Turbo C ist ein Vorläufer der C99-standard, also, wenn Sie wollen, um code zu schreiben, wie im zweiten Beispiel, werden Sie brauchen, um eine mehr up-to-date-compiler.
In C, vor C99, müssen Sie deklarieren Sie Ihre Variablen vor der Schleife. In C++, und jetzt in C99 können Sie erklären, innerhalb der Schleife, wie Sie hier versuchen. Die unterschiedlichen Ergebnisse, die Sie bekommen können, weil Sie manchmal kompilieren als C++, und manchmal zusammenstellen, wie C.
Könnten Sie versuchen, sicherzustellen, dass Sie immer den code zu kompilieren als C++, oder wenn Sie GCC oder Clang kompilieren mit der
--std=c99
Flagge. C99 ist nicht durch MSVC, so müssen Sie entweder mit C++ oder verschieben Sie die Deklaration außerhalb der Schleife, wenn Sie mit MSVC.Es klingt wie Sie haben ein C89 compiler (statt C99-compiler).
In C89, Sie dürfen nur zum deklarieren von Variablen am Anfang einer Funktion. Sie sind einfach nicht erlaubt, um Variablen zu deklarieren, die anderswo in einer Funktion, einschließlich der im initialization-Teil einer
for
- Anweisung. Das ist, warum Sie die zweite syntax funktioniert und die erste fehlschlägt.Die zweite syntax ist gültig für C99 und C++, aber nicht für C89.
for
Anweisung und es funktioniert? Ohne, dass zu vergleichen, die nicht funktionierende version, es gibt keine Möglichkeit zu sagen, was der Unterschied ist.for
- Anweisung, und es funktioniert nicht. Dann haben Sie ein weiteres Stück code, wo Sie es erklären, bevor diefor
Anweisung und es funktioniert. Der Grund dafür, dass Sie zu unterschiedlichen Ergebnissen führen, weil Sie die variable deklariert haben, in verschiedenen Orten. Einer von Ihnen erklärt die variable in einem legalen Platz, und die anderen deklariert die variable in einem illegalen Ort. Viel wie alles andere in der Programmierung, die Zeiten, in denen es funktioniert sind die Zeiten, wenn Sie es schreiben, die den richtigen, legalen Weg.Welchen C-compiler benutzt du?
Älteren Versionen von C vor C99 verlangen, dass alle Variablen-Deklarationen gemacht werden, an der Spitze ein code-block.