Можно ли настроить GCC на игнорирование директив #pragma? - PullRequest
0 голосов
/ 09 января 2019

Мы компилируем и запускаем пользовательские программы C ++ в среде песочницы с помощью следующей команды компиляции:

g++ -std=gnu++11 -O2 -o program.exe program.cpp
Однако пользователи могут переопределить флаги компиляции, используя директивы pragma. Например, уровень оптимизации может быть переопределен с помощью этого кода:
#pragma GCC optimize("Ofast")
У нас нет контроля над исходным кодом, который передается для компиляции, но мы должны предотвратить переопределение параметров компиляции.

Есть ли способ игнорировать директивы прагмы в GCC?

1 Ответ

0 голосов
/ 09 января 2019

При быстром просмотре справочной страницы ответ «Нет», gcc не имеет функции «отключить прагмы».

В качестве действительно нелепого обходного пути вы можете просто потребовать, чтобы все записи полностью пропускали строку pragma (без учета регистра, чтобы блокировать оператор _Pragma ), отвергая любые, которые нарушают это требование. , Что-нибудь более сложное, чем это, по сути, повлечет за собой написание собственного синтаксического анализатора исходного кода C, и я сомневаюсь, что это стоит того. Не совсем уверен, что это сработает, учитывая приемы конкатенации токенов, которые вы можете играть с препроцессором (я жду комментария, демонстрирующего такой эксплойт).

...