我们说我们有两个班,Foo和Bar。
在Foo.h中
#ifndef MYPROJ_FOO
#define MYPROJ_FOO
....
# endif
在Bar.cpp中,我们还需要保护包括在内的
#ifndef MYPROJ_FOO
#include <Foo.h>
#endif
或简单#include
就足够了?如果我们已经有头球防守队员,那么对我来说似乎是多余的,但是我经常看到这样的练习,因此想知道我是否错过了什么。谢谢!
答案 0 :(得分:5)
从功能上讲,它没有任何区别。
旧代码可能使用此代码的原因是优化。这意味着预处理器可以避免第二次读取Foo.h
,因此它可以更快地生成结果。
如今,即使预处理器第二次读取文件,其性能影响应该足够小,不会打扰它。有些预处理器甚至可以自动检测标题保护,记住哪个标题保护与哪个宏相关联,并避免重新读取标题文件。
答案 1 :(得分:4)
或者,您可以考虑在头文件中使用(非标准但通常接受的)扩展名
$web = Get-SPWeb http://subsiteURL
$publishingWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$pageTitlesToShow = @("Page Title") # this needs to be page title
$pages = $web.Lists["pages"]
foreach ($item in $pages.Items)
{
if ($pageTitlesToShow.Contains($item.Title)){
$item.Title
$item.UniqueId
$publishingWeb.Navigation.IncludeInNavigation($false,$item.UniqueId);
}
}
$publishingWeb.Update()
$web.Close()
$web.Dispose()
答案 2 :(得分:3)
在Bar.cpp中,我们还需要保护包括在内的从正确的角度来看,#ifndef MYPROJ_FOO #include <Foo.h> #endif
或简单
#include
就足够了吗?
简单#include
就足够了。
如果我们已经拥有头球防守队员,那么对我来说似乎是多余的,但我经常看到这样的练习,因此想知道我是否遗漏了什么。
John Lakos在他的书Large Scale C++ Software Design中推荐了这种做法。
但是,更好的选择是使用大多数现代C ++编译器支持的#pragma once
指令。
foo.h中:
#pragma once
....
然后,你可以使用
#include "Foo.h"
在任何.cpp文件中。
答案 3 :(得分:2)
或简单
#include
就足够了?
是的,是的。
如果我们已经有头球后卫,那么对我来说似乎是多余的,
是的,这完全是多余的。
但我经常看到这种做法
除非代码作者不知道他们在做什么,否则我看不到这种做法。