#if的用法,该怎么处理
#if的用法
想写段代码,在time_t为四个字节时做一个操作,在为8个字节时做另一个操作
代码如下,编译不过
提示fatal error C1017: 无效的整数常量表达式
不知道怎么改 我看别人类似这样的代码能编译过的
http://www.goodsoft.cn/blog/post/Preprocessor.html
------解决方案--------------------
这通过预处理是做不到的。因为sizeof是一个关键字,用于编译期计算time_t的大小,这不是常量,无法用在预处理表达式里。
------解决方案--------------------
在编译开始的时候编译器调用预处理器处理那些预处理指令比如#if。sizeof是操作符,只有编译器认识,在预处理期间预处理器不认识sizeof这家伙,所以就发疯了
------解决方案--------------------
想写段代码,在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()); }