我们可以编写一个不使用 C 语言预处理器的可移植包含防护吗?
我们可以编写一个不使用 C++ 预处理器的可移植包含防护吗?如果是这样怎么办?
Can we write a portable include guard that doesn’t use the preprocessor in C++? If so how could that be done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不可以。
#include
。有几种不可移植的方法可以做到这一点(都使用预处理器),例如:
但是
标头保护无处不在,并且您的编译器可能经过优化以检查标头保护,因此它不会'甚至不需要处理重复的#include 指令。
No.
#include
without the preprocessor.There are a couple non-portable ways to do this (both use the preprocessor), such as:
and
But header guards work everywhere, and your compiler is probably optimized to check for header guards so it won't even bother processing a duplicate
#include
directive.这有点无从下手。如果您是
#include
文件,那么无论如何,您都将无法使用预处理器。据我所知,最接近您要求的是#pragma Once
预处理器指令,但这并不是严格可移植的 - 尽管它广泛可用 - 并且它当然依赖于预处理器。
That's a bit of a non-starter. If you're
#including
files you are stuck using the preprocessor, regardless. The closest thing you to what you ask that I'm aware of is the#pragma once
preprocessor directive, but that's not strictly portable - although it is widely available - and it of course relies on the preprocessor.