【发布时间】:2023-03-15 09:03:01
【问题描述】:
有没有办法在 c 预处理器 (cpp) 中转义宏名称(标识符)?
我想用可读的宏名称条件化一些网络代码(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;
}
但是“line-480”是错误的。
有没有办法在代码中转义“高度”而不更改宏名称或对其进行字符串化?
【问题讨论】:
-
这是大多数宏都使用大写字母的原因之一。
-
但是大写marco标识符一般不会解决问题,只能最小化它。想象一个宏标识符“A”和一个带有文本的 html 站点。然后每个 A 都将替换为宏的值!
-
通过使用大写和用下划线装饰等技巧,您可以解决您的问题,即使解决方案与您在问题中描述的不同.
-
我认为 CPP 不是完成这项任务的好工具。
-
恭喜:这是我见过的最可疑的 CPP 用法之一。