разделение динамически заполненного массива между двумя файлами в C - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть следующие три файла, и мне нужно вызвать динамически заполненный массив из одного файла в другой файл, я получаю ошибку компиляции, может кто-нибудь, пожалуйста, помогите мне.Стук головы от долгого времени.

my_files.h:

extern int cpu_list[];

fileA.c:

#include<stdio.h>
#include "my_files.h"

int not_main()
{
    int i,j;
    for(i=0;i<2;i++){
        j=i;
        cpu_list[i]=2*j + 5;

    }

    printf("cpu_list[0] is %d in not_main function \n",cpu_list[0]);
    printf("cpu_list[1] is %d in not_main function \n",cpu_list[1]);

    return 0;
}

fileB.c:

#include <stdio.h>
#include "my_files.h"
int cpu_list[2];
int main()
{

    printf("cpu_list[0] is %d in main function \n",cpu_list[0]);
    printf("cpu_list[1] is %d in main function\n",cpu_list[1]);

    not_main();

    return 0;
}

компиляция:

gcc -c fileA.c
gcc -c fileB.c

gcc -o out fileA.o  fileB.o
cpu_list[0] is 0 in main function
cpu_list[1] is 0 in main function
cpu_list[0] is 5 in not_main function
cpu_list[1] is 7 in not_main function

ПОЧЕМУ значение основной функции показывает ноль для массива?

1 Ответ

1 голос
/ 16 апреля 2019

Исходя из приведенного ниже источника, я получаю вывод:

cpu_list[0] is 0
cpu_list[1] is 0
cpu_list[0] is 5 in not_main function 
cpu_list[1] is 7 in not_main function 
cpu_list[0] is 5
cpu_list[1] is 7

Ключевые изменения перемещают определение cpu_list в область действия файла в fileA.c, а не повторяются в not_main(), иснова печатать значения в main() после возврата not_main().Незначительное изменение теряет j;он не предоставлял никакого значения, так как это была просто копия i.

Обратите внимание, что важно (я испытываю желание сказать «критический»), что и 1013 *, и fileB.c включаютзаголовок.Это дает вам перекрестную проверку, необходимую для обеспечения того, чтобы и массив, и функция были определены и объявлены последовательно.

my_files.h

extern int cpu_list[];
extern int not_main(void);

fileA.c

#include <stdio.h>
#include "my_files.h"

int cpu_list[2];

int not_main(void)
{
    int i;
    for (i = 0; i < 2; i++)
    {
        cpu_list[i] = 2 * i + 5;
    }

    printf("cpu_list[0] is %d in not_main function \n", cpu_list[0]);
    printf("cpu_list[1] is %d in not_main function \n", cpu_list[1]);

    return 0;
}

fileB.c

#include <stdio.h>
#include "my_files.h"

int main(void)
{
    printf("cpu_list[0] is %d\n", cpu_list[0]);
    printf("cpu_list[1] is %d\n", cpu_list[1]);

    not_main();

    printf("cpu_list[0] is %d\n", cpu_list[0]);
    printf("cpu_list[1] is %d\n", cpu_list[1]);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...