Ваш заголовок не должен определять list list1;
, хотя он может объявить его extern list list1;
. Однако, чтобы его можно было повторно использовать, заголовок не должен объявлять переменные. (См. Что такое внешние переменные в C .)
В вашем заголовке должна быть защита от множественного включения. (См. Должен ли я использовать #include в заголовках .)
Ваш заголовок должен объявлять функции, которые предоставляются для управления списками.
У вас должен быть файл реализации, который реализует функции управления списком (linked.c
будет соответствовать имени заголовка linked.h
). Основная программа тогда просто использовала бы эти функции.
Ваша main()
программа обычно должна иметь тип возврата int
; это требуется стандартом C. Ваш компилятор может иметь альтернативу.
Было бы неплохо, если бы ваши типы были заглавными, вместо использования Node
и list
.
Ваша функция init()
имеет неправильное название. Это также плохо разработано. Вам не нужно ни входное значение, ни возвращаемое значение. Ваш код обрабатывает переданную структуру как удобно расположенную локальную переменную, инициализирует ее и копирует обратно; это будет работать также без аргументов и list list1;
, определенная как локальная переменная. И вам, вероятно, следует избегать использования того же имени, что и у глобальной переменной в списке аргументов (или в качестве локальной переменной). Компилятор не смущен этим; Вы, вероятно, Было бы более привычно использовать:
static void list_init(list *new_list)
{
new_list->head = 0;
new_list->size = 0;
}
и
list_init(&list1);
Учитывая все вышесказанное, все еще нет очевидной причины, по которой ваша программа не будет работать.
Одна странная возможность состоит в том, что ваша init()
функция сбивает с толку среду выполнения, которая обычно запускает свою собственную функцию init()
, и ваша инициализация не выполняет то, что ожидает компилятор.
В противном случае, вы можете компилировать и запускать какие-либо программы - программу «Hello World»? Если вы можете компилировать и запускать программы в целом, то в вашей программе есть что-то, что вредит системе - и функция init()
занимает центральное место. Если вы не можете запустить простую «Hello Program», вам необходимо исправить установку компилятора в целом.