【问题标题】:error using restrict keyword使用限制关键字出错
【发布时间】:2009-09-08 17:59:56
【问题描述】:

在以下示例中:

void foo (double *ptr)
{
     const double * restrict  const restr_ptr=ptr;
}

我得到这个错误:

error: expected a ";"      const double * restrict  const restr_ptr=ptr;
                                                      ^

我使用 -std=c99 编译,使用 gcc 3.4

有什么想法吗?

【问题讨论】:

  • 它对我来说编译得很好。你有最新版本的 GCC 吗?
  • 该代码在 Sun C 5.8 和 GCC 3.4.6 上为我编译。 Comeau online 只抱怨未使用的变量声明。请提供有关您的环境的更多详细信息。
  • ...但 Comeau 处于 C99 模式。当我将它置于 C++ 模式时,它会抱怨同样的事情。
  • 我应该在我的上一条评论中更具体地说明“同一件事”的含义。在 C++ 模式下,Comeau 说它需要一个分号,就像 Enigma 的编译器一样。
  • 那不是有效的 C++ 代码,因此它不能在 C++ 模式下工作。 restrict 仅限于 C99。

标签: c++ c optimization restrict-qualifier


【解决方案1】:

在 C++ 中,restrict 不是关键字(Microsoft extensions 除外)。这并不意味着它在 C 中的作用。看起来好像您尝试将 C99 模式应用于 C++ 编译器。使用 C 编译器编译 C 代码,使用 C++ 编译器编译 C++。两种语言都不是另一种语言的子集。

【讨论】:

  • 啊,解释一下。我无法使用 C 编译器进行编译,因为我使用了使用限制的 C++ 功能。有什么解决方法(如果有的话)?
  • 试试__restrict。看起来它是 GCC 扩展以及 Microsoft 扩展。考虑用一个宏来抽象它,这样非 GCC、非 MS 编译器就不会阻塞它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 2021-11-14
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多