【发布时间】:2017-01-27 16:31:04
【问题描述】:
我的问题类似于Different format of __DATE__ macro 但提到的解决方案在我的 VS 2013 编译器中显示错误。
我只想从 date 宏中取出年份部分,以便制作一个包含类似
的字符串的宏#define BUILD_YEAR_CH0 (__DATE__[ 7])
#define BUILD_YEAR_CH1 (__DATE__[ 8])
#define BUILD_YEAR_CH2 (__DATE__[ 9])
#define BUILD_YEAR_CH3 (__DATE__[ 10])
#define COPY "Copyright"
#define COMPANY "ABCD Lmtd"
#define CYC BUILD_YEAR_CH0 BUILD_YEAR_CH1 BUILD_YEAR_CH2 COMPANY
这样我就可以在需要的地方使用 CYC 宏来打印连接的字符串。
但是一旦我在 CYC 宏中使用 BUILD_YEAR_CH0 宏/令牌,它就会显示错误。
我也尝试过制作一个具有精确年份值的 const char 缓冲区,例如
const char MYEAR[] = { __DATE__[7], __DATE__[8],__DATE__[9],__DATE__[10],'\0' };
但同样,我无法在 CYC 宏中使用它。 仅使用宏而不使用任何变量真的不可能做到这一点吗?
【问题讨论】:
-
constexpr或模板函数可以吗? -
为什么要为宏带来的痛苦烦恼呢?为什么不写一个合适的函数呢?
-
@JesperJuhl 有时您想在二进制文件中嵌入编译日期。
-
A
char不会生成字符串。 -
将显示的代码传递给预处理器并检查其结果。
标签: c++ c visual-studio macros c-preprocessor