Работа компилятора с несколькими файлами - C (СИ)
Формулировка задачи:
Я нарочно сделал неправильно(хочу понять логику работы компилятора)
Почему ошибка _f уже определен в main.obj
main.c
tmp.c
#include <stdio.h>
#include <stdlib.h>
#include "tmp.c"
int a;
int main(){
system("pause");
}#include <stdio.h>
void f(void){
extern int a;
printf("a=%d",a);
}Решение задачи: «Работа компилятора с несколькими файлами»
textual
Листинг программы
//main.c
// содержимое stdio.h
// содержимое stdlib.h
// содержимое stdio.h
void f(void){
extern int a;
printf("a=%d",a);
}
int a;
int main(){
system("pause");
}
// tmp.c
// stdio.h
void f(void){
extern int a;
printf("a=%d",a);
}
Объяснение кода листинга программы
main.cиtmp.c- названия файлов, где написан код.extern int a;- объявление переменнойaкак внешней, доступной для всех файлов, которые включают данный файл.printf(a=%d,a);- выводит значение переменнойaна экран.int a;- определение переменнойaтипаint.system(pause);- функция, которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет клавишу.void f(void){- функция с именемf, которая не принимает аргументов и возвращаетvoid.extern int a;- в функцииfобъявляется переменнаяaкак внешняя.printf(a=%d,a);- в функцииfвыводится значение переменнойaна экран.int a;- определение переменнойaтипаintв функцииf.- В обоих файлах присутствуют строки
#include <stdio.h>, которые включают в код содержимое файлаstdio.h. - В обоих файлах присутствуют строки
#include <stdlib.h>, которые включают в код содержимое файлаstdlib.h. - В обоих файлах присутствует функция
f, которая выводит значение переменнойaна экран. - Переменная
aобъявлена как внешняя, доступная для всех файлов, которые включают файлы, где она определена. - Значение переменной
aвыводится на экран при вызове функцииf. - В обоих файлах присутствует функция
main, которая является точкой входа в программу. - В функции
mainприсутствует вызов функцииsystem(pause), которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет клавишу. - В обоих файлах присутствуют комментарии, которые описывают назначение и особенности кода.
- В обоих файлах используется библиотека
stdio.h, которая содержит функции для работы с выводом на экран. - В обоих файлах используется библиотека
stdlib.h, которая содержит функции для работы с генерацией случайных чисел, управлением памятью и т.д. - Значение переменной
aне инициализируется и будет содержать случайное значение, если не будет установлено явно.