Исходя из приведенного ниже источника, я получаю вывод:
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;
}