Классическая программа 'lint' была очень гибкой в отношении функций, которые возвращали значение, которое было проигнорировано. Проблема заключалась в том, что многие из этих предупреждений были нежелательными, что приводило к чрезмерному шуму в выводе ворса (он собирал кусочки пуха, которые вы хотели игнорировать). Вероятно, поэтому в GCC нет стандартного предупреждения.
Другая проблема - обратная сторона - это «как вы подавляете предупреждение, когда знаете, что игнорируете результат, но на самом деле все равно». Классический сценарий для этого:
if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
signal(SIGHUP, sighandler);
Вы заботитесь о первом результате из signal()
; вы знаете, что второй будет SIG_IGN (так как вы просто установите его). Чтобы уйти от предупреждений, я иногда использую какой-то вариант на:
if ((old = signal(SIGHUP, SIG_IGN)) != SIG_IGN)
old = signal(SIGHUP, sighandler);
Это присваивает old
оба раза. Вы можете следовать за этим с помощью 'assert (old == SIG_IGN)'.