Что такое значение _v (l) в макросе?

Другое событие 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));
}

-1
задан AJFarmar 4 April 2019 в 23:29
поделиться

2 ответа

Макрос _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);
0
ответ дан cfillion 4 April 2019 в 23:29
поделиться

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

Чтобы увидеть, к чему расширяется макрос, запустите gcc -E только для предварительной обработки кода, но не для его компиляции. Проведите небольшое исследование об этом -E компьютерном варианте, он также полезен во многих подобных случаях.

0
ответ дан Roland Illig 4 April 2019 в 23:29
поделиться
Другие вопросы по тегам:

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