Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦. $g++ --versiong++ (GCC) 4.7.2Copyright (C) 2012 Free Software Foundation, Inc.This is free software; see the source for copying conditions. The 我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦.
$g++ --versiong++ (GCC) 4.7.2copyright (C) 2012 Free Software Foundation,Inc.This is free software; see the source for copying conditions.  There is NOwarranty; not even for MERCHANTABIliTY or fitness FOR A PARTIculaR PURPOSE.

以下剪辑揭示了问题:

$cat foo.cpp//#include <QtGui>#define QTOSTRING_HELPER(s) #s#define QTOSTRING(s) QTOSTRING_HELPER(s)#ifndef QT_NO_DEBUG# define QLOCATION "
$g++ -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" "
$g++ -std=c++11 -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" "[+++]"__file__":"QTOSTRING(15))
""foo.cpp"":""15")
"__file__":"QTOSTRING(__liNE__)# define METHOD(a) qFlagLocation("0"#a QLOCATION)# define SLOT(a) qFlagLocation("1"#a QLOCATION)# define SIGNAL(a) qFlagLocation("2"#a QLOCATION)#else# define METHOD(a) "0"#a# define SLOT(a) "1"#a# define SIGNAL(a) "2"#a#endifMETHOD(grml)

在没有c 11的情况下对其进行预处理是正确的.

[+++]

但是在C 11模式下,QTOSTRING宏不会扩展,导致源代码行出现编译错误.

[+++]

这种行为是否有意,我该怎么做才能启用扩展?

解决方法 这是一个已知问题,新的GCC行为是有意的,因为新的C 11特征,即用户定义的文字.您可以在__file__和QTOSTRING之前插入一个空格,以确保它始终被视为一个单独的标记,从而进行扩展.

QT bugreport here.

总结

以上是内存溢出为你收集整理的c 11模式中奇怪的g预处理器行为全部内容,希望文章能够帮你解决c 11模式中奇怪的g预处理器行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 5, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦. $g++ --versiong++ (GCC) 4.7.2Copyright (C) 2012 Free Software Foundation, Inc.This is free software; see the source for copying conditions. The 我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦.
$g++ --versiong++ (GCC) 4.7.2copyright (C) 2012 Free Software Foundation,Inc.This is free software; see the source for copying conditions.  There is NOwarranty; not even for MERCHANTABIliTY or fitness FOR A PARTIculaR PURPOSE.

以下剪辑揭示了问题:

$cat foo.cpp//#include <QtGui>#define QTOSTRING_HELPER(s) #s#define QTOSTRING(s) QTOSTRING_HELPER(s)#ifndef QT_NO_DEBUG# define QLOCATION "
$g++ -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" "
$g++ -std=c++11 -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" ""__file__":"QTOSTRING(15))
""foo.cpp"":""15")
"__file__":"QTOSTRING(__liNE__)# define METHOD(a) qFlagLocation("0"#a QLOCATION)# define SLOT(a) qFlagLocation("1"#a QLOCATION)# define SIGNAL(a) qFlagLocation("2"#a QLOCATION)#else# define METHOD(a) "0"#a# define SLOT(a) "1"#a# define SIGNAL(a) "2"#a#endifMETHOD(grml)

在没有c 11的情况下对其进行预处理是正确的.

[+++]

但是在C 11模式下,QTOSTRING宏不会扩展,导致源代码行出现编译错误.

[+++]

这种行为是否有意,我该怎么做才能启用扩展?

解决方法 这是一个已知问题,新的GCC行为是有意的,因为新的C 11特征,即用户定义的文字.您可以在__file__和QTOSTRING之前插入一个空格,以确保它始终被视为一个单独的标记,从而进行扩展.

QT bugreport here.

总结

以上是内存溢出为你收集整理的c 11模式中奇怪的g预处理器行为全部内容,希望文章能够帮你解决c 11模式中奇怪的g预处理器行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 6, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦. $g++ --versiong++ (GCC) 4.7.2Copyright (C) 2012 Free Software Foundation, Inc.This is free software; see the source for copying conditions. The 我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦.
$g++ --versiong++ (GCC) 4.7.2copyright (C) 2012 Free Software Foundation,Inc.This is free software; see the source for copying conditions.  There is NOwarranty; not even for MERCHANTABIliTY or fitness FOR A PARTIculaR PURPOSE.

