Два файла компилируются хорошо, но ничего не печатается так, как я хочу.
Вы не вызываете sum
функцию из main
, вы просто объявляете ее.
Проблема в том, что ваша функция sum(int a, int b)
имеет имена аргументов, которые затеняют глобальные переменные, к которым вы пытаетесь получить доступ. Также вам нужно вызвать функцию sum()
, а не просто объявить ее.
Попробуйте это вместо этого:
#include <stdio.h>
extern int a;
extern int b;
void sum() {
printf("Sum is : %d", a + b);
}
int main() {
sum();
}
Для популярных компиляторов вы можете использовать -Wshadow, чтобы выдать предупреждение, когда объявление переменной затеняет ее в окружающей области видимости.
Два отдельных исходных файла, несмотря на то, что это допустимо, будут скомпилированы отдельно. Хотя
main()
может ссылаться наextern int a, b;
, ничто не мешает изменить другой источник для определенияdouble a = 3.14; ...
Вот почему вам нужно узнать, почему и зачем нужны «заголовочные файлы». Компилятор бессилен вам помочь, как и компоновщик... Не хоронитеextern
в исходном файле; используйте файл заголовка, который#include
d в обеих компиляциях.