【发布时间】:2014-01-07 10:01:14
【问题描述】:
以下代码(main.cpp):
#include <string>
#include <vector>
std::vector< std::string > split( std::string haystack, const char limiter ) {
std::vector< std::string > return_value;
while( haystack.find( limiter ) != std::string::npos ) {
return_value.push_back( haystack.substr( 0, haystack.find( limiter ) ) );
haystack = haystack.substr( haystack.find( limiter ) + 1 );
}
return_value.push_back( haystack );
return return_value;
}
const char* str = split( std::string( __FILE__ ), '/' ).back().c_str();
int main() {
printf( "%s\n", str );
return 0;
}
总是返回“iso_a3”,我不知道为什么......基本上,我想做的是定义一个输出文件名的LOG-macro,并在开始时计算项目基本目录的长度以减去它像这样:__FILE__[ _base_directory_length ],准确地说,输出更具可读性:
调试.h
#pragma once
static int _base_directory_length = strlen( __FILE__ ) - split( __FILE__, '/' ).back().length();
#define LOG( message ) { \
printf( "%s(%i): %s ", __FILE__ + _base_directory_length, __LINE__, __func__ ); \
printf( message ); \
printf( "\n" ); \
}
这有意义吗:-)?顺便说一句 _base_directory_length = strlen( __FILE__ ) - strlen( "Debug.h" ) 还不够。
【问题讨论】:
-
__FILE__的值是多少? -
该死的,stackoverflow,两个下划线不意味着要以粗体字打印。
-
FILE 是一个由编译器定义的宏...被替换为宏被替换的文件的相应名称。 IE。 /home/john/devel/project1/main.cpp
-
@user3116736 用反引号 (`) 环绕你不想被 Markdown 格式的东西,使它看起来像这样:
__FILE__