草庐IT

c++ - 使用 GNU 工具链从文件中解析 C++ 函数头

我需要从SWIG使用的.i文件中解析函数头,该文件在函数头旁边包含各种垃圾。(最终输出将是函数声明列表)对我来说,最好的选择是使用GNU工具链(GCC、Binutils等)来执行此操作,但我可能缺少使用SWIG执行此操作的简单方法。如果我是请告诉我!谢谢:]编辑:我也不知道如何使用GCC工具链来做到这一点,如果你有想法那就太好了。 最佳答案 我会尝试从clang获取抽象语法树的XML转储。或来自gccxml.从那里您可以轻松提取您感兴趣的函数声明。 关于c++-使用GNU工具链从文件中解

c++ - Mac OS X Lion 上的 GNU GCC 4.6(.1) 编译器

对这种开发还很陌生。想知道是否有人能指出我正确的方向。据我所见,使用MacPorts有一个错误,它不起作用。然而,我在四处阅读并看到了这个:http://beardedcodewarrior.net/2011/07/25/building-gcc-4-6-1-on-mac-os-x-lion/但仍然无法正常工作。当我为gcc执行make时,它​​花了3个多小时才完成,然后一旦我执行sudomakeinstall,它成功完成但是当我尝试gcc--version时,它仍然说gcc版本4.2.1(基于AppleInc.build5658)(LLVM内部版本2335.15.00)。我需要4.6

c++ - GNU MP Bignum 库的数值问题

我正在做一些数字运算,这需要高精度算术。我正在使用GNUMP库,并且accordingtotheGMPmanual:“float或简称Float,是具有有限精度指数的任意精度尾数。”尽管尾数应该具有任意精度,但我仍然遇到精度问题。为了避免让您厌烦我的实际代码,这里有一个近乎最小的工作示例来说明我的问题。该代码计算出9.3^15、9.8^15和(9.3*9.8)^15。在我的机器上,(9.3^15)*(9.8^15)和(9.3*9.8)^15的值从第16位开始开始不同,在这种情况下导致错误(大约)4.94*10^13。任何帮助将不胜感激。代码如下。#include#include#inc

C++11 std::regex_match 返回额外字符

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Isgcc4.7buggyaboutregularexpressions?我遵循了http://www.cplusplus.com/reference/std/regex/regex_match/上的示例并在Ubuntu12.0464位上使用g++版本4.6.3编译以下是我的输出:stringliteralmatchedstringobjectmatchedrangematchedstringliteralwith3matchesstringobjectwith3matchesrangewith3matche

c++ - 如何使用 dladdr 获取 gnu 间接函数的名称?

我无法获得带有间接函数的elf的gnu扩展以与dladdr一起工作。在下面的例子中,fabs和sin是libm中的两个动态函数,其中sin也是一个间接函数从其指针查找fabs效果很好,但未找到sin。我已经尝试了各种标志dlopen和-rdynamic但没有成功。调试器显示了如何从gnu-indirect-function变量到__sin_avx评估sin。我是不是遗漏了什么或者dladdr不支持间接函数?/*compiledwithg++-5-fPIC-ldl*/#include#include#includecharconst*name(void*arg){void*h=dlope

c++ - 警告 : non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]

这个问题在这里已经有了答案:C++ArrayInitializersWarnings(2个答案)关闭8年前。我刚刚在我的机器上安装了最新版本的cygwin和eclipseluna。它工作正常,我能够运行我的项目。但是,当我构建它们时,我收到了我不明白的警告。例如,这是我从“c++Primer”一书的网站上获得的头文件“Sales_item.h”的警告:warning:defaultedanddeletedfunctionsonlyavailablewith-std=c++11or-std=gnu++11[enabledbydefault]Sales_item()=default;^..

c++ - 非标准 gnu 案例范围的标准替代方案

我有一个快速解决方法的问题,以享受非标准gnu的好处caseranges.例如,非标准:case1...5:可以替换为:case1:case2:case3:case4:case5:可能一些宏解决方案可能是有序的。根据我的内存,宏循环无法循环进行大量迭代。出于这个原因,如果范围“很大”,比如以千为单位怎么办? 最佳答案 如果您在谈论预处理器循环,我猜您正在考虑来自boost的预处理器元编程。虽然它可能非常便携,但循环似乎仅限于255“迭代”。事实上,实现并不是一个真正的循环,它更像是一个硬编码的循环展开(因此是限制)。您当然可以将其扩

c++ - 如何在不引用文档的情况下获得 g++ 编译器的 c++ 默认模式?

我想知道当前g++编译器的c++的默认模式。除了引用文档,例如this:ThedefaultmodeforC++isnow-std=gnu++14insteadof-std=gnu++98.我可以从g++命令行获得这个模式吗?我尝试从g++-v中查找此信息:$g++-vUsingbuilt-inspecs.COLLECT_GCC=g++COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/lto-wrapperTarget:x86_64-pc-linux-gnuConfiguredwith:/build/gcc/src/g

if 条件中的 C++ 静态和非静态变量声明

以下if条件在VisualStudioC++中编译:if(intx=5){std::cout和if(staticintx=5){std::cout另一方面,gnu编译器只编译第一个。从测试来看,变量的范围似乎就在if条件内。但是,由于VisualStudio编译了两个版本,我想知道是否有任何差异? 最佳答案 按照C++标准,GNU是对的,VisualStudio是错的。继6.4/1之后:condition:expressiontype-specifier-seqdeclarator=assignment-expression允许使用

c++ - 如何在没有警告的情况下在 gnu++11 标准中写入 "nested if...else statement for constants"?

当我使用嵌套的if....else语句时if(std::is_same::value){//dosomething}elseif(std::is_same::value){//dosomethingelse}...else{//printerror}我收到QACPP静态代码分析器的编译器警告qacpp-4.2.1-4090,其中包含消息“此‘if’语句中的条件是常量。”我该如何修复gnu++11标准中的编译器警告?注意:我不是C++专家,所以如果这个问题听起来很业余,请原谅。 最佳答案 对于T的特定实例,if条件是常量。换句话说st