我们允许程序员向代码添加TODO
消息。每次编译文件时,都会将消息写入输出(通过编译指示消息)。 TODO
是一个宏,包含创建时的消息和日期。例如。 TODO(3, 8, 2015, "...");
我想验证没有TODO
超过30天(大致),并且如果存在,则阻止编译。 (您当然可以更改日期,但在版本控制中会清晰可见)
我需要解决方案,它适用于MS VC 2012
我已经写过(基于other question)一个版本,在gcc上工作正常 - Here is working example
但它没有在error C2057 : expected constant expression
消息
#define TOTAL_DAYS(day,month,year) (day + month*31 + year*365)
namespace checkingDate
{
#define C(i) static const char c##i = __DATE__[i];
C(0); C(1); C(2); C(3);
C(4); C(5); C(6); C(7);
C(8); C(9); C(10);
static const int current_date = c4 == ' ' ? c5 - '0' : c5 - '0' + 10;
static const int current_month = (
c0 == 'J' // Jan Jun Jul
? (c1 == 'a' ? 1 : (c2 == 'n' ? 6 : 7))
: c0 == 'F' ? 2
: c0 == 'M' // Mar May
? (c2 == 'r' ? 3 : 5)
: c0 == 'A' // Apr Aug
? (c1 == 'p' ? 4 : 8)
: c0 == 'S' ? 9
: c0 == 'O' ? 10
: c0 == 'N' ? 11
: 12
);
static const int current_year = ((c7 - '0') * 1000) + ((c8 - '0') * 100) + ((c9 - '0') * 10) + (c10 - '0');
static const int totalDays = TOTAL_DAYS(current_date, current_month, current_year);
}
# define TODO(day,month,year, str) static_assert(checkingDate::totalDays - TOTAL_DAYS(day,month,year)<30, "old msg");
int main()
{
TODO(3, 8, 2015, "...");
}
我可以以某种方式修复此错误吗? 是我的错误还是MS VC错误? 还有其他方式来编写它,所以它适用于visual studio吗?