【问题标题】:too few arguments provided to function-like macro invocation提供给类似函数的宏调用的参数太少
【发布时间】:2020-12-18 05:44:48
【问题描述】:

我的项目在 Win32 平台上成功编译。现在我必须关闭“经典 Borland 编译器”,因为我想像这样使用指定初始化器:

struct test_s test = { .first = 1, .third = 3, .second = 2 };

当“经典 Borland 编译器”关闭时,我收到以下错误消息;

[bcc32c Error] codecvt(131): too few arguments provided to function-like macro invocation
  std_compat.h(7): macro 'max' defined here

我在 Win64 目标上遇到了同样的问题。

我的项目在 C++Builder 10.1 中编译没有问题,但是当我尝试在 10.4 中编译时,我遇到了这个问题。

我该如何解决?

【问题讨论】:

  • test_s 是如何定义的?指定的初始化顺序必须与声明顺序一致。
  • 我认为问题中没有足够的信息。报告错误的行中包含令牌max。这是一个宏(可能在标准库中定义)。这显然会扩大到那里的胡言乱语。您是否还尝试在代码中命名 max

标签: c++builder c++builder-10.4-sydney


【解决方案1】:

通过从我的一些包含文件中删除以下包含并仅在 cpp 中使用它来解决问题。但是它在 10.1 中工作并且非常简单。

//- contents of std_compat.h -----------------------------------------------------

#ifndef std_compatH
#define std_compatH

#define min( a, b ) (a) < (b) ? (a) : (b)
#define max( a, b ) (a) > (b) ? (a) : (b)

#endif

【讨论】:

  • 标准 C++ 库有 std::min()std::max() 算法,你应该使用它们而不是这样的预处理器宏。
猜你喜欢
  • 1970-01-01
  • 2016-10-28
  • 2017-04-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2017-10-25
相关资源
最近更新 更多