Форум программистов, компьютерный форум CyberForum.ru

Макрос UNREFERENCED_PARAMETER бесполезен? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.63
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.12.2012, 16:26     Макрос UNREFERENCED_PARAMETER бесполезен? #1
C++
1
#define UNREFERENCED_PARAMETER(P)          (P)
Зачем нужны подобные макросы? Это же бессмысленно

Добавлено через 25 минут
вверх
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 16:26     Макрос UNREFERENCED_PARAMETER бесполезен?
Посмотрите здесь:

Макрос C++
Если макрос на VBA переписать на С++, то макрос станет работать быстрее? C++
Макрос на с++ C++
C++ Сложный макрос
Разработайте макрос C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:29     Макрос UNREFERENCED_PARAMETER бесполезен? #2
Kgfq, для переменных, которые ни разу не использовались. Чтобы компилятор варнинги не слал о неиспользованной переменной.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
14.12.2012, 16:29     Макрос UNREFERENCED_PARAMETER бесполезен? #3
Например, сравните два кода:
C++
1
2
3
4
5
6
#define UNREFERENCED_PARAMETER(P)          (P)
int main(){
    int d;
    //UNREFERENCED_PARAMETER(d);
    return 0;
}
C++
1
2
3
4
5
6
#define UNREFERENCED_PARAMETER(P)          (P)
int main(){
    int d;
    UNREFERENCED_PARAMETER(d);
    return 0;
}
точнее посмотрите на список предупреждений при компиляции
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:33     Макрос UNREFERENCED_PARAMETER бесполезен? #4
Цитата Сообщение от Croessmah Посмотреть сообщение
#define UNREFERENCED_PARAMETER(P) * * * * *(P)
Этот макрос уже определен в winnt.h
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
14.12.2012, 16:35     Макрос UNREFERENCED_PARAMETER бесполезен? #5
Цитата Сообщение от go Посмотреть сообщение
Этот макрос уже определен в winnt.h
не хотелось ничего подключать.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.12.2012, 16:37  [ТС]     Макрос UNREFERENCED_PARAMETER бесполезен? #6
Но тогда опять же встает вопрос о смысле: если переменная ни разу не использовалась, значит она не нужна в коде => он правильно ставит варнинги
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
14.12.2012, 16:40     Макрос UNREFERENCED_PARAMETER бесполезен? #7
Цитата Сообщение от Kgfq Посмотреть сообщение
он правильно ставит варнинги
Вот Вы ему и говорите, что не надо этого делать, так и должно быть, что мол я в курсе, что переменная не используется

Добавлено через 25 секунд
Цитата Сообщение от Kgfq Посмотреть сообщение
если переменная ни разу не использовалась, значит она не нужна в коде
весьма сомнительное мнение.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:40     Макрос UNREFERENCED_PARAMETER бесполезен? #8
Kgfq, не всегда. Есть функция
C++
1
2
3
4
int fun(int a, int b)
{
    return a + 1;
}
Здесь будут варнинги, а мы их не хотим. Отключать их не имеет смысла, нужно выкручиваться.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.12.2012, 16:41  [ТС]     Макрос UNREFERENCED_PARAMETER бесполезен? #9
Croessmah, я о конечном смысле спрашиваю:

есть переменная, она не используется => она не нужна
если "сказать, что она используется", то можно забыть о ней => будет лишний код
т.е. конечный смысл снова туманен. Тупо для тестинга?

Добавлено через 11 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
весьма сомнительное мнение
поясните
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
14.12.2012, 16:43     Макрос UNREFERENCED_PARAMETER бесполезен? #10
Цитата Сообщение от Kgfq Посмотреть сообщение
поясните
Когда-нибудь использовали второй параметр в функции?
C++
1
WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:43     Макрос UNREFERENCED_PARAMETER бесполезен? #11
Цитата Сообщение от Kgfq Посмотреть сообщение
то можно забыть о ней => будет лишний код
Компилятор не будет генерировать для него никакого кода
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.12.2012, 16:44  [ТС]     Макрос UNREFERENCED_PARAMETER бесполезен? #12
go, ну так эта функция не должна иметь второй параметр, раз его не использует. Это же глупо добавлять в код то, что не нужно.

