问题描述
我发现Qt中Q_INIT_RESOURCE()
宏的行为不一致,如果使用GCC进行编译,它可能会失败。
考虑代码:
do {
extern void func();
func();
}
while(false);
在这里,我们声明一个外部函数并调用它:到目前为止一切顺利。那是宏在后台使用的方法。现在,让我们尝试从两个不同的函数调用此代码,一个函数在一个命名空间中,另一个在全局命名空间中:
void funcGlobal() {
do {
extern void func();
func();
}
while(false);
}
namespace ns {
void funcNamespace() {
do {
extern void func();
func();
}
while(false);
}
}
void func() { std::cout << 1; }
namespace ns {
void func() { std::cout << 2; }
}
如我所见,MSVC在两种情况下都调用::func()
,但是GCC从全局函数中调用::func()
,从ns::func()
中调用functionNamespace
。凭直觉我发现MSVC更一致,但是我的问题是:标准说了什么,哪个编译器是正确的?
关于宏:由于上述问题,从不在全局名称空间中的任何函数调用宏Q_INIT_RESOURCE()
都会导致编译器错误。我必须使用附加的间接级别来解决此问题,将宏的用法包装到全局函数中。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)