Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Макрос _v
определен в vec.h в строке 207 :
#define _v(var) _vec_##var
Это дополняет _vec_
до var
. Вы можете убедиться в этом, попросив ваш любимый компилятор напечатать вывод этапа препроцессора (флаг -E
для clang / gcc и /E
для msvc).
#define _v(var) _vec_##var
word _v(l) = vec_len (V);
Расширяется на:
word _vec_l = vec_len (V);
Это переменная, имя которой генерируется. Имя, вероятно, включает текущий номер строки, чтобы сделать его уникальным. Поэтому использование этого макроса дважды в строке может работать, а может и не работать.
Чтобы увидеть, к чему расширяется макрос, запустите gcc -E
только для предварительной обработки кода, но не для его компиляции. Проведите небольшое исследование об этом -E
компьютерном варианте, он также полезен во многих подобных случаях.