Мой учебник говорит, что:
"Функции и инициализированные глобальные переменные получают сильные символы. Неинициализированные глобальные переменные получают слабые символы. Для сильного символа и нескольких слабых символов выберите сильный символ"
Итак, я создаю два файла, чтобы увидеть:
file1.c:
int number;
int main(int argc, char *argv[])
{
printf("%d",number);
return 0;
}
file2.c (всего одна строка):
int number = 2018;
и я запустил gcc -Wall -o program file1.c file2.c
, и вывод равен 0, что я могу понять, прежде чем изучать компоновщик ('число' в file1.c было инициализировано в 0), но после того, как я изучу, как работает компоновщик, я начинаю удивляться почему вывод не 2018, так как «число» в file2 является сильным символом (инициализированная глобальная переменная), а «число» в file1 является слабым символом, поэтому компоновщик выберет сильное значение со значением 2018, так почему компоновщик выбрать слабый символ?