gpt4 book ai didi

c++ - #include stdio 混淆 是否每个头文件都需要?

转载 作者:行者123 更新时间:2023-11-28 05:43:20 24 4
gpt4 key购买 nike

我知道我对#include 或它的编译方式的理解不正确,否则我的代码会起作用。我对为什么我的代码需要在两个位置 #include 才能正确编译和运行感到困惑。

我的主cpp文件armperfmon.cpp:

#include "armperfmon.h"
int main(int argc, char* argv[])
{
FILE* pOutFile = NULL;
PrintCounterOptions(pOutFile);
}

主头文件armperfmon.h:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "counters.h"

void PrintCounterOptions(FILE* pFile);

包含函数 counters.cpp 的第二个 cpp:

void PrintCounterOptions(FILE* pFile)
{
fprintf("print some stuff");
}

函数counters.h的第二个头文件

void PrintCounterOptions(FILE* pFile);

错误:

counters.cpp: error: 'FILE' was not declared in this scope
counters.cpp: error: 'pFile' was not declared in this scope

如果我输入 #include <stdio.h>在函数 cpp 文件中,然后错误消失,函数按预期编译/执行。我假设在 main.h 文件中包含 <stdio.h>它将可用于后续的 FILE* 定义,特别是因为它是在包含 counters.h 之前包含的。当我输入这个时,我也意识到更正确的包含是 <cstdio> .如果有人能澄清我的思维过程有什么问题,将不胜感激。

最佳答案

很难准确地回答这个问题,因为您已经去掉了文件名等所有特定细节,但简而言之,C++ 源文件在结果链接在一起之前是独立编译的,根本看不到“主头文件”在编译“第二个 cpp”时:它只是“主 cpp 文件”的标题。事实上,头文件的全部目的是作为声明的公共(public)位置,然后声明将 #included 到多个翻译单元中,这就是您需要在此处通过添加必要的代码来完成的你的“第二个头文件”。

关于c++ - #include stdio 混淆 是否每个头文件都需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36699447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com