Безопасная инициализация потока строки от getenv (переменная среды)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Безопасная инициализация потока строки от getenv (переменная среды)

Сообщение Anonymous »

У меня есть проект с плотным уровнем статического анализа Clang-Tidy.

Код: Выделить всё

int main() {
char const* ompi_size_cstr = std::getenv("OMPI_COMM_WORLD_SIZE");
...
}
< /code>
(не так уж и значение переменной). < /p>
Но теперь я получаю это предупреждение: < /p>
/builds/user/mpi3/environment.hpp:49:51: error: function is not thread safe [concurrency-mt-unsafe,-warnings-as-errors]
const char* ompi_size_cstr = std::getenv("OMPI_COMM_WORLD_SIZE");
Во-первых, если я посмотрю на документацию, https://en.cppreference.com/w/cpp/utili ... ram/getenv, он говорит, что функция безопасен с момента C ++ 11 (я использую C ++ 17).
, но, возможно, предупреждение о том, что в рамках сцена, который может изменить сцена, может изменить сцена, может изменить сцена. /> Второе, даже если в некотором смысле это не безопасно: Что я могу с этим поделать? Существует ли каноническое решение для использования getenv ? ,
Например, заблокировав вручную вручную get_env_mtx mutex или, возможно, сделав мою переменную объявление Static ? Как в, < /p>

Код: Выделить всё

static const char* ompi_size_cstr = std::getenv("OMPI_COMM_WORLD_SIZE");
< /code>
или < /p>
static std::string ompi_size_cstr = std::getenv("OMPI_COMM_WORLD_SIZE");
Конечно, я также могу ввести исключение из правила, // nolint (complornence-mt-unsafe) , но я хотел знать, есть ли исправление, которое я могу выразить в качестве лучшего кода.
Было бы также хорошо, чтобы улучшить код, даже если в конце я должен добавить nolint . Clang-tidy версия 14.0.6 и в C ++ 17.

Подробнее здесь: https://stackoverflow.com/questions/744 ... t-variable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»