C宏将SVN修订版转换为整数

Fra*_*ger 1 c c++ svn macros c-preprocessor

我正在寻找一个C/C++宏,它可以将随机SVN版本如"$ Revision:9 $"或"$ Revision:9999999 $"转换为整数或字符串.

我知道存在简单的函数来实现这一点,但我想在编译时创建它.

我希望写下这样的话:unsigned int rev = SVN_TO_INT("$Revision$");

Dan*_*Dan 6

我同意你不能在编译时通过宏或模板使用字符串.所以....不要使用字符串.

这是一个丑陋的黑客,但我认为它符合您的所有要求.我不推荐它.

#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
Run Code Online (Sandbox Code Playgroud)

  • 那真是令人厌恶,我向你致敬! (6认同)