12 / 10 / 0
Регистрация: 01.07.2013
Сообщений: 62
|
||||||
1 | ||||||
Безымянный аргумент функции03.07.2013, 12:48. Показов 5328. Ответов 51
Метки нет (Все метки)
функция принимает аргумент, но у него нет имени
...
0
|
03.07.2013, 12:48 | |
Ответы с готовыми решениями:
51
Вычислить значение функции аргумент которой вычисляется из другой кусочно заданной функции Беззнаковый аргумент функции Не читается аргумент функции Непонятный аргумент функции |
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
04.07.2013, 12:11 | 21 | |||||
AntonChik, собственно для перегрузки такое и делают в частности. Например:
2
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
04.07.2013, 12:11 | 22 |
Причинами того, что, случается, в вызове функции стоит большее число параметров, чем на самом деле функция использует.
0
|
04.07.2013, 12:24 | 23 |
Вместо того, чтобы городить кучу дополнительного кода в функции, могу предложить изящное решение - дать имя параметру.
Например, ты встраиваешься в чужую систему, которая пишется как универсальная на все случаи жизни. Поэтому ты обязан написать именно такой прототип функции, как требует того система. Поскольку система универсальная, а твой случай - частный, то тебе какие-то параметры могут и не понадобиться
2
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
||||||
04.07.2013, 12:52 | 25 | |||||
Не, не, не, господа. Мы говорим о случае, когда у нас есть именно такая функция. Перефразировав специально для Jupiter, зачем вы написали именно такую функцию?
Это все понятно, что, если это нас не касается, то и хрен с ним. Но охота разобраться зачем оно вообще. А-а.
Вопрос по прежнему открыт. Зачем существуют параметры без имени?
0
|
04.07.2013, 13:10 | 26 |
Просто так. Чтобы не заводить лишнее имя в процедуре, если параметр должен быть, но он не используется. Никаких других причин нет. Когда такое бывает - написал в посте #23.
Добавлено через 7 минут Именованный и безымянный параметры играют роль исключительно внутри функции. В точке вызова функции нет никакой разницы, будет ли внутри вызываемой функции параметр иметь имя, или нет. В точке вызова важен только тип параметра, чтобы знать, как его правильно передать. А как этот параметр будет называться внутри функции - не играет никакой роли, т.к. в точке вызова нам не нужно обращаться к этому параметру (а именно для этого нужно имя переменой). Вернее, обращаться нужно в момент передачи параметра, но обращаемся к нему не по имени, а, грубо говоря, по порядковому номеру внутри круглых скобок в строгом соответствии с программными соглашениями (calling convenience)
2
|
12 / 10 / 0
Регистрация: 01.07.2013
Сообщений: 62
|
||||||
04.07.2013, 13:33 [ТС] | 28 | |||||
0
|
04.07.2013, 13:43 | 29 |
Как я уже говорил, есть простой способ - дать имя аргументу. Код от этого не изменится ни внутри функции, ни в точке вызова функции. Различие будет только в том, что теперь к параметру можно будет обратиться.
Если же нужно обратиться к неименованному параметру без задания имени, то в общем случае ответ - "никак". В частных случаях можно. Но при этом нужно понимать, по каким правилам передаются параметры. Но код всё равно может считаться рабочим только в рамках одного компилятора. Так, например, если параметры передаются через стек, то через адрес одного параметра можно получить адрес другого параметра. Но при этом нет никакой гарантии, что параметр, который пришёл через стек, компилятор не переложил внутри функции на регистр. Разумно предположить, что с безымяным параметром так желать ни к чему (поскольку регистров мало, а тратить их на ненужный параметр - расточительство). Если изначально параметр пришёл на регистре, то очевидно, что через адрес другого параметра мы наш безымяный параметр уже не прочтём. Т.е. можно обратиться только при помощи ассемблерных конструкций напрямую к регистру. При этом точно так же у нас нет никакой гарантии, что компилятор не переиспользовал регистр по своим нуждам. Это действие уже вероятное, т.к. незачем держатьрегистр под неиспользуемую переменную, его лучше заиспользовать под полезные нужды
2
|
AntonChik
|
04.07.2013, 13:53
#30
|
Не по теме: кстати раз уж зашел разговор о всяческих извратах, то у меня возник вопрос, а есть ли способ в коде дать конкретному компилятору понять, что из нескольких веток ему предстоит откомпилить лишь одну, предназначенную именно ему?)
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|||||||||||
04.07.2013, 15:38 | 34 | ||||||||||
Ну так просвети
повторю вопрос
Добавлено через 26 минут а ну да там инт стоит не обратил вчера внимания сдвиг будет на 20 байт, при int 4байта но откуда 5? Добавлено через 9 минут Вот вам еще одно баловство доступ к приватной переменной
правда кому и зачем может понадобится я не знаю
0
|
04.07.2013, 15:52 | 35 | |||||
В том конкретном коде смещение в 20 байт взялось нипочему, так уж на платформе, на которой этот код выдал ожидаемый результат, осуществляется передача аргументов при вызове функций.
На Mac OS X, например, я не нашел такого смещения, которое дало бы адрес неименованного аргумента. Пробовал от -512 байт до 512. Про нарушение спецификаторов доступа, в этом нет ничего особенного, если понимать внутренний layout объектов.
P.S. при наличии в классе виртуальных функций такой подход в лоб не пройдет.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||
04.07.2013, 16:02 | 36 | ||||||||||
так ищется оно просто:
На VS2012 x64 получилось следующее:
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||||||||||||
04.07.2013, 16:09 | 37 | |||||||||||||||
а утверждал что от "железа" это не зависит
Вполне может быть что аргументы идут через регистр и со стека ты их не достанешь да и локальные переменные могут в регистре лежать А я говорил что нужно всем всегда делать? единственно что могу предположить, это если пользуешь чужой класс но завтра реализация класса изменится и программа летит Все эти адресные арифметики штука очень "острая" при неправильном использовании легко можно "порезаться" Добавлено через 2 минуты стоп стоп вчера ты писал
не находишь?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
04.07.2013, 17:15 | 40 |
Это:
исходник вируса "бомж", который тупо роется в мусоре.
Добавлено через 2 минуты Вполне валидная операция языка --z, только выглядит совсем не так, как аналогичного назначения безобразие на c++.
0
|
04.07.2013, 17:15 | |
04.07.2013, 17:15 | |
Помогаю со студенческими работами здесь
40
Передача функции в аргумент Класс как аргумент функции Не правильно передаю аргумент функции Локальные переменные в функции и её аргумент Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |