Синтаксис C ++: void CLASS functionName ()? - PullRequest
0 голосов
/ 17 августа 2011

Я наткнулся на какой-то отдельный код без заголовков. Я считаю, что это прямой C / C ++, но я не уверен. Если так, что означает «КЛАСС» в следующем? Я знаю, что это не объявление или определение класса. Это метод класса с именем "CLASS"?

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

Я привык видеть <returnType> <functionName>() {...}, но не выше. Я что-то забыл? (Простите меня, поскольку я был в JS и Objective-C в последнее время.)

Ответы [ 3 ]

4 голосов
/ 17 августа 2011

Хотя это не обычный 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. Другие

Могут быть и другие (например, макрос для указателя), которые синтаксически правильны, но они менее вероятны в вашем случае. Или это может быть просто комментарий, как враждебно указывает ниже.

2 голосов
/ 17 августа 2011

Это определенно не стандарт C или C ++, так как есть только несколько вещей, которые юридически могут находиться между void и именем функции (например, звездочка, чтобы сделать тип возврата void *).Вероятно, это макрос, который используется некоторым расширением компилятора или внешним инструментом.Без дополнительной информации о том, где вы нашли этот код, я не думаю, что смогу предложить больше, чем это;где ты это нашел?

1 голос
/ 17 августа 2011

Я использовал Google Code Search (который иногда может пригодиться) и нашел такой пример в "rawtherapee" :

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

Не удивительноопределение - это макрос (мало что еще может быть), но это просто пустой #define.Определение объясняется здесь :

Здесь определены все глобальные переменные, и все функции, которые обращаются к ним, имеют префикс «CLASS».Обратите внимание, что потокобезопасный класс C ++ не может иметь неконстантные статические локальные переменные.

По крайней мере, в этом проекте он в основном используется для целей документирования и намеренно удаляется препроцессором.Я видел, как это делалось, отмечая параметры указателя как IN или OUT, как в MIDL .

@ EricZ сделал хороший инвентарь возможным использует.Тем не менее, я уверен, что это то, что вы видите, потому что авторство и название проекта совпадают между Rawness (ваш случай) и Rawtherapee ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...