#include stdio 混淆 是否每个头文件都需要?
#include stdio confusion is it needed for each header file?
我知道我对#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);
第二个 cpp 包含函数 counters.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>
,则错误消失并且函数 compiles/executes 符合预期。我假设在 main.h 文件中,当它包含 <stdio.h>
时,它将可用于后续的 FILE* 定义,特别是因为它在包含 counters.h 之前被包含。当我输入这个时,我也意识到更正确的包含是 <cstdio>
。如果有人能澄清我的思维过程有什么问题,将不胜感激。
很难准确回答这个问题,因为您已经去掉了文件名等所有具体细节,但简而言之,C++ 源文件在结果链接在一起之前是独立编译的,"main header" 不是在编译 "second cpp" 时完全可以看到:对于您的 "main cpp file",它只是 header。事实上,header 文件的全部目的是用作声明的公共位置,然后将 #include
d 放入多个翻译单元,这就是您需要在此处通过添加必要的代码来完成的你的 "second header file".
我知道我对#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);
第二个 cpp 包含函数 counters.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>
,则错误消失并且函数 compiles/executes 符合预期。我假设在 main.h 文件中,当它包含 <stdio.h>
时,它将可用于后续的 FILE* 定义,特别是因为它在包含 counters.h 之前被包含。当我输入这个时,我也意识到更正确的包含是 <cstdio>
。如果有人能澄清我的思维过程有什么问题,将不胜感激。
很难准确回答这个问题,因为您已经去掉了文件名等所有具体细节,但简而言之,C++ 源文件在结果链接在一起之前是独立编译的,"main header" 不是在编译 "second cpp" 时完全可以看到:对于您的 "main cpp file",它只是 header。事实上,header 文件的全部目的是用作声明的公共位置,然后将 #include
d 放入多个翻译单元,这就是您需要在此处通过添加必要的代码来完成的你的 "second header file".