Как генерировать новую строку в cpp макросе?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

37
задан jww 2 July 2018 в 14:41
поделиться

6 ответов

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

8
ответ дан Mike Thompson 27 November 2019 в 05:02
поделиться

Это не возможно. Только было бы необходимо при рассмотрении списка вывод препроцессора или файлы.

А общая техника в записи макросов так, чтобы их было легче считать, должна использовать \символ для продолжения макроса на следующую строку.

я (верят I) видел компиляторы, которые включают новые строки в расширенные макросы в списке вывода - для Вашего преимущества. Это только имеет применение для нас бедные люди, читающие расширенные макросы, чтобы попытаться понять то, что мы действительно попросили, чтобы компилятор сделал. это не имеет никакого значения к компилятору.

C & языки C++ рассматривают весь пробел за пределами строк таким же образом. Так же, как разделитель.

8
ответ дан itj 27 November 2019 в 05:02
поделиться

Компилятор C знает о пробеле, но это не различает пробелы, вкладки или новые строки.

, Если Вы имеете в виду, как, у меня есть новая строка в строке в макросе, тогда:

#define SOME_STRING "Some string\n with a new line."

будет работать.

4
ответ дан Peter Mortensen 27 November 2019 в 05:02
поделиться

Не совсем уверенный, что Вы спрашиваете здесь. Вы хотите макрос на нескольких строках?

#define NEWLINE_MACRO(x) line1 \
line2 \
line3

Кроме того, если требуется включать литерал в макрос:

#define NEWLINE_MACRO(x) ##x

то, что Вы Вы вставляете x, будет помещено вместо ##x, таким образом:

NEWLINE_MACRO( line1 ) // is replaced with line1

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

Также:

#define NEWLINE_MACRO(x) #x // stringify x

поместит кавычки вокруг x

-3
ответ дан PiNoYBoY82 27 November 2019 в 05:02
поделиться

Используйте \в конце строки. Я видел много C macos, где они используют..., в то время как (0)

#define foo() do \
{
  //code goes here \
  \
  \
}while(0);

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

Пример:

#define foo(x) a+b
//should be
#define foo(x) (a+b)
-3
ответ дан Charles Graham 27 November 2019 в 05:02
поделиться

Используйте \, как так:

#define my_multiline_macro(a, b, c) \
if (a) { \
    b += c; \
}
-3
ответ дан Peter Mortensen 27 November 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: