同时使用带有-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:
#include <Joe/Logger.h>在后面的调用中,例如LOG_DEBUG(...)我将隐含地使用自动生成的"通用区域标识符".JOE_LOG_FILE_REGION(Hello);(之后#include <Joe/Logger.h>)LOG_DEBUG(...).我使用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++断言是如何工作的.这在我的项目中运行良好,可用于各种测试目的.
例如,假设我想检查我的代码是否抛出了某个异常.
如果不使用像CPPUnit这样的测试框架,这可能吗?
我可以使用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)