小编Are*_*nim的帖子

如何从预处理器宏中识别平台/编译器?

我正在编写一个跨平台的代码,它应该在linux,windows,Mac OS上编译.在窗户上,我必须支持视觉工作室和mingw.

有一些特定于平台的代码,我应该放在#ifdef .. #endif环境中.例如,这里我放置了win32特定代码:

#ifdef WIN32
#include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)

但是我如何识别linux和mac OS?我应该使用什么定义名称(或等)?

c++ macros cross-platform c-preprocessor

112
推荐指数
4
解决办法
10万
查看次数

如何"解密"链接器方法名称?

我正在使用backtrace打印应用程序的堆栈跟踪,我得到类似的东西

libQtCore.so.4(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x843) [0x7f889d20cf33]
libQtGui.so.4(_ZN7QAction9triggeredEb+0x32) [0x7f889d76c2f2]
libQtGui.so.4(_ZN7QAction8activateENS_11ActionEventE+0xb0) [0x7f889d76d670]
libQtGui.so.4(+0x6242f4) [0x7f889db862f4]
Run Code Online (Sandbox Code Playgroud)

有没有办法将"链接器名称"转换为"源名称"并从偏移量中获取代码行号?

我想要回溯,看起来像这样:

libQtCore.so.4 (QMetaObject::activate(QObject):1022)
libQtGui.so.4  (QAction::triggered()::47) 
Run Code Online (Sandbox Code Playgroud)

UPD.

据我所知,由于编译器的细节,这种技术可能起作用或不起作用或工作不好.我想至少在gcc和visual c ++中"demangle"链接符号.

c++ debugging backtrace

5
推荐指数
1
解决办法
1009
查看次数

QtScript输出重定向

当我调用此代码时:

QScriptEngine e;
e.evaluate("print('hello, world!')");
Run Code Online (Sandbox Code Playgroud)

输出文本(来自print方法)写入主应用程序的终端.

有没有办法将其重定向到自定义QIODevice?

c++ qt qtscript

4
推荐指数
1
解决办法
1663
查看次数