Избегайте арифметических указателей c, исправьте ошибку при входе - PullRequest
1 голос
/ 12 января 2020

Возможно ли решить следующую проблему, которую выбрасывает приборка. error: do not use pointer arithmetic [cppcoreguidelines-pro-bounds-pointer-arithmetic,-warnings-as-errors]

Проект, который я использую, представляет собой смесь C / C ++, и никакие изменения не могут быть сделаны на стороне C.

extern const Test_Ptr* test;
auto enable = (Test_Ptr->pIndex[1].base == 1)
                        ? true
                        : false;

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Это предупреждение (вызванное ошибкой в ​​вашей конфигурации), откровенно говоря, глупо.

Вы можете обойти это, но только сделав свой код сложнее , чтобы следовать и поддерживать.

Просто выключите cppcoreguidelines-pro-bounds-pointer-arithmetic.

0 голосов
/ 12 января 2020

Обернуть указатель в диапазон и получить доступ через него:

// these should be defined somewhere in the C library in some form
constexpr std::size_t pIndexLength = 2;  // or whatever is the actual length
using T = decltype(*test);               // or whatever the pointed type is

span<T> pIndex {Test_Ptr->pIndex, pIndexLength};
int base = pIndex[1].base;

Стандартной реализации span до C ++ 20 не существует, поэтому в более старой языковой версии вам нужно использовать не стандартная реализация.

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

...