我是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
答案 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
,这会导致重复的代码吗?
如果标头没有标头保护,那么多次包含它确实会导致其内容重复,是的。
或者说预处理器足够聪明,可以忽略它。
预处理器不会忽略任何包含。每个包括将被处理。预处理器可能足够聪明,可以优化头文件的包含,由于包含保护,它知道该报头为空。