草庐IT

gcc_test

全部标签

c++ - 使用 GCC 的内联汇编直接调用 C 函数

如果你想从内联汇编中调用C/C++函数,你可以这样做:voidcallee(){}voidcaller(){asm("call*%0"::"r"(callee));}然后GCC将发出如下代码:movl$callee,%eaxcall*%eax这可能会有问题,因为间接调用会破坏旧CPU上的管道。由于callee的地址最终是一个常量,因此可以想象可以使用i约束。在线引用GCCdocs:`i'Animmediateintegeroperand(onewithconstantvalue)isallowed.Thisincludessymbolicconstantswhosevalueswill

c++ - gcc优化?漏洞?及其对项目的实际意义

我的问题分为三个部分问题一考虑下面的代码,#includeusingnamespacestd;intmain(intargc,char*argv[]){constintv=50;inti=0X7FFFFFFF;coutNospecificcompileroptimisationoptionsareusedortheO'sflagisused.Itisbasiccompilationcommandg++-otestmain.cppisusedtoformtheexecutable.看似非常简单的代码,在SUSE64位操作系统gcc4.1.2中有奇怪的行为。预期输出为“Numberisne

c++ - 使用 gcc 构建 C++ 的推荐 -W 标志

我正在寻找C++的推荐g++警告选项列表,但只能找到这个:RecommendedgccwarningoptionsforC和UsefulGCCflagsforC这些都是C语言特有的-Wall和-Wextra启用大部分但不是所有gcc可以生成的警告。那些选项没有启用哪些警告,尤其是在编译C++时,也应该打开? 最佳答案 -Wall-Wextra倾向于覆盖真正值得注意的那些。就个人而言,我也喜欢使用-ansi-pedantic进行编译,偶尔使用-Wshadow。此外,它可能有点嘈杂并且在100%的时间里都没有用,但-Weffc++有时也

c++ - 为什么这个程序是用 gcc 编译的,而不是用 g++ 编译的?

以下程序使用gcc编译但不使用g++,我只生成目标文件。这是prog.c:#include"prog.h"staticstructclnt_opstcp_nb_ops={4};这是prog.h:#ifndef_PROG_#define_PROG_#include#endif当我这样做时:gcc-cprog.c生成目标代码但是,g++-cprog.c给出错误:variable‘clnt_opstcp_nb_ops’hasinitializerbutincompletetype如何解决这个问题? 最佳答案 在clnt.h中看这个结构体的

c++ - 带有大括号的 char 数组的非静态成员初始化在 gcc 中给出了一个错误,而不是在 clang 中

考虑以下代码:#includeclassA{charname[40]={"Blank"};//notethebracesherepublic:constchar*getName(){returnname;}};intmain(){Aa;std::cout它在gcc(最新版本5.2.0)中给出错误:prog.cpp:5:28:error:invalidconversionfrom'constchar*'to'char'[-fpermissive]charname[40]={"Blank"};^但clang并非如此,它可以使用-std=c++11-pedantic-Wall完美编译。在这里

c++ - 帮助开始使用 Boost.Test

我正在尝试开始单元测试。我正在查看一些C++框架并想尝试Boost.Test。文档看起来非常详尽,而且有点让人不知所措,尤其是对单元测试新手来说。所以这是我想要的情况:假设我有2个类,Foo和Bar。我想为Foo编写一套测试,为Bar编写一套测试,最好是在不同的文件中。我只想在使用命令行参数运行程序时运行测试。所以我的main()应该是这样的:intmain(intargc,constchar*argv[]){if(argc==1&&strcmp(argv[0],"-test")==0)run_all_tests();elsereturnprogram_main(argc,argv);

c++ - Visual Studio 和 Boost::Test

我开始使用Boost::Test驱动的开发(在C++中),并且我正在用单元测试改造我的一个旧项目。我的问题是——在哪里添加单元测试代码?根据Boost::Test的文档,测试本身的语法看起来非常简单,但我对如何告诉编译器用我的单元测试生成可执行文件感到困惑。理想情况下,我会使用预编译的header和boost::test库的仅header版本。我是否只为测试创建一个新项目并将所有现有源文件添加到其中?比利3 最佳答案 他们将Boost单元测试添加到现有解决方案的方式是创建新项目并将测试代码放入这些项目中。您无需担心创建main()函

c++ - GCC 使用哪种排序算法?

来自cplusplus.comstd::sort复杂度定义:ComplexityApproximatelyN*logNcomparisonsonaverage(whereNislast-first).Intheworstcase,uptoN2,dependingonspecificsortingalgorithmusedbylibraryimplementation.我的应用在运行时有一些限制。所以我需要知道我是否应该实现自己的排序算法,否则只会浪费时间。它们是用gcc编译的,所以我需要知道gcc使用哪种排序算法。 最佳答案 GCC

c++ - 是否可以在 boost::test 上使用自动注册的 BOOST_PARAM_TEST_CASE?

是否可以以任何方式将BOOST_AUTO_TEST_CASE和BOOST_AUTO_TEST_CASE_TEMPLATE宏与BOOST_PARAM_TEST_CASE混合使用?我什至对实现这一目标的非常困惑的方式很感兴趣。必须手动构建所有测试用例似乎非常乏味。但是BOOST_PARAM_TEST_CASE机制非常有用,但只有在您有测试初始化​​函数时才有效,这反过来又要求您必须使用手动测试用例构造。是否有关于如何自己连接到自动化系统的文档,以便您可以提供自己的自动注册测试?我现在正在使用boost1.46。 最佳答案 我为此写了自己

c++ - 为什么 C++ 编译器 (gcc) 认为函数是 `virtual' 字段?

我的类中有以下方法定义:virtualCalc*Compile(Evaluator*evaluator,ResolvedFunCall*fun_call,string*error);出于某种原因,GCC提示说:错误:“编译”声明为“虚拟”字段为什么它会认为Compile是一个字段而不是方法?有什么想法吗? 最佳答案 当第一个参数对它没有意义时,我得到了那个错误。检查Evaluator是否已知为类型:structA{virtualvoid*b(nonsense*,string*);};=>error:'b'declaredasa'vi