gpt4 book ai didi

c++ - CPP : Escaping macro identifiers

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:43 25 4
gpt4 key购买 nike

有没有办法在 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”是错误的。

有没有办法在不更改宏名称或将其字符串化的情况下转义代码中的“高度”?

最佳答案

您可以:

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

第一个在取消定义后丢失了信息。如果广泛使用宏,则第二个是不切实际的。

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

关于c++ - CPP : Escaping macro identifiers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com