我有一个win32项目,我已经加载到Visual Studio 2005中.我希望能够将内容打印到Visual Studio输出窗口,但我不能为我的生活找出方法.我试过'printf'和'cout <<',但是我的信息一直没有打印.
是否有某种特殊的方式来打印到Visual Studio输出窗口?
我在将一些东西从Solaris移植到Linux时遇到的一个问题是Solaris编译器__FILE__在预处理过程中将宏扩展为文件名(例如MyFile.cpp),而Linux上的gcc扩展到完整路径(例如/ home /用户/ MYFILE.CPP).使用basename()可以很容易地解决这个问题但是......如果你经常使用它,那么对basename()的所有调用都必须加起来,对吧?
这是问题所在.有没有办法使用模板和静态元编程,在编译时运行basename()或类似的?由于它__FILE__是常量且在编译时已知,因此可能更容易.你怎么看?可以吗?
同时使用带有-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(...).在MFC C++(Visual Studio 6)中,我习惯使用TRACE宏进行调试.是否有一个与win32相同的声明?
我想"example.cpp:34"用预处理器生成表单的静态字符串,但__FILE__宏将扩展为"lib/example/example.cpp"并__LINE__扩展34为整数.我可以使用预处理器构造所需的字符串吗?海湾合作委员会的扩展是可以的.
编辑这里最重要的部分是我想要一个静态C风格的字符串,所以我不能使用该basename函数.我想知道预处理器中是否有某种方法来复制该功能,可能还有一个boost扩展?
我试图在 C++ 编译时获取编译文件的绝对路径。我知道该__FILE__宏 - 但是,该宏可以计算为绝对路径或相对路径,具体取决于预处理器的参数。
我想确保我的__FILE__(或任何其他宏)计算结果为文件的完整绝对路径。有没有办法可靠地跨平台做到这一点?(我正在为 VS2013、VS2015、ubuntu 上的 GCC、MinGW 上的 GCC 进行编译)
在 $DAYJOB,我正在尝试使用reproducible-builds.org中的提示来实现可重现的构建,以便更轻松地调试已发布的软件,而我们的构建服务器上不再有完整的调试版本。
在 GCC 中使用-ffile-prefix-map=/path/to/build=src选项来避免泄漏内部文件路径确实有助于使一些错误消息更清晰,但在使用 GDB 时确实会产生问题。我位于 /path/to/build/some/binary/ 并在 /path/to/build/lib/cclib/ 中命中断点:
Breakpoint 1, [...]
at src/lib/cclib/eventloop.cc:154
154 src/lib/cclib/eventloop.cc: No such file or directory.
(gdb)
Run Code Online (Sandbox Code Playgroud)
作为解决方法,我可以符号链接src到构建树的根,但是有没有更好的方法来确保 gdb 理解映射?