以下剪辑揭示了问题:

$cat foo.cpp//#include <QtGui>#define QTOSTRING_HELPER(s) #s#define QTOSTRING(s) QTOSTRING_HELPER(s)#ifndef QT_NO_DEBUG# define QLOCATION "
$g++ -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" "
$g++ -std=c++11 -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" ""__file__":"QTOSTRING(15))
""foo.cpp"":""15")
"__file__":"QTOSTRING(__liNE__)# define METHOD(a) qFlagLocation("0"#a QLOCATION)# define SLOT(a) qFlagLocation("1"#a QLOCATION)# define SIGNAL(a) qFlagLocation("2"#a QLOCATION)#else# define METHOD(a) "0"#a# define SLOT(a) "1"#a# define SIGNAL(a) "2"#a#endifMETHOD(grml)

在没有c 11的情况下对其进行预处理是正确的.

但是在C 11模式下,QTOSTRING宏不会扩展,导致源代码行出现编译错误.

[+++]

这种行为是否有意,我该怎么做才能启用扩展?

解决方法 这是一个已知问题,新的GCC行为是有意的,因为新的C 11特征,即用户定义的文字.您可以在__file__和QTOSTRING之前插入一个空格,以确保它始终被视为一个单独的标记,从而进行扩展.

QT bugreport here.

总结

以上是内存溢出为你收集整理的c 11模式中奇怪的g预处理器行为全部内容,希望文章能够帮你解决c 11模式中奇怪的g预处理器行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
c 11模式中奇怪的g预处理器行为_C_内存溢出

c 11模式中奇怪的g预处理器行为

c 11模式中奇怪的g预处理器行为,第1张

概述我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦. $g++ --versiong++ (GCC) 4.7.2Copyright (C) 2012 Free Software Foundation, Inc.This is free software; see the source for copying conditions. The 我有一个问题,当g在c 11模式下运行时,一些预处理器宏未扩展正确.这使我在使用Qt编译程序时遇到麻烦.
$g++ --versiong++ (GCC) 4.7.2copyright (C) 2012 Free Software Foundation,Inc.This is free software; see the source for copying conditions.  There is NOwarranty; not even for MERCHANTABIliTY or fitness FOR A PARTIculaR PURPOSE.

以下剪辑揭示了问题:

$cat foo.cpp//#include <QtGui>#define QTOSTRING_HELPER(s) #s#define QTOSTRING(s) QTOSTRING_HELPER(s)#ifndef QT_NO_DEBUG# define QLOCATION "
$g++ -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" "
$g++ -std=c++11 -E foo.cpp# 1 "foo.cpp"# 1 "<command-line>"# 1 "foo.cpp"# 15 "foo.cpp"qFlagLocation("0""grml" ""__file__":"QTOSTRING(15))
""foo.cpp"":""15")
"__file__":"QTOSTRING(__liNE__)# define METHOD(a) qFlagLocation("0"#a QLOCATION)# define SLOT(a) qFlagLocation("1"#a QLOCATION)# define SIGNAL(a) qFlagLocation("2"#a QLOCATION)#else# define METHOD(a) "0"#a# define SLOT(a) "1"#a# define SIGNAL(a) "2"#a#endifMETHOD(grml)

在没有c 11的情况下对其进行预处理是正确的.

但是在C 11模式下,QTOSTRING宏不会扩展,导致源代码行出现编译错误.

这种行为是否有意,我该怎么做才能启用扩展?

解决方法 这是一个已知问题,新的GCC行为是有意的,因为新的C 11特征,即用户定义的文字.您可以在__file__和QTOSTRING之前插入一个空格,以确保它始终被视为一个单独的标记,从而进行扩展.

QT bugreport here.

总结

以上是内存溢出为你收集整理的c 11模式中奇怪的g预处理器行为全部内容,希望文章能够帮你解决c 11模式中奇怪的g预处理器行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1258443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存