C++声明的常量与定义的常量名称相同
是否有标准或好的方法来避免声明的常量与定义的常量命名相同。
我的问题,
我试图在linux中使用autoconf来编译我的程序,它定义了VERSION,但在Mongo的数据库头文件之一中,它们声明了一个名为VERSION的常量。使用右手值命名变量显然存在问题。
通常我只会更改名称,但在这种情况下它不是我的图书馆。我可以弄清楚如何重命名定义的变量 autoconf。
有什么建议吗?
Is there a standard or good way of avoiding declared constants being named the same as a defined constant.
My Problem,
Im trying to compile my program using autoconf in linux which defines VERSION but in one of Mongo's db header files they declare a constant named VERSION. There's obviously a problem naming a variable using a right hand value.
Normally I would just change the name but in this case its not my library. I could figure out how to rename the defined variable autoconf.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您必须在
configure.ac
文件中将no-define
与AM_INIT_AUTOMAKE
一起使用。请参阅 Automake 手册。
You have to use
no-define
along withAM_INIT_AUTOMAKE
in yourconfigure.ac
file.See Automake manual.
如果您已本地化错误,则可以执行以下操作:
然后在代码中使用
OLD_VERSION
,而不是VERSION
。或者只是在另一个命名空间中定义您的版本。另外,在 Mongodb 中提交一个错误。这不是仅使用
VERSION
作为外部命名空间中的名称的正确行为。它至少应该检查VERSION
是否已定义,或者为变量添加前缀,例如MONGODB_VERSION
或类似的内容。If you've localized the error, you can do something like this:
and then use
OLD_VERSION
in your code, instead ofVERSION
. Or just define your version in another namespace.Also, file a bug in Mongodb. This is not the correct behavior of using just
VERSION
as a name in the outer namespace. It should check at least ifVERSION
is already defined, or prefix the variable such asMONGODB_VERSION
, or something like that.一般来说,没有什么好的方法可以保护自己免受某些第三方库可能污染全局命名空间的影响。这就是上帝发明命名空间的原因。
如果 VERSION 是编译时已知的全局符号,则可以使用命名空间:
但如果 VERSION 是预处理器宏(正如我怀疑其大写),那么它不遵循任何编译规则并且存在于编译器规则之外。您可以使用其他预处理器宏来检测它:(
或者像迭戈的答案一样使用 #undef 来杀死它)
但是在任何 VERSION 引用的地方这样做都会变得令人讨厌。您只需要不使用 VERSION 即可。
In general there's no good way to safeguard yourself against what some 3rd party library might pollute the global namespace with. This is why god invented namespaces.
You can use namespaces if VERSION is a global symbol known at compile time:
but if VERSION is a preprocessor macro (as I suspect with its capitalization) then it doesn't follow any compilation rules and exists outside the rules of the compiler. You can detect it with other preprocessor macros:
(or use #undef like in Diego's answer to kill it)
But doing that everywhere VERSION is references will get nasty. You'll just need to not use VERSION.