Codeblocks C 项目 - 头文件多余? (为什么项目不需要它来工作?)
Codeblocks C Project - Header file redundant? (Why isn't it needed for the project to work?)
我正在尝试在代码块(控制台应用程序)中创建一个基本的简单项目。
这是我的:
- main.c
- func.c
- header.h
为了让它工作,我创建了一个非常简单的程序,以我认为应该填充的方式填充所有 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,这恰好适用于你的情况(在早年,它被认为是有帮助的编译器假设,所以他们这样做)
我正在尝试在代码块(控制台应用程序)中创建一个基本的简单项目。
这是我的:
- main.c
- func.c
- header.h
为了让它工作,我创建了一个非常简单的程序,以我认为应该填充的方式填充所有 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,这恰好适用于你的情况(在早年,它被认为是有帮助的编译器假设,所以他们这样做)