加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – CPP:转义宏标识符

发布时间:2020-12-16 07:28:00 所属栏目:百科 来源:网络整理
导读:有没有办法逃避c预处理器(cpp)中的宏名称(标识符)? 我想条件化一些具有可读宏名称的Web代码(html,css …). 条件css文件的示例: /*root*/some rootcode#if height==480/* height 480 */.page { line-height:23px;}#elif height480/* height 480 */.page { l
有没有办法逃避c预处理器(cpp)中的宏名称(标识符)?

我想条件化一些具有可读宏名称的Web代码(html,css …).

条件css文件的示例:

/*root*/
some rootcode

#if height==480
/* height 480 */
.page {
    line-height:23px;
}

#elif height<480
/* height < 480 */
.page {
    line-height:46px;
}

#endif

调用

cpp -P -D height=480 -oout.css css.ccss

结果(删除换行符后)

some rootcode
.page {
    line-480:23px;
}

但“480行”是错误的.

有没有办法逃避代码中的“高度”而不更改宏名称或字符串化?

解决方法

你可以:

1)取消定义宏:

#undef height

2)使用类似标准的大写重命名宏:

#define HEIGHT

3)在处理文件之前使用警卫:

#if height==480
#define HEIGHT_480
#undef height
#endif

#if height>480
#define HEIGHT_OVER_480
#undef height
#endif

/*root*/
some rootcode

#if HEIGHT_480
/* height 480 */
.page {
    line-height:23px;
}

#elif HEIGHT_OVER_480
/* height < 480 */
.page {
    line-height:46px;
}

#endif

第一个在undefine之后丢失信息.如果广泛使用宏,第二个是不切实际的.

第三个是IMO的最佳选择.我已经看到它用在生产代码中,这样的东西是必要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读