#include stdio混淆每个头文件需要它吗?

时间:2016-04-18 16:27:12

标签: c++ include stdio

我知道我对#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

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

1 个答案:

答案 0 :(得分:1)

很难完全回答这个问题,因为你已经删除了所有特定的细节,比如文件名,但简而言之,C ++源文件是在结果链接在一起之前独立编译的,并且根本看不到“主标题”编译“第二个cpp”时:它只是“主cpp文件”的标题。实际上,头文件的整个目的是作为声明的公共位置,然后将#include转换为多个转换单元,这是您需要通过向“第二个头”添加必要的代码来完成的文件”。