代码之家  ›  专栏  ›  技术社区  ›  MBZ

用较少的参数调用C++宏

  •  1
  • MBZ  · 技术社区  · 14 年前

    是否可以调用类似宏这样的函数,而不必使用Linux中的所有参数? 实际上,这样做只会在Visual Studio中生成警告(警告4003),未分配的变量将替换为“”。

    但是使用g++编译它会在Linux中产生一个错误(“错误:宏***需要**参数,但只提供**)。

    是否有任何可能的方法来禁用或克服它?

    2 回复  |  直到 8 年前
        1
  •  2
  •   James McNellis    14 年前

    宏调用中的参数数目必须与宏定义中的参数数目完全匹配。因此,不,不能调用参数少于参数的宏。

    要“克服”它,可以使用不同数量的参数定义多个不同名称的宏。

    C++0x(这还不是标准的,但是编译器可能部分支持)增加了对可变宏的支持,这些变量可以用可变数量的参数调用。

        2
  •  2
  •   Matthew Flaschen    14 年前

    标准(_§16.3-宏替换)很明显,您必须传递相同数量的参数:

    “如果宏中的标识列表 定义不以 省略号,参数数目 (包括那些由 无预处理标记)在 调用类似宏的函数 应等于参数个数 在宏定义中。”

    我不知道有任何g++选项可以覆盖这个。