Codeblocks C 项目 - 头文件多余? (为什么项目不需要它来工作?)

Codeblocks C Project - Header file redundant? (Why isn't it needed for the project to work?)

我正在尝试在代码块(控制台应用程序)中创建一个基本的简单项目。

这是我的:

为了让它工作,我创建了一个非常简单的程序,以我认为应该填充的方式填充所有 3 个文件(基于我在网上找到的一些指南)。

main.c:

#include <stdio.h>
#include <stdlib.h>
#include "header.h"

int main()
{
    printf("Hello world!\n");
    jogar();
    return 0;
}

func.c:

#include "header.h"
void jogar(){
    printf("Hello Mate!");
}

header.h

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
void jogar();

#endif // HEADER_H_INCLUDED

这一切都很好。我觉得奇怪的是 如果我删除 header.h 文件,一切仍将以相同的方式工作 (输出是相同的)。 运行 不需要 header.h 文件吗?我做错了什么?

编辑:我的代码块版本是最新版本 (13.12)。

更新 #2 - 关于 Aganju 的输入,我已将文件更改为:

main.c:

#include <stdio.h>
#include <stdlib.h>
#include "header.h"

int main()
{
    float x = 2.70;
    float a = jogar(x);
    printf("%f", a);
    return 0;
}

functions.c:

#include "header.h"
float jogar(float x){

    return x+1.10;
}

header.h:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
float jogar(float x);

#endif // HEADER_H_INCLUDED

现在,包含 header.h 后,输出为 3.80000(应该如此),如果我删除 header.h 中的函数原型,输出将是一些随机数。这是理论上预期会发生的事情吗?

删除头文件后编译项目吗? :-)

一旦你的函数 jogar 有任何输入参数或 returns 除了 int 之外的任何东西,它就不再工作,或者至少你失去了编译器的匹配能力(所以你可以用 X 调用但期望 Y 而它不会告诉你)。

如果在头文件中没有声明,编译器会假设你的函数得到任何东西和 returns 一个 int,这恰好适用于你的情况(在早年,它被认为是有帮助的编译器假设,所以他们这样做)