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的最佳选择.我已经看到它用在生产代码中,这样的东西是必要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |