Директива #pragma argsused и Visual Studio 2017

327
29 января 2018, 06:30

Добрый день.

Скачал себе Visual Studio 2017. Транслирую старый проект, а в нем есть директивы #pragma argsused. И мне Visual Studio 2017 на голубом глазу выдает сообщение:

warning C4068: неизвестная директива pragma

Вопросы:

  1. Что это? Новая мода? Сколько лет производители компиляторов писали предупреждения, если параметр функции не используется и требовали явно указывать pragma argsused. И вдруг "неизвестная директива pragma".

  2. Что же мне теперь весь код перелопачивать, вычеркивая pragma argsused?

  3. А как другие трансляторы, GCC например? Тоже перестали понимать pragma argsused?

Спасибо.

Answer 1

Да, вам следует перелопатить весь код, удаляя #pragma argsused и вставляя надлежащие блоки для указания, что параметр функции не используется. При желании такой блок можно спрятать в макрос.

void foo(int value)
{
    static_cast<void>(value); // not used

альтернативный вариант c использованием стандартного C++17 аттрибута maybe_unused

void foo([[maybe_unused]] int value)

Существенным моментом является то, что argsused всегда подавляет предупреждения сразу для всех аргументов, даже если часть из них не является потенциально неиспользуемыми.

READ ALSO
Окно появляется и сразу исчезает

Окно появляется и сразу исчезает

Я хочу вывести График, после нажатой кнопкиНо у меня окошко появляется и сразу исчезает

207
QT, C++, Linux и Vim

QT, C++, Linux и Vim

Недавно решил перейти к изучению С++ и QT (до этого изучал Си) и хотел прояснить несколько вещей для себяПрошу не ругать меня строго, так как...

317
Разбить элементы массива на группы и преобразовать их

Разбить элементы массива на группы и преобразовать их

Помогите, пожалуйста, решить задачу по программированию в с++Разбить элементы массива на группы по 4

235