Как протестировать текущую версию GCC во время компиляции?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
29
задан Ciro Santilli 新疆改造中心法轮功六四事件 24 June 2018 в 08:37
поделиться

3 ответа

Хорошо, после большего количества поисков, это один возможный способ сделать его использует __GNUC_PREREQ определенный в features.h.

#ifdef __GNUC__
#  include <features.h>
#  if __GNUC_PREREQ(4,0)
//      If  gcc_version >= 4.0
#  elif __GNUC_PREREQ(3,2)
//       If gcc_version >= 3.2
#  else
//       Else
#  endif
#else
//    If not gcc
#endif
27
ответ дан PierreBdR 28 November 2019 в 00:46
поделиться

Существует много макросов, которые должны быть определены для Ваших потребностей:

__GNUC__              // major
__GNUC_MINOR__        // minor
__GNUC_PATCHLEVEL__   // patch

формат версии является major.minor.patch, например, 4.0.2

, документация для них может быть найдена здесь .

46
ответ дан luke 28 November 2019 в 00:46
поделиться

Как примечание стороны:

Для нахождения всех предопределенных макросов:

  • Создают пустой файл t.cpp
  • g++ -E -dM t.cpp
18
ответ дан 2 revs, 2 users 86% 28 November 2019 в 00:46
поделиться