小编Dev*_*lar的帖子

是否可以仅运行Boost单元测试模块的子集?

我正在使用Boost 1.34.1单元测试框架。(我知道该版本很旧,但是由于技术原因,目前不可以选择更新或切换框架。)

我有一个#define BOOST_TEST_MODULE UnitTests包含三个测试套件(BOOST_AUTO_TEST_SUITE( Suite1 );)的测试模块(),而测试套件又由几个BOOST_AUTO_TEST_CASE()s 组成。

我的问题:

是否可以仅运行测试模块的一个子集,即将测试运行限制为仅一个测试套件,甚至仅一个测试用例?

推理:

我将单元测试集成到我们的automake框架中,从而使整个模块都在上运行make check。我不想将其拆分为多个模块,因为我们的应用程序会生成大量输出,并且很高兴看到底部的测试摘要(“ X个Y测试失败”)而不是分散在几千行输出中。

但是完整的测试运行也很耗时,并且您正在寻找的测试输出同样被淹没;因此,如果我能以某种方式限制正在运行的测试的范围,那将是很好的。

Boost文档使我非常困惑,没有一个人明智。周围有人可能有建议吗?(一些欺骗手段允许拆分测试模块,同时仍然收到可用的测试摘要,这也将受到欢迎。)

boost unit-testing

3
推荐指数
1
解决办法
2300
查看次数

获取用户输入时出现分段错误

