При попытке вывести первый аргумент командной строки:
std::cout << argv[0] << std::endl;
Clang-Tidy дает предупреждение:
предупреждение: «не используйте арифметику указателей»
из [cppcoreguidelines-pro-bounds-pointer-arithmetic]
Есть ли альтернативный способ использования значений argv
без использования арифметики указателей? Не имеет доступа к char**
любым разумным методом придется использовать указатель арифметики?
Я ценю, что есть некоторые специализированные функции для обработки аргументов командной строки, но они кажутся слишком тяжелыми для простой печати одного аргумента.
Я пишу в c++
, с использованием clang
компилятор и сборка с cmake
,
От clang-tidy — cppcoreguidelines-pro-bounds-pointer-arithmetic:
Указатели должны ссылаться только на отдельные объекты, а арифметика указателей хрупкая и ее легко ошибиться.
span<T>
является безопасным типом с проверкой границ для доступа к массивам данных.
Так да:
Есть ли альтернативный способ использовать значения argv без использования арифметики указателей? Разве для доступа к символу ** любым разумным методом не нужно использовать арифметику указателей?
Ты полностью прав. Тем не менее, рекомендация заключается в том, чтобы скрыть эту арифметику указателя, позволяя вспомогательному классу выполнять проверки границ перед выполнением арифметики. Вы можете построить span<char*>
от argv
а также argc
,
Других решений пока нет …