Примечание: я только что понял, что заголовок вашего вопроса кажется неуместным - вы получили предупреждение от macOS о выполнении программы, в которой используется gets()
. Это не имеет ничего общего с компиляцией с использованием G CC.
: - / В любом случае, я оставляю свой ответ живым для справки.
Так же, как комментарий: я немного погуглил то, что вы ищете, но, похоже, нет надежного способа отключить это предупреждение при выполнении программы. Один предложил перестроить /usr/lib/libSystem.B.dylib
без каких-либо результатов или опыта, если это действительно работает, но я лично считаю, что это слишком экстремально и даже может быть вредно. - Я не рекомендую эту технику.
Если вы действительно хотите создать программу-эксплойт, попробуйте пересобрать gets()
с помощью функции, созданной с помощью функции costum, и назовите функцию немного иначе, например, fe gets_c()
. Это должно быть обходным путем, чтобы отключить это предупреждение в macOS.
Старый ответ (относительно самого G CC):
Во-первых, похоже, вы используете компилятор, совместимый с C99 или C89 / C90, или компилируете его с помощью std=c99
или std=c89
/ Параметр std=c90
, потому что только компиляторы, соответствующие стандартам, предшествующим C11, предупреждают об устаревании gets()
.
ISO / IEC удалена функция gets()
в C11. Если вы компилируете с помощью C11 или более нового компилятора, совместимого со стандартами, вы получите ошибку о неявном объявлении gets()
при использовании его в коде:
" error: неявное объявление функции 'gets'
; вы имели в виду 'fgets'
? [-Werror=implicit-function-declaration
]"
Если вы хотите подавить предупреждение при компиляции, используйте параметр -Wno-deprecated-declarations
при компиляции, чтобы отключить диагностику c для устаревших объявлений.
Из онлайн-документации G CC:
-Wno-deprecated-декларации
Не предупреждать об использовании функций, переменных и типов, помеченных как устаревшие с помощью атрибута deprecated. (см. Атрибуты функций, см. Атрибуты переменных, см. Атрибуты типа.)
Источник: https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Warning-Options.html
Если вы хотите встроить подавление предупреждения в вашем коде используйте подход, использованный в удаленном ответе Дэвида, реализующий подавление для -Wno-deprecated-declarations
с помощью #pragma
:
char str[256];
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
gets(str);
#pragma GCC diagnostic pop