При компиляции любой программы обратите внимание на предупреждения, которые испускает компилятор.
Для каждого предупреждения вы должны понять, почему это дано и как правильно его исправить.
$ 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]
Чтобы исправить это, вставьте следующие строки на самом верху:
#include <stdio.h> // for printf
#include <stdlib.h> // for atoi
Следующая один:
insort.c:10:5: warning: implicit declaration of function 'insort' [-Wimplicit-function-declaration]
Чтобы это исправить, переместите всю insort
функцию над main
функция.
следующий:
insort.c:23:17: warning: assignment makes integer from pointer without a cast
Это один очень плохо. Параметр int *A[]
действительно означает int **A
, который является указателем на указатель на int. Чтобы исправить это, удалите квадратные скобки.
следующий:
insort.c:22:12: warning: passing argument 1 of 'insort' from incompatible pointer type
Оператор &
не является необходимым. Когда вы передаете массив функции, он распадается на указатель на начало массива. Удалите &
.
Теперь программа компилируется без каких-либо предупреждений. Это хорошо. Следующий уровень:
$ gcc -std=c99 -Wall -Wextra -Os insort.c
Wow. Даже если все эти предупреждения включены, компилятор больше не жалуется. Это хорошо.
(опция -Os
оптимизации необходимо включить некоторые предупреждения, так как они испытывают только когда компилятор оптимизирует код.)
Теперь программа компилируется. При запуске он кажется застрявшим в бесконечном цикле. Но худшие ошибки фиксируются сейчас.
Упс! Как-то, пытаясь запустить этот код через отладчик, вы случайно отправили его на Stack Overflow! Отладчик скажет вам, в какой строке возникла проблема, которая поставит вас на путь исправления. Если вы не понимаете вывод отладчика, вы можете вернуться и задать * конкретный * вопрос об этом. –
Никогда не меняйте имена 'argc' и' argv', это делает программу нечитаемой. –