nitrous_007 Ответов: 2

Понимание расширенного кода C++ #define оператор


Вот пример оператора define в моем коде, показанном ниже в разделе определение заголовка. Он используется, как показано далее ниже кода в разделе использование заголовка. Вот мои вопросы, если вы можете помочь.
1) я предполагаю, что '>CMAR_ENTRY_CHILD_REF2' заменяется на '(mMar, parenthesizedArgList)' везде, где я его использую. Является ли это точным утверждением?
2) Если приведенное выше утверждение 1) верно, то функция не имеет имени? Я никогда раньше не видел этого в C++. Можно ли определить функцию без имени?
3) Что такое '\' в коде сразу после кода 'parenthesizedArgList' и после 'parenthesizedArgList)\{'?
4) Если у вас есть какие-либо ссылки, которые объясняются ниже, пожалуйста, дайте мне знать. Это трудно найти в google.

//Определение
#define CMAR_ENTRY_CHILD_REF2(mMar, parenthesizedArgList)\
	{\  
            string name=""; 
            //More code below
    };

//Использование
CMAR_ENTRY_CHILD_REF2(m_array[0], (strName, GetSafeArraye(curve)));


Что я уже пробовал:

я посмотрел в интернете. На данный момент я понимаю основные определения операторов.

Richard MacCutchan

Я не совсем понимаю, чего вы пытаетесь достичь с помощью этого, но это не лучший способ писать функции C++.

nitrous_007

Извините, когда я сказал, что это был "мой код", я имел в виду код компании. Это не мой код. Я вижу около 100 функций, определенных, как указано выше. Я просто пытаюсь понять, что это значит.

Также прошу прощения за двойной пост. Я попытался опубликовать, и codeproject дал мне ошибку, и я, хотя мой первоначальный пост не публиковался. Я удалил старый пост. Codeproject кажется медленным и немного глючным. Когда я пытаюсь удалить свой первоначальный пост, он продолжает вращаться. Мне пришлось обновить страницу вручную, чтобы увидеть, что сообщение было удалено. Мой интернет и браузер(Chrome) хороши и раньше не имели никаких проблем на работе.

Richard MacCutchan

Если вы не понимаете этот код, то вряд ли я смогу это сделать. Тем более что большая часть кода и фактического использования отсутствует.

Что касается вашей проблемы размещения, CodeProject обычно имеет что-то более 50 000 пользователей в интернете, так что иногда он может быть немного медленным в ответе. Это не значит, что он глючит.

nitrous_007

Теперь я это понимаю. Это был просто токен #define identifier ( identifieropt,...,identifieropt)-stringopt в ссылке, которую вы разместили.

Так что в 1 случае страница разбилась. В другом случае страница висела в течение 2 минут. Вероятно, это не ошибка, а просто проблема с ресурсами.

2 Ответов

Рейтинг:
17

Richard MacCutchan

Видеть #директива define (C/C++) | Microsoft Docs[^]


Рейтинг:
1

KarstenK

Ричард прав, связывая вас с документацией.

Я бы посоветовал вам это сделать НЕ используйте такие макросы, потому что они приводят к проблемам и делают код нечитаемым, глючным, нестабильным и проблематичным для отладки. Лучше объявить такие вещи в классе и некоторых функциях.

Держаться подальше от неприятностей это пуленепробиваемая стратегия успеха ;-)


nitrous_007

Спасибо. Я дам знать одному из старших разработчиков и узнаю его мнение. Я ненавижу определения вообще, если они не просты. Я видел некоторые случаи, когда они могут пойти не так. Это не мой код, но я должен позаботиться об этом коде в настоящее время.