首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

#if的用法,该怎么处理

2012-02-12 
#if的用法想写段代码,在time_t为四个字节时做一个操作,在为8个字节时做另一个操作代码如下,编译不过 提示f

#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());} 

热点排行