我有这个:

    // Get database access parameters 
    const char* db = "codes", *server = "localhost", *user = "root", *pass = "pass";

    // Connect to the sample database.
    mysqlpp::Connection conn(false);
    if (conn.connect(db, server, user, pass)) {

        for (int i=0; i<10; ++i)
        {
            int d, count;
            cout << "??????? D\n";
            cin >> d;
            cout << "??????? ?????????? ??????? ??? D=" << d << endl;
            cin >> count;
            for (int a=0; a<count; ++a)
            {
                char * name;
                int r,n1,n2;
                cout << "??????? R\n";
                cin …
Run Code Online (Sandbox Code Playgroud)

c++ segmentation-fault

3
推荐指数
2
解决办法
284
查看次数

配置文件的默认位置 - MacOS?

在跨平台应用程序中,我正在使用一个配置文件,允许用户根据需要覆盖各种默认值.

我遇到的问题是......在哪里放置/寻找这个配置文件,特别是关于MacOS X(我从未使用过,无法访问)?我知道MacOS X是基于Unix的,但是我也知道很多东西都是以非常不同的方式完成的......

我目前的选择:

Unix的:

~/.config/<appname>/<appname>.cfg
Run Code Online (Sandbox Code Playgroud)

Windows(这个也不确定,这里的东西似乎到处都是 - %LOCALAPPDATA%或%USERPROFILE%似乎也是有效的选择):

%APPDATA%/<appname>/<appname>.cfg
Run Code Online (Sandbox Code Playgroud)

苹果系统:

...?
Run Code Online (Sandbox Code Playgroud)

有关MacOS或其他选择的任何评论吗?

macos app-config configuration-files

3
推荐指数
1
解决办法
6924
查看次数

static_assert宽字符文字的签名?

我想static_assert()广泛的字符文字(L'x')的签名与wchar_t.

定义wchar_t是我自己的.(我正在实现一个C标准库.)如果用户使用的编译器对宽字符签名的概念与库中配置的不同,我想尽早失败,大声失败.

断言匹配大小的类型很容易:

static_assert( sizeof( wchar_t ) == sizeof( L'x' ), "size matches" );
Run Code Online (Sandbox Code Playgroud)

对于内置类型char,测试签名很容易.假设在_CHAR_IS_SIGNED某处定义为0或1,

static_assert( ( (char)-1 < 0 ) == _CHAR_IS_SIGNED, "char is signed" );
Run Code Online (Sandbox Code Playgroud)

诀窍.

但是,wchar_t不是一个内置式...

有没有办法在"纯"C99或C11中进行此(静态)断言,即不依赖于特定编译器的扩展?


澄清:

我"是"图书馆.我必须要typedef一些整数类型wchar_t.

编译器 - 不是我 - 将宽字符文字定义为某种类型.编译器为此类型指定名称,但理想情况下应与我使用的任何名称相同wchar_t,包括签名(其中,AFAICT,未由标准指定).

我想以某种方式断言/测试这些类型的身份.上面(type)-1 < 0显示的检查char不起作用,因为我不能命名"编译器用于文字的类型".

c static-assert

3
推荐指数
1
解决办法
169
查看次数

printf格式化等同于cpp的cout

我目前是计算机科学专业的学生,​​今天我收到了一份非常普通的作业,应该用C++编写.直到今天我才学习C语言.这更像是盲目的任务.

在C中,我通常使用这个:

printf("\n\n\t%-30s %-7d liters\n\t%-30s %-7d liters\n\t%-30s %-7d km",
       "Current gasoline in reserve:",
       db.currentGas,
       "Total gasoline used:",
       db.usedGas,
       "Total travel distance:",
       db.usedGas);
Run Code Online (Sandbox Code Playgroud)

由于赋值的条件是它应该用C++编写,这就是我尝试过的:

cout << setw(30) << "\n\n\tCurrent gasoline in reserve: "
     << setw(7) << db.currentGas << "litres"
     << setw(30) << "\n\tTotal gasoline used: "
     << setw(7) << db.usedGas << "litres"
     << setw(30) << "\n\tTotal travel distance: "
     << setw(7) << db.travelDistance << "km";
Run Code Online (Sandbox Code Playgroud)

但看起来C %-30s和C++ 之间存在差异setw(30)

c c++ io formatting iomanip

3
推荐指数
1
解决办法
390
查看次数

为什么C运行时不调用我的exit()?

C标准指出...

...从初始调用返回到main函数等同于exit以主函数返回的值作为参数来调用函数。

从我的角度来看,这通常是通过C运行时支持代码(crt0.c)来实现的,方法就是精确地做到这一点-调用exitfrom中的返回值main

glibc

result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
exit (result);
Run Code Online (Sandbox Code Playgroud)

尤利西斯·利比Ulysses Libc)

exit(main(argc, argv, envp));
Run Code Online (Sandbox Code Playgroud)

但是,当我编写自己的版本时exit不会被调用:

#include <stdio.h>
#include <stdlib.h>

void exit( int rc )
{
    puts( "ok" );
    fflush( stdout );
}

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不会产生我期望的“确定”输出。显然我在这里缺少什么?


上下文:我正在实现一个C标准库,仅是ISO部分,即没有crt0.c。我希望现有的系统运行时可以调用我自己的exit实现,因此“我的”清理(如刷新和关闭流,处理向其注册的函数atexit等)将在从main链接到我的库的返回时自动运行。显然不是这样,我只是不明白为什么不这样做。

c runtime crt

3
推荐指数
1
解决办法
81
查看次数

通过Makefile进行多源分离编译

我编写了一个简单的 Makefile 来编译几种类型的源代码。而且效果很好。这个Makefile会找到所有的protobuf源码和C++源码。因此,制作程序将如下所示。

  1. protoc将生成C++源文件*.proto
  2. g++*.cpp将使用and编译目标文件*.pb.cc(由步骤 1 生成)
  3. g++(实际上是ld)将所有对象链接*.obj单个可执行文件

这个 Makefile 示例是:

# Define the protoc generator
PROTOC = protoc
INCLUDE = -I$(SOMEPLACE) 
LIB = -lxml2  -lpthread -lz

# The final single outputted executable
OUTPUT  = svrkit_adapter_v2

# Define the cpp source code/object result
SOURCES = $(wildcard *.cpp)
OBJECTS=$(SOURCES:.cpp=.o)

# Define the proto's source/generated result/object result
PROTO_SOURCES = $(wildcard *.proto)
PROTO_CPPSRC = …
Run Code Online (Sandbox Code Playgroud)

makefile

2
推荐指数
1
解决办法
948
查看次数

哪个更好:按值返回 std::string 还是按常量引用返回?

这是一个具有两个不同返回类型的 getter 的类:

class A {
    std::string m_test { "test" };

public:
    std::string test_by_value { return m_test; }
    const std::string& test_by_const_ref() { return m_test; }
};

// ...
Run Code Online (Sandbox Code Playgroud)

哪个更好?它是关于 std::string 的,而不是内置类型。STL在https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler中是否说最好按值返回,因为多个副本将被优化?还是我对他的理解有误?

c++ return-type return-by-reference c++11 return-by-value

2
推荐指数
2
解决办法
8109
查看次数

“ this”指针上的const_cast是未定义的行为吗?

我有以下c ++代码。我可以在Linux机器上使用g ++ 4.9.2进行编译。然后,当我运行它时,它会显示10。似乎在默认构造函数中创建了一个新对象并将其分配给使用const_cast创建的指针。没有内存泄漏(我使用valgrind检查了)。这是某种未定义的行为还是合法的?

#include <iostream>

using namespace std;

class A
{
   public:
      A() : x(0)
      {
         A *tmp = const_cast<A*>(this);
         *tmp = A(10);
      }

      A(int x)
      {
         this->x = x;
      }

      int getX() const
      {
         return x;
      }

   private:
      int x;
};

int main()
{
   A a;

   cout << a.getX() << endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ this const-cast undefined-behavior

2
推荐指数
1
解决办法
171
查看次数

Perl 动态/符号函数参考

给定包名称$package和该包内的函数名称$function,我可以创建对该函数的引用:

my $ref = eval( "\\&${package}::${function}" );
Run Code Online (Sandbox Code Playgroud)

作为一个完整的例子:

#!/usr/bin/perl -w

use strict;

package foo;

sub func()
{
    print "foo::func\n";
}

package main;

my $package = "foo";
my $function = "func";

my $ref = eval( "\\&${package}::$function" );
$ref->();
Run Code Online (Sandbox Code Playgroud)

我不太喜欢eval()那里的内容,想知道如果没有 ,是否可以达到相同的结果eval()

perl reference

2
推荐指数
1
解决办法
108
查看次数