【问题标题】:Is Boost using legal C++ preprocessing directive syntax?Boost 是否使用合法的 C++ 预处理指令语法?
【发布时间】:2012-08-08 09:59:59
【问题描述】:

我的(相对较旧的)C++ 编译器在 Boost 中被 this 文件阻塞,该文件开头为:

# /* Copyright (C) 2001
#  * Housemarque Oy
#  * http://www.housemarque.com
#  *
#  * Distributed under the Boost Software License, Version 1.0. (See
#  * accompanying file LICENSE_1_0.txt or copy at
#  * http://www.boost.org/LICENSE_1_0.txt)
#  */
#

这真的是合法的 C++ 吗?预处理器标记的语法规则是什么?

【问题讨论】:

  • 哦不!别告诉我你也用 Turbo C++!!
  • @CodyGray:天哪,不!这是一个旧的 VC 编译器。
  • 什么版本,VC 4.0?我很好奇你为什么不能升级
  • @Viet:6.0。这只是对库的兼容性测试;我已经升级了。

标签: c++ boost syntax c-preprocessor boost-preprocessor


【解决方案1】:

是的,标准 §16 [cpp] 明确允许仅包含 # 和空格的行:

控制线:
# include pp-tokens 换行
# define 标识符替换列表换行
# define identifier lparen identifier-listopt) replacement-list new-line
# define 标识符 lparen ... ) 替换列表换行
# define identifier lparen identifier-list, ... ) replacement-list new-line
# undef 标识符换行
# line pp-tokens 换行
# error pp-tokensopt 换行
# pragma pp-tokensopt 换行
#换行

请注意,在翻译阶段 3 即预处理器之前,cmets 被空格替换。

【讨论】:

  • +1。最后一个是我一直在寻找的,实际上回答了这个问题:# new-line
  • @Nawaz:OP 询问“预处理器标记的语法规则是什么”,因此提供一些上下文不会受到伤害。
  • @Nawaz:哈哈,看看我帖子的编辑历史,很有趣。 :)
  • 为什么 boost 评论和添加空白预处理器令牌?这样做而不是使用简单的常规块注释有什么好处吗?
  • @LieRyan:查看相关链接的文件。作者决定用# 开始文件中的all 行更容易。就是这样的编码风格。我个人不喜欢它。
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
相关资源
最近更新 更多