有没有办法逃避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的最佳选择.我已经看到它用在生产代码中,这样的东西是必要的.