【问题标题】:Preprocessor macro with commas in C++C++ 中带逗号的预处理器宏
【发布时间】:2014-01-25 02:26:37
【问题描述】:

我正在学习 arcsynthesis OpenGL 教程,该教程经常使用宏,我一直在阅读我应该尽可能避免使用的内容。我想知道是否有另一种方法可以在不手动填写值的情况下执行以下操作(或者我应该这样做):

#define GREEN_COLOR 0.75f, 0.75f, 1.0f, 1.0f

const float vertexData[] = {
    ..., //Vertex positions

    GREEN_COLOR,
    GREEN_COLOR,
    GREEN_COLOR,

    ..., //Rest of the colors
} 

【问题讨论】:

  • 目前还不清楚你想用这个宏做什么。您是否只是想自动创建数组以获得这些值?
  • 差不多,这将创建一个地方来更改绿色的值,而不必在多个地方进行编辑。
  • 我想不出更简单的方法来做到这一点。为了减轻您对宏的担忧,您可以在声明 vertexData 之后立即#undef GREEN_COLOR;这样它就达到了它的目的,但以后不能被滥用。
  • 好的,那行得通。 GREEN_COLOR 可能会保持不变,但如果我想用另一个概念来做这件事,那就太好了。
  • 这对我来说听起来是个非常糟糕的主意。

标签: c++ arrays macros c-preprocessor


【解决方案1】:

预处理器不关心逗号、空格、。它将它们视为任何其他字符,并简单地用它们进行文本替换。唯一需要注意的是换行符,但行尾的 \ 也可以处理它们。例如:

#define GREEN_COLOR 0.75f,\
                    0.75f,\
                    1.0f, \
                    1.0f

【讨论】:

  • 好吧,也许这是宏工作最好的时期之一。
  • @bitrayne 如果你深入研究 boost 源代码头文件,还有更多内容
猜你喜欢
  • 2019-11-29
  • 2020-02-09
  • 2017-01-10
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2018-08-20
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多