Используя глобальные переменные внутри main() в c

Я пытаюсь использовать глобальные переменные, но я получаю сообщение об ошибке, когда я использую его внутри основной функции. Почему я не могу использовать "extern" внутри main? Codeblocks показывает ошибку только в этой области, поэтому я понял, что это проблема в моем коде, это ошибка компиляции. Я использую extern, потому что мне не нужно отправлять эти массивы другой функции при вызове из main()

Так что я модифицирую, чтобы сделать мой код работающим?

Я пытаюсь напечатать массив целых чисел, инициализированный с помощью rand().

#include<stdio.h>

int check_error(int);
void initialize_array1(int);
void initialize_array2(int);
void print_array1(int);
void print_array2(int);
int find_max(int , int);

void main(void)
{
    int input1,input2;
    printf("Enter the size of the first input: ");
    scanf("%d",&input1);
    while( (check_error(input1)) == 0)
    {
        printf("Enter the size of the input again: ");
        scanf("%d",&input1);
    }

    printf("Enter the size of the second input: ");
    scanf("%d",&input2);
    while( (check_error(input2)) == 0)
    {
        printf("Enter the size of the input again: ");
        scanf("%d",&input2);
    }
    extern int array1[input1], array2[input2];

    print_array1(input1);
    print_array2(input2);
    find_max(input1,input2);

    printf("\n%d\n",find_max(input1,input2));
}

int check_error(int input)
{
    if(input>0 && input<100)
    {
        return 1;
    }
    else
        return 0;
}

void initialize_array1(int input1)
{
    int i;
    for(i=0;i<input1;i++)
    {
        array1[i] = 0;
    }
}


void initialize_array1(int input2)
{
    int i;
    for(i=0;i<input2;i++)
    {
        array2[i] = 0;
    }
}

void print_array1(int input1)
{
    int i;
    printf(" Input array 1");
    for(i=0;i<input1;i++)
    {
        printf("%d ",array1[i]);
    }
    printf("\n");
}

void print_array2(int input2)
{
    int i;
    printf(" Input array 2");
    for(i=0;i<input2;i++)
    {
        printf("%d ",array2[i]);
    }
    printf("\n");
}

int find_max(int input1, int input2)
{
    int max = 0,i;
    for(i=0;i<input1;i++)
    {
        if(array1[i]>max)
        {
            max = array1[i];
        }
    }
    for(i=0;i<input2;i++)
    {
        if(array2[i]>max)
        {
            max = array2[i];
        }
    }
    return max;
}

2 ответа

Этот код неверен по двум причинам:

  • Вы объявляете массив переменной длины как внешний. Это не разрешено
  • Даже если бы массивы были фиксированной длины, вам нужно было бы определить эти массивы в другом месте.

Чтобы исправить этот код, определите array1 а также array2 с max размер, который вы ожидаете от пользователей (добавьте проверку, чтобы убедиться, что размер ввода не превышает max).

Вот ссылка на ответ по смежной теме: extern переменные в C?

С помощью extern Вы заявляете, что эта переменная определена где-то еще. Кстати, вы обычно только определяете (например, int i;) переменные внутри функционального блока.

Что-то еще: объявления о существовании переменной недостаточно, она также должна быть где-то определена (т. Е. Для нее должно быть выделено пространство).

Чтобы иметь глобальную переменную, вы, по крайней мере, должны определить ее вне функции.

Я думаю, что @dasblinkenlight добавил отличную ссылку на свой +1 ответ!

Другие вопросы по тегам