我正试图在代码块(控制台应用程序)中创建一个基本、简单的项目。
这就是我所拥有的:
- main.c
- 函数c
- header.h
为了让它发挥作用,我创建了一个非常简单的程序,按照我认为应该填写的方式填写所有3个文件(基于我在网上找到的一些指南)。
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main()
{
printf("Hello world!n");
jogar();
return 0;
}
函数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文件,一切都将以相同的方式运行(输出相同)。运行它不需要头.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;
}
函数。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
有任何输入参数或返回的值超过int,它将不再工作,或者至少您失去了编译器的匹配功能(因此您可以用X调用,但需要Y,它不会告诉您)。
在头中没有声明的情况下,编译器会假设你的函数得到了什么,并返回一个int,这恰好适用于你的情况(在早期,让编译器这样做被认为是有帮助的)
删除头文件后编译项目吗?:-)