Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
C & компиляторы C++ игнорируют закрывший кавычки пробел (за исключением>> шаблонная проблема), таким образом заставление макроса испустить новые строки действительно не имеет смысла. Можно сделать макро-промежуток несколькими строками путем окончания каждой строки макроса с обратной косой чертой, но это не производит новые строки.
Это не возможно. Только было бы необходимо при рассмотрении списка вывод препроцессора или файлы.
А общая техника в записи макросов так, чтобы их было легче считать, должна использовать \символ для продолжения макроса на следующую строку.
я (верят I) видел компиляторы, которые включают новые строки в расширенные макросы в списке вывода - для Вашего преимущества. Это только имеет применение для нас бедные люди, читающие расширенные макросы, чтобы попытаться понять то, что мы действительно попросили, чтобы компилятор сделал. это не имеет никакого значения к компилятору.
C & языки C++ рассматривают весь пробел за пределами строк таким же образом. Так же, как разделитель.
Компилятор C знает о пробеле, но это не различает пробелы, вкладки или новые строки.
, Если Вы имеете в виду, как, у меня есть новая строка в строке в макросе, тогда:
#define SOME_STRING "Some string\n with a new line."
будет работать.
Не совсем уверенный, что Вы спрашиваете здесь. Вы хотите макрос на нескольких строках?
#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
Используйте \в конце строки. Я видел много C macos, где они используют..., в то время как (0)
#define foo() do \
{
//code goes here \
\
\
}while(0);
кроме того, не забудьте использовать круглые скобки во многих экземплярах.
Пример:
#define foo(x) a+b
//should be
#define foo(x) (a+b)
Используйте \
, как так:
#define my_multiline_macro(a, b, c) \
if (a) { \
b += c; \
}