【问题标题】:C++ syntax: void CLASS functionName()?C++ 语法:void CLASS functionName()?
【发布时间】:2011-08-17 05:23:29
【问题描述】:

我遇到了一些没有标题的独立代码。我相信它是直接的 C/C++,但不确定。如果是这样,下面的“CLASS”是什么意思?我知道这不是类声明或定义。这是一个名为“CLASS”的类的方法吗?

void CLASS functionName(){
  //
  //
  //
}

我习惯于看到<returnType> <functionName>() {...},但不是上面的。我是不是忘记了什么? (请原谅我,因为我最近一直在研究 JS 和 Objective-C。)

【问题讨论】:

  • 大概有一个#define CLASS隐藏在某处。
  • CLASS 可能是一个宏?你能在某处找到CLASS 的定义吗?

标签: c++ syntax


【解决方案1】:

虽然这不是常见的 AFAIK,但可能是 CLASS 是一个宏,如下所示。因为它的名字是CLASS,我会说它更有可能是一个类或命名空间的宏。

1.类名

class A
{
   void functionName();
};

#define CLASS A::

void CLASS functionName()
{}

2。命名空间

namespace A
{
   void functionName();
};

#define CLASS A::

void CLASS functionName()
{}

3.调用转换

// or __cdecl, etc.
define CLASS __stdcall

4.其他

可能还有其他语法正确的(例如,指针的宏),但在您的情况下不太可能。或者它可能只是一个评论,正如 Hostile 在下面指出的那样。

【讨论】:

  • calling convention 的修饰符,如 _cdecl 或 __fastcall(取决于编译器)。
  • 嗯...如果他们试图以某种非常奇怪的方式获得 C/C++ 互操作性,那么第一个想法是有道理的。没想到!
  • 当然,虽然我通常使用@HostileFork 或缩写为@Fork。 (更重要的是)任何检查属性的自动化工具。我前段时间遇到的一个例子是 INTUSE(用于“内部使用”)在标准库中的应用,例如 printf:hostilefork.com/2010/03/14/…
【解决方案2】:

这绝对不是标准的 C 或 C++,因为在 void 和函数名(例如,使返回类型为 void * 的星号)之间可以合法地插入一些东西。这可能是某个编译器扩展或外部工具正在使用的宏。如果没有关于您在哪里找到此代码的更多信息,我认为我无法提供更多信息;你在哪里找到的?

【讨论】:

  • 这也是我的猜测。来自rawness.es/cielab/?lang=en。他们正在其他地方使用预处理器指令,因此可能正在使用另一个未在此处显示的指令。
  • 虽然我不想假设在这种特殊情况下什么答案是实际上正确的,但如果您查看您发布的 Rawness 链接,它会显示“基于 Jacques Desmis 的工作”谁被列为 Rawtherapee 的贡献者,这表明纯粹的文档是目的(以及我的回答,准确地指出了它所记录的内容)。可能是错的,只是注意到 Jacques Desmis 在 rawtherapee 上的认证在这里:code.google.com/p/rawtherapee/source/browse/…
  • +1 用于询问上下文。 @HostileFork:“dcraw.cc”是谷歌代码搜索返回的文件之一的名称,“dcraw”在引用的原始页面上直接提到。好电话。
【解决方案3】:

我使用了 Google 的代码搜索(有时会派上用场)并在 "rawtherapee" 中找到了一个这样的实例:

http://codesearch.google.com/#search/&q=%22void%20CLASS%22&type=cs&exact_package=http://rawtherapee.googlecode.com/hg/

毫不奇怪,定义是一个宏(几乎没有其他可能),但它只是一个空的#define。定义解释here

所有的全局变量都在这里定义,所有的函数 访问它们以“CLASS”为前缀。请注意,线程安全 C++ 类不能有非常量静态局部变量。

至少在那个项目中,它基本上是用于文档目的,并且有目的地被预处理器剥离。我以前见过这样将指针参数标记为INOUT,有点像MIDL

@EricZ 对可能的 用途做了一个很好的清单。然而,我相当肯定这就是您所看到的,因为 Rawness(您的案例)和 Rawtherapee 之间的作者身份和项目名称重叠......

【讨论】:

  • ++1 谢谢!这个答案特定于我正在查看的原始项目!但是对于一般情况,我将答案授予@Eric Z。
  • 明白了,我的理念也是如此,它可能对大多数未来的访问者更有用......
猜你喜欢
  • 1970-01-01
  • 2012-12-04
  • 2016-08-05
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
相关资源
最近更新 更多