C規格に従ってパラメータなしでmain関数が
int main(void)
のように宣言されなければならない。また、(あなたがメインのために閉じ括弧を省略しなかった場合)は、関数のメイン内部add_number
を定義しているようです。 C標準では、別の関数の中で関数を宣言することはできません。
通常、単一リンクの片面リストが宣言されている場合、リストのノードはその先頭に追加されます。
ここでは、単一リンクリストの先頭と末尾に新しいノードを追加する方法を示すデモンストレーションプログラムを示します。
#include <stdio.h>
#include <stdlib.h>
typedef struct numbers
{
int number_inserted;
struct numbers *next;
} NUMBERS;
int add_number_front(NUMBERS **numbers, int x )
{
NUMBERS *tmp = malloc(sizeof(NUMBERS));
int success = tmp != NULL;
if (success)
{
tmp->number_inserted = x;
tmp->next = *numbers;
*numbers = tmp;
}
return success;
}
int add_number_back(NUMBERS **numbers, int x )
{
NUMBERS *tmp = malloc(sizeof(NUMBERS));
int success = tmp != NULL;
if (success)
{
tmp->number_inserted = x;
tmp->next = NULL;
while (*numbers != NULL) numbers = &(*numbers)->next;
*numbers = tmp;
}
return success;
}
void display_numbers(NUMBERS **numbers)
{
for (NUMBERS *current = *numbers; current != NULL; current = current->next)
{
printf("%d ", current->number_inserted);
}
}
int main(void)
{
NUMBERS *numbers = NULL;
for (int i = 0; i < 5; i++) add_number_back(&numbers, i);
display_numbers(&numbers);
putchar('\n');
for (int i = 0; i < 5; i++) add_number_front(&numbers, i);
display_numbers(&numbers);
putchar('\n');
return 0;
}
その出力はあなたがメインの内部関数add_numberを定義し
0 1 2 3 4
4 3 2 1 0 0 1 2 3 4
です。標準的なCの機能ではありません。 –
は既にその小さなエラーを修正しましたが、それは私の主な問題ではありません – MoonCoding