Добавлено через 27 секунд
go, если она используется, он не удалит ее из кода

Добавлено через 31 секунду
Croessmah, я эту функцию использовать только дня 3 назад начал, поэтому не скажу )
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:46     Макрос UNREFERENCED_PARAMETER бесполезен? #13
Цитата Сообщение от Kgfq Посмотреть сообщение
go, если она используется, он не удалит ее из кода
Читайте внимательно.
Цитата Сообщение от Kgfq Посмотреть сообщение
Это же глупо добавлять в код то, что не нужно.
Бывает по-другому нельзя. Обычно так делают, когда необходимо написать функцию, которая должна отвечать определенной сигнатуре API.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.12.2012, 16:48  [ТС]     Макрос UNREFERENCED_PARAMETER бесполезен? #14
Цитата Сообщение от go Посмотреть сообщение
Читайте внимательно.
прочитал. смысл для меня остался тот же.


Цитата Сообщение от go Посмотреть сообщение
Бывает по-другому нельзя. Обычно так делают, когда необходимо написать функцию, которая должна отвечать определенной сигнатуре API.
в таком случае, зачем создавать целый макрос, если можно просто написать:
C++
1
2
int d;
d;
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
14.12.2012, 16:48     Макрос UNREFERENCED_PARAMETER бесполезен? #15
Цитата Сообщение от Kgfq Посмотреть сообщение
если она используется, он не удалит ее из кода
Компилятор достаточно умная штука. Он может выбросить целые куски кода, если код не используется.

Цитата Сообщение от Kgfq Посмотреть сообщение
ну так эта функция не должна иметь второй параметр, раз его не использует. Это же глупо добавлять в код то, что не нужно.
А как же зарезервированные параметры?

Цитата Сообщение от Kgfq Посмотреть сообщение
я эту функцию использовать только дня 3 назад начал, поэтому не скажу )
И врядли будете использовать
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:49     Макрос UNREFERENCED_PARAMETER бесполезен? #16
Цитата Сообщение от Kgfq Посмотреть сообщение
в таком случае, зачем создавать целый макрос, если можно просто написать:
Чтобы в коде можно было легко найти неиспользованные переменные.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.12.2012, 17:21  [ТС]     Макрос UNREFERENCED_PARAMETER бесполезен? #17
Цитата Сообщение от Croessmah Посмотреть сообщение
Компилятор достаточно умная штука. Он может выбросить целые куски кода, если код не используется.
Но он считает, что она используется, поэтому не выдает варнинги и, соответственно не выкинет ее
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
14.12.2012, 17:25     Макрос UNREFERENCED_PARAMETER бесполезен? #18
Цитата Сообщение от go Посмотреть сообщение
Kgfq, не всегда. Есть функция
C++
1
2
3
4
int fun(int a, int b)
{
 return a + 1;
}
Здесь будут варнинги, а мы их не хотим. Отключать их не имеет смысла, нужно выкручиваться.
Здесь можно просто имя параметра опустить, макрос не нужен.
C++
1
2
3
4
int fun(int a, int)
{
 return a + 1;
}
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
14.12.2012, 17:49  [ТС]     Макрос UNREFERENCED_PARAMETER бесполезен? #19
Цитата Сообщение от Croessmah Посмотреть сообщение
А как же зарезервированные параметры?
Зачем? Разве сразу не ясно, что потребуется?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 17:55     Макрос UNREFERENCED_PARAMETER бесполезен?
Еще ссылки по теме:

Сложный макрос C++
C++ макрос препроцессора
C++ Макрос TRACE

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.12.2012, 17:55     Макрос UNREFERENCED_PARAMETER бесполезен? #20
Цитата Сообщение от Kgfq Посмотреть сообщение
Но он считает, что она используется, поэтому не выдает варнинги и, соответственно не выкинет ее
Выкинет. Компилятор намного более мощные шутки проворачивать умеет.
Но в макросе я тоже не вижу смысла, потому что можно просто закомментить имя переменной.
Yandex
Объявления
14.12.2012, 17:55     Макрос UNREFERENCED_PARAMETER бесполезен?
Ответ Создать тему
Опции темы

Текущее время: 06:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru