在头文件和cpp文件中都包含一个库

时间:2019-02-23 01:55:37

标签: c++ header

我是C ++的新手。我已经看到在头文件和cpp文件中都包含库文件(例如,AutoItX.Dotnet的代码)。如果不使用using AutoIt; class Program { static void Main(string[] args) { var text = AutoItX.ControlGetText("Untitled - Notepad", "", "[CLASSNN:Edit1]"); //In your case, since you are dealing with handles, you can use: var windowHandle = new IntPtr(0x00788600); var controlHandle = new IntPtr(0x00000000); var text2 = AutoItX.ControlGetText(windowHandle, controlHandle); } } ,这会导致重复的代码吗?还是预处理器足够聪明,可以忽略它。在两个文件中包含相同的库是否正常?

test.h

string

test.cpp

#ifndef

2 个答案:

答案 0 :(得分:1)

所有C ++标准库头文件都具有ifndef保护。将它们包含在多个文件中是安全的。

经验法则是将文件包含在需要定义的所有位置。这意味着,如果在h和cpp文件中都使用std::string,则在两者中都包含<string>

对于您自己的任何头文件,出于同一目的,应始终使用ifndef防护。

答案 1 :(得分:1)

  

在两个文件中包含相同的库是否正常?

是的。通常将标头包含在多个文件中。

每当您使用标题中的声明时,都应包括该标题。如果在std::string中使用test.h,则应在<string>中包含test.h。如果在std::string中使用test.cpp,则应在<string>中包括test.cpp<string>是否恰好包含在test.cpp包含的标头之一中是无关紧要的,因此不应该依赖。

  

如果不使用#ifndef,这会导致重复的代码吗?

如果标头没有标头保护,那么多次包含它确实会导致其内容重复,是的。

  

或者说预处理器足够聪明,可以忽略它。

预处理器不会忽略任何包含。每个包括将被处理。预处理器可能足够聪明,可以优化头文件的包含,由于包含保护,它知道该报头为空。