Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C:使用同一项目中的文件中的函数_C++_C_Function_Header_Using - Fatal编程技术网

C++ C:使用同一项目中的文件中的函数

C++ C:使用同一项目中的文件中的函数,c++,c,function,header,using,C++,C,Function,Header,Using,我的问题没有直接的例子,而是一个整体问题。当我用C++编码时,我发现(在查看一些线程之后)为了使用来自同一个项目中不同文件的函数,我要么需要一个头文件。因此,例如,如果我在一个名为“main.cpp”的文件中有一个main函数,并且我想在另一个名为“problem1.cpp”的文件中使用一个函数“proble1()”,那么我需要使用一个头文件 让我困惑的是,为什么我不用为用C编程而担心这个问题?当我用C语言编程时,为了使用不同文件中的函数,我可以直接调用函数 感谢您的帮助/解释。谢谢 在C中,如

我的问题没有直接的例子,而是一个整体问题。当我用C++编码时,我发现(在查看一些线程之后)为了使用来自同一个项目中不同文件的函数,我要么需要一个头文件。因此,例如,如果我在一个名为“main.cpp”的文件中有一个main函数,并且我想在另一个名为“problem1.cpp”的文件中使用一个函数“proble1()”,那么我需要使用一个头文件

让我困惑的是,为什么我不用为用C编程而担心这个问题?当我用C语言编程时,为了使用不同文件中的函数,我可以直接调用函数


感谢您的帮助/解释。谢谢

在C中,如果您没有提供原型,编译器将猜测正确的原型。它经常猜错,然后你的程序就坏了


C或C++,在一个头文件中声明声明也是一个好主意,它也会将<代码> >包含d到实现文件中,编译器可以检查不匹配。它经常猜错,然后你的程序就坏了


C或C++,在一个头文件中声明声明也是一个好主意,它也会将<代码> >包含d到实现文件中,编译器可以检查不匹配。

< p>你的C编译器可以隐式声明函数,但是你应该自己做。如果您打开警告,您将看到如下内容:

file1.c: warning: implicit declaration of function ‘func_from_f2’
编译file1.c时,此隐式声明将用于创建对象文件,然后在链接时,您只需希望函数确实存在并且声明正确,以便成功地将对象文件链接在一起

如果没有,链接器将在以下行的某个地方给您一个错误:

undefined reference to `func_from_f2'

您也不一定需要头文件,只需在源文件中包含函数的声明/原型即可(本质上,
#include
指令就是这样做的)。也就是说,在没有警告的情况下,以下各项可以正常工作:

file1.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>

void func_from_f2(void)
{
   puts("hello");
}
#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>
#include "file2.h"

void func_from_f2(void)
{
   puts("hello");
}
file2.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>

void func_from_f2(void)
{
   puts("hello");
}
#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>
#include "file2.h"

void func_from_f2(void)
{
   puts("hello");
}
file2.h

#ifndef FILE2_H
#define FILE2_H

void func_from_f2(void);

#endif
file2.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>

void func_from_f2(void)
{
   puts("hello");
}
#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>
#include "file2.h"

void func_from_f2(void)
{
   puts("hello");
}
#包括
#包括“file2.h”
从f2开始的无效函数(无效)
{
放置(“你好”);
}

您的C编译器可以隐式声明函数,但您应该自己这样做。如果您打开警告,您将看到如下内容:

file1.c: warning: implicit declaration of function ‘func_from_f2’
编译file1.c时,此隐式声明将用于创建对象文件,然后在链接时,您只需希望函数确实存在并且声明正确,以便成功地将对象文件链接在一起

如果没有,链接器将在以下行的某个地方给您一个错误:

undefined reference to `func_from_f2'

您也不一定需要头文件,只需在源文件中包含函数的声明/原型即可(本质上,
#include
指令就是这样做的)。也就是说,在没有警告的情况下,以下各项可以正常工作:

file1.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>

void func_from_f2(void)
{
   puts("hello");
}
#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>
#include "file2.h"

void func_from_f2(void)
{
   puts("hello");
}
file2.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>

void func_from_f2(void)
{
   puts("hello");
}
#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>
#include "file2.h"

void func_from_f2(void)
{
   puts("hello");
}
file2.h

#ifndef FILE2_H
#define FILE2_H

void func_from_f2(void);

#endif
file2.c

void func_from_f2(void);

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>

void func_from_f2(void)
{
   puts("hello");
}
#include "file2.h"

int main(void)
{
   func_from_f2();

   return 0;
}
#include <stdio.h>
#include "file2.h"

void func_from_f2(void)
{
   puts("hello");
}
#包括
#包括“file2.h”
从f2开始的无效函数(无效)
{
放置(“你好”);
}

好的,戈查彭。因此,基本上,使用标题可以避免任何混淆,并确保编码清晰。如果我没有错,C++强制执行,C则稍微宽松一点。好的,查普。因此,基本上,使用标题可以避免任何混淆,并确保编码清晰。如果我没弄错的话,C++强制执行这个,而C则稍微宽松一点。谢谢你们的明确例子。我想我现在明白了。我想我会研究一下标题以及如何准确地格式化和使用它们。你错过了一个好的实践,使所有这些都值得<代码>#在
file2.c
内部包含“file2.h”,这将让编译器看到原型和定义,并验证它们是否匹配。@BenVoigt:噢,该死的,我也这么做了。感谢您提供了清晰的示例:我想我现在明白了。我想我会研究一下标题以及如何准确地格式化和使用它们。你错过了一个好的实践,使所有这些都值得<代码>#从
file2.c
内部包含“file2.h”,这将让编译器看到原型和定义,并验证它们是否匹配。@BenVoigt:噢,该死的,我也这么做了。如果你觉得下面的答案解决了你的问题,你应该接受其中一个。如果你觉得下面的答案解决了你的问题,你应该接受其中一个。