Подключение .c файлов

Вот мучает меня долгое время вопрос. Почему нельзя подключать .c файлы? К примеру, у меня есть 2 файла:

main.c

#include "functions.c"
#include <stdio.h>

int main() {
    printf("%d\n", Sum(1, 2));
}

и

functions.c

int Sum(int n1, int n2) {
    return n1 + n2;
}

Почему когда я пытаюсь скомпилировать код, у меня вылетает кучу ошибок линковки? Что делать? Ошибки

P.S Я знаю что обычно делают это всё через заголовочные файлы, но всё же интересно почему это не сделать через .c файл. И если можно, то как?


Ответы (3 шт):

Автор решения: ヒミコ

Если вы не хотите писать заголовочный файл, то не подключайте ваш .c файл, а просто напишите перед main:

#include <stdio.h>

extern int Sum(int n1, int n2);

int main(void) { // в си нужно явно указывать что функция не принимает параметров.
    printf("%d\n", Sum(1, 2));
}

Либо при поключении файла, не передавайте его компилятору.

→ Ссылка
Автор решения: Qwertiy

В functions.c добавь

#pragma once

Ну и переименуй Sum в sum.

→ Ссылка
Автор решения: MacAntony

Всем спасибо за ответы. @ヒミコ подсказал не использовать Visual Studio. И это оказалось действенным способом. В данном случае для решения этой проблемы я использовал Visual Studio Code и компилятор GCC. UDP: Добавлю ещё что на самом деле ошибку ещё можно решить с помощью исключением файла из компиляции. В Visul Studio, ПКМ -> Исключить из проекта. За эту наводку спасибо так-же ヒミコ.

→ Ссылка