Каков наилучший способ подавить предупреждение "неиспользуемая переменная"

Есть 3 (которые, как я знаю) способы подавить предупреждение "неиспользуемая переменная". Какой-то конкретный способ лучше других?

Первый

- (void)testString:(NSString *)testString
{
     (void)testString;
}

Второе

- (void)testString:(NSString *)__unused testString
{

}

Третий

- (void)testString:(NSString *)testString
{
    #pragma unused(testString)
}

Ответ 1

Это подход, который я использую: кросс-платформенный макрос для предупреждения о неиспользуемых переменных

Он позволяет использовать один макрос для любой платформы (хотя определения могут отличаться в зависимости от компилятора), поэтому он очень переносимый подход, чтобы выразить ваше намерение популярным компиляторам на языках C. В GCC и Clang эквивалентно переносу вашего третьего примера (#pragma unused(testString)) в макрос.

Используя пример из связанного ответа:

- (void)testString:(NSString *)testString
{
    MONUnusedParameter(testString);
}

Я нашел этот подход лучше всего для переносимости и ясности, используя некоторые довольно большие C-коды, С++, ObjC и ObjС++.

Ответ 2

Если вы компилируете GCC, вы можете использовать расширения атрибутов для установки атрибута 'unused'. Вот так:

int somevar __attribute__((unused));

Он также работает для предупреждений о неиспользуемых параметрах (-Wunused-parameter)

Чтобы сделать его короче для записи, я использую этот макрос:

#define _U_ __attribute__((unused))

И объявите следующее:

int somevar _U_ ;

Ответ 3

Один из способов сделать это - просто назначить переменную бессмысленно после ее объявления. Например:

int foo;
foo = 0;

Это должно подавлять предупреждение неиспользуемой переменной. Это просто бессмысленное задание.
Но в противном случае я бы согласился с ouah, первый метод является самым надежным, если вы должны выбрать из этих трех.