【问题标题】:cpp inserts additional space between tokenscpp 在标记之间插入额外的空间
【发布时间】:2009-06-08 11:06:48
【问题描述】:

我试图强制 gnu - cpp 保留特殊的 cmets,例如 /*+ ... /,因为我需要它们作为优化器提示。它与 xlc (AIX) 的 cpp 配合得很好,但现在我在斜杠和加号 (/) 之间增加了一个空格?

例如:

$ cat cpp-test.sql
#define _STAR *
#define OPT_HINT(x) /_STAR+ x _STAR/

select OPT_HINT(INDEX(TABLE table_pk)) * from table

$ /usr/bin/cpp -E < cpp-test.sql
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "<stdin>"

select / *+ INDEX(TABLE table_pk) */ * from table

$

我希望得到“select /*+ INDEX(TABLE table_pk) */ * from table”。

有什么建议吗?

最好的问候

德克

【问题讨论】:

    标签: c++ gcc


    【解决方案1】:

    您可以使用 ## 预处理器运算符将标记粘贴在一起:

    #define F foo
    #define B bar
    
    F##B
    

    生产

    foobar
    

    但请注意,cpp 旨在成为 C(和 C++)预处理器 - 它不应该是通用工具。如果您真的想做这类事情,请查看替代宏处理器,例如 m4。

    另请注意,构建 cmets 不适用于 C 或 C++ 代码,因为它们在与宏不同的预处理器阶段进行处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 2017-09-25
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多