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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.63
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

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

14.12.2012, 16:26. Просмотров 5066. Ответов 29
Метки нет (Все метки)

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++
Здравствуйте, надо разработать макрос type(x,y) который объявляет x как некий тип с именем y.

Макрос - C++
Как в макросе интовское число разделить на число с запятой?

макрос COMBINE - C++
Доброго времени суток. Дан код: #define SUFFIX 5 #define COMBINE(a,b) COMBINE1(a,b) #define COMBINE1(a,b) ...

Реализуйте макрос - C++
Реализуйте макрос MAX от трёх параметров, который присваивает целочисленной (int) переменной, переданной в качестве третьего аргумента,...

Разработайте макрос - C++
Очень нужна ваша помощь, скоро контрольная, а я никак не могу разобраться 2. Разработайте макрос tolower(c) который преобразует символ c...

Сложный макрос - C++
Создать макрос buffer(n) который резервирует в памяти буфер емкостью n байтов и при каждом обращении выдает адрес очередного байта или...

Макрос-класс? - C++
Привет всем! Порылся в источниках teeworlds и нашёл вот что: class IClient : public IInterface { MACRO_INTERFACE("client", 0) ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:29     Макрос UNREFERENCED_PARAMETER бесполезен? #2
Kgfq, для переменных, которые ни разу не использовались. Чтобы компилятор варнинги не слал о неиспользованной переменной.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 16:33     Макрос UNREFERENCED_PARAMETER бесполезен? #4
Цитата Сообщение от Croessmah Посмотреть сообщение
#define UNREFERENCED_PARAMETER(P) * * * * *(P)
Этот макрос уже определен в winnt.h
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
14.12.2012, 16:40     Макрос UNREFERENCED_PARAMETER бесполезен? #7
Цитата Сообщение от Kgfq Посмотреть сообщение
он правильно ставит варнинги
Вот Вы ему и говорите, что не надо этого делать, так и должно быть, что мол я в курсе, что переменная не используется

Добавлено через 25 секунд
Цитата Сообщение от Kgfq Посмотреть сообщение
если переменная ни разу не использовалась, значит она не нужна в коде
весьма сомнительное мнение.
go
Эксперт C++
3586 / 1366 / 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
14.12.2012, 16:43     Макрос UNREFERENCED_PARAMETER бесполезен? #10
Цитата Сообщение от Kgfq Посмотреть сообщение
поясните
Когда-нибудь использовали второй параметр в функции?
C++
1
WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
go
Эксперт C++
3586 / 1366 / 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++
3586 / 1366 / 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
14.12.2012, 16:48     Макрос UNREFERENCED_PARAMETER бесполезен? #15
Цитата Сообщение от Kgfq Посмотреть сообщение
если она используется, он не удалит ее из кода
Компилятор достаточно умная штука. Он может выбросить целые куски кода, если код не используется.

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

Цитата Сообщение от Kgfq Посмотреть сообщение
я эту функцию использовать только дня 3 назад начал, поэтому не скажу )
И врядли будете использовать
go
Эксперт C++
3586 / 1366 / 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!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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 бесполезен?
Еще ссылки по теме:

Макрос MyAssert - C++
Всем привет! Снова обращаюсь к вам за помощью. Задание такое: "Напишите макрос MyAssert, который выводит сообщение об ошибке, имя файла...

Макрос DPrint - C++
С предыдущим я заданием я уже разобрался, а вот со следующим: "Напишите макрос DPrint , проверяющий наличие режима отладки, и если режим...

Сложный макрос - C++
В книге была задача, написать макрос, определяющий массив типа Type, который называется Name, имеет Number элементов, и все элементы...

Макрос TRACE - C++
Здорова! Часто вижу в коде TRACE, но что то ничего не пойму что он делает, вот есть код: #include <iostream> using std::cout; ...

Не работает макрос - C++
Добрый день. Есть макросы:#define ACTION(var, value) int var = value; #define EXEC_ACTION(value, handler, ...) handler(value,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru