我正在寻找一个C / C++宏,它可以将SVN随机修订版本(例如“$ Revision:9 $”或“$ Revision:9999999 $”)转换为整数或字符串。
我知道存在实现此目的的简单函数,但是我希望在编译时进行。
我的愿望是写像:unsigned int rev = SVN_TO_INT("$Revision$");
最佳答案
我同意您不能在编译时通过宏或模板使用字符串。所以....不要使用字符串。
这是一个丑陋的骇客,但我认为它可以满足您的所有要求。我不推荐。
#define $Revision struct REV_STR { unsigned foo
#define $ * 64; };
$Revision: 4521 $
enum { REV = sizeof(REV_STR) / 8 };
#undef $Revision
#undef $
#include <iostream>
int main()
{
std::cout << REV << std::endl;
return 0;
}
// $ g++ -Wall -Wextra revision.cpp && ./a.exe
// revision.cpp:4: warning: width of `REV_STR::foo' exceeds its type
// 4521
关于c++ - C宏将SVN修订版转换为整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1833379/