Wenn jedes Programm kompilieren, achten Sie auf die Warnungen, die der Compiler emittiert.
Für jede der Warnungen müssen Sie verstehen, warum es gegeben ist und wie es richtig zu beheben ist.
$ gcc -std=c99 insort.c
insort.c:7:9: warning: implicit declaration of function 'atoi' [-Wimplicit-function-declaration]
insort.c:11:9: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
diese zu beheben, die folgenden Zeilen an der Spitze ein:
#include <stdio.h> // for printf
#include <stdlib.h> // for atoi
Der nächste:
insort.c:10:5: warning: implicit declaration of function 'insort' [-Wimplicit-function-declaration]
es zu beheben, über die die gesamte insort
Funktion bewegen main
Funktion.
die nächste:
insort.c:23:17: warning: assignment makes integer from pointer without a cast
Dieses ist wirklich schlecht. Der Parameter int *A[]
bedeutet wirklich int **A
, was ein Zeiger auf einen Zeiger auf int ist. Um dies zu beheben, entfernen Sie die eckigen Klammern.
die nächste:
insort.c:22:12: warning: passing argument 1 of 'insort' from incompatible pointer type
Der &
Betreiber ist nicht notwendig. Wenn Sie ein Array an eine Funktion übergeben, verfällt es in einen Zeiger auf den Anfang des Arrays. Entfernen Sie die &
.
Jetzt kompiliert das Programm, ohne irgendwelche Warnungen zu geben. Das ist gut. Nächste Ebene:
$ gcc -std=c99 -Wall -Wextra -Os insort.c
Wow. Selbst wenn alle diese Warnungen aktiviert sind, beschwert sich der Compiler nicht mehr. Das ist gut.
(Die -Os
Optimierungsoption ist notwendig, einige der Warnungen zu aktivieren, da sie nur für getestet werden, wenn der Compiler den Code optimiert.)
Jetzt wird das Programm kompiliert wird. Wenn es läuft, scheint es in einer endlosen Schleife stecken zu bleiben. Aber die schlimmsten Fehler sind jetzt behoben.
Hoppla! Irgendwie, wenn Sie versuchen, diesen Code über einen Debugger auszuführen, haben Sie ihn versehentlich auf Stack Overflow hochgeladen! Ein Debugger wird Ihnen genau sagen, in welcher Zeile das Problem liegt, was Sie auf den Weg bringt, das Problem zu beheben. Wenn Sie die Ausgabe des Debuggers nicht verstehen, können Sie zurückkommen und eine * spezifische * Frage dazu stellen. –
Tauschen Sie niemals die Namen 'argc' und' argv' aus, dies macht das Programm unlesbar. –