找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 294|回复: 2

Question10.13:Does the sizeof operator work in preprocessor #if directives?

[复制链接]

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-7-1 14:38:41 | 显示全部楼层 |阅读模式

Q: Does the sizeof operator work in preprocessor #if directives?
A: No. Preprocessing happens during an earlier phase of compilation, before type names have been parsed. Instead of sizeof, consider using the predefined constants in ANSI&#39;s <limits.h>, if applicable, or perhaps a ``configure&#39;&#39; script. (Better yet, try to write code which is inherently insensitive to type sizes; see also questions 1.1 and 1.3.)

210

主题

371

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2013-7-1 14:49:43 | 显示全部楼层
问题:sizeof操作可以在预处理指令#if起作用么?
回答:不可以。预处理操作是发生在编译的早期阶段,是在类型名字被解析之前的。作为替代,可以考虑使用在ANSI’s 的<limits.h>文件中被预先定义好的常量,或者是“配置”脚本(更好的办法则是试着与类型无关的代码,参考问题1.1和1.3)。

14

主题

65

回帖

0

积分

新手上路

积分
0
发表于 2013-7-2 00:10:11 | 显示全部楼层
以前遇到过这个问题,大意是这样的。有一个用于接发消息的结构体,经常有改动,一般是加字段。为了正常接发消息,这个结构体的大小不能超过32KB,否则接发的码流会窜位。
为了能尽早地定位出是因为加字段导致结构体大小超过上限的问题,当时想了个办法,加个预编译指令:如果sizeof(结构体)大于等于32KB,报告一条编译错误信息,并停止编译。

结果可以想象,正如上面所说的那样,这个想法并不能实现,呵呵。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 12:32 , Processed in 0.080443 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表