#if的用法
想写段代码,在time_t为四个字节时做一个操作,在为8个字节时做另一个操作
代码如下,编译不过
提示fatal error C1017: 无效的整数常量表达式
- C/C++ code
inline time64_t chg_time_t(time_t *now){#if (sizeof (time_t) == 4) return *now;#else //将now转成64位#endif}不知道怎么改 我看别人类似这样的代码能编译过的
http://www.goodsoft.cn/blog/post/Preprocessor.html
[解决办法]
这通过预处理是做不到的。因为sizeof是一个关键字,用于编译期计算time_t的大小,这不是常量,无法用在预处理表达式里。
[解决办法]
在编译开始的时候编译器调用预处理器处理那些预处理指令比如#if。sizeof是操作符,只有编译器认识,在预处理期间预处理器不认识sizeof这家伙,所以就发疯了
[解决办法]
- C/C++ code
struct size4 { };struct sizenot4 { };template <int s>struct Size{ typedef sizenot4 size_type;};template <>struct Size<4>{ typedef size4 size_type;};time64_t do_chg_time_t(time_t *now, size4){ return *now;}time64_t do_chg_time_t(time_t *now, sizenot4){ // do something or ... return time64_t();}time64_t chg_time_t(time_t *now){ return do_chg_time_t(now, Size<sizeof(time_t)>::size_type());}