相关疑难解决方法(0)

如何在编译时提取没有路径和后缀的源文件名?

同时使用带有-std = c11的gcc和带有-std = c ++ 14的g ++.

例如,对于一个名为src/dir/Hello.cxx它的文件,它应该扩展为例如:

const char basename[] = "Hello";
Run Code Online (Sandbox Code Playgroud)

要么

const char basename[] = getStaticBasename(__FILE__);
Run Code Online (Sandbox Code Playgroud)

如何getStaticBasename()是一个宏(对于C源)或constexpr函数(对于C++源),其结果为"Hello".

我必须避免__FILE__在运行时拆分字符串,因为路径和后缀不能以任何方式编译到可执行文件中.

解决方案必须不依赖于大型库,例如boost.

因为我没有makefile,所以在我的情况下不能使用这样的解决方案.

有人有解决方案吗?

编辑2015-07-02:

  • 我对如何调用编译器和链接器没有影响(有时通过makefile,有时来自命令行,或某些IDE(Eclipse CDT托管make,Crossworks,Xcode等等).所以解决方案只需要代码.
  • 我的用例是为小型日志记录解决方案提供某种"通用区域标识符".应用程序代码(使用我的记录器)应该只#include <Joe/Logger.h>在后面的调用中,例如LOG_DEBUG(...)我将隐含地使用自动生成的"通用区域标识符".
  • 我目前的解决方案是应用程序代码必须在它放入代码之前声明一个JOE_LOG_FILE_REGION(Hello);(之后#include <Joe/Logger.h>)LOG_DEBUG(...).

c c++ c++11 c11 c++14

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

在Boost测试框架中测试assert

我使用Boost Test框架对我的C++代码进行单元测试,并想知道是否可以测试函数是否会断言?是的,听起来有点奇怪,但请忍受我!我的许多函数在输入时检查输入参数,断言它们是否无效,并且测试它是有用的.例如:

void MyFunction(int param)
{
    assert(param > 0); // param cannot be less than 1
    ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

BOOST_CHECK_ASSERT(MyFunction(0), true);
BOOST_CHECK_ASSERT(MyFunction(-1), true);
BOOST_CHECK_ASSERT(MyFunction(1), false);
...
Run Code Online (Sandbox Code Playgroud)

你可以检查使用Boost测试抛出的异常,所以我想知道是否还有一些断言魔法......

c++ boost unit-testing assert boost-test

20
推荐指数
3
解决办法
9989
查看次数

C++断言函数,用于检查是否抛出异常

我熟悉标准C++断言是如何工作的.这在我的项目中运行良好,可用于各种测试目的.

例如,假设我想检查我的代码是否抛出了某个异常.

如果不使用像CPPUnit这样的测试框架,这可能吗?

c++ exception assertion

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

你能用assert来测试C++中的类型定义吗?

我可以使用assert来强制执行类型定义.假设有一个变量,double d你如何assert断言d是双精度?如果assert不适用(我打赌不是),还有其他选择吗?我特别希望测试调试过程中隐含的类型转换,而从功能中受益assert#define NDEBUG.

PS显然我想将它用于任何类型定义,这里只使用double作为示例.该解决方案应该是跨平台兼容的并且与C++ 03兼容.

我想将错误检查添加到我的类设置器中.例如,假设有一个类MyClass,它带有一个私有成员变量x:

void MyClass::setX(double input)
{
   // assert x is double
   x = input;
}
Run Code Online (Sandbox Code Playgroud)

c++ debugging assert casting

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

标签 统计

c++ ×4

assert ×2

assertion ×1

boost ×1

boost-test ×1

c ×1

c++11 ×1

c++14 ×1

c11 ×1

casting ×1

debugging ×1

exception ×1

unit-testing ×1