我正在寻找一个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/

10-15 05:02