Заблокирован
|
||||||
1 | ||||||
Что делает Return в плюсах?12.04.2017, 14:25. Показов 796. Ответов 8
Метки нет Все метки)
(
Судя по прочитанной литературе по с++ return что-то возвращает в вызывающую программу, но в одном месте попался странный код и не только потому что в ретурне находится элемент массива, а еще и то, что сам этот массив странный, в нем индекс не сам один а вычисляется через логическое "И" с 16сс числом. Это почему и зачем так? может быть?
Если переменная Ctrl_code равна int 0 (0x0)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
12.04.2017, 14:25 | |
Ответы с готовыми решениями:
8
Не понятно что делает __success(return >= 0) Как сделать так, что если файл существует return true, если нет - return false
|
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
|
|
12.04.2017, 14:25 | 2 |
Ну такая логика у программы, наверное. Нам-то откуда знать. Слово return просто возвращает элемент массива и все.
0
|
шКодер самоучка
|
||||||
12.04.2017, 14:27 | 3 | |||||
Развернем код
1
|
Модератор
![]() ![]() 5107 / 4538 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
12.04.2017, 14:28 | 4 |
avitec, сначала оставляются 4 младшие биты ctrl_code при помощи логического "И" с 0x0f, получится число 0-15.
Затем берется элемент массива ccs с индексом от 0 до 15, индекс равен полученному перед тем числу. Полученный элемент возвращается из функции. Если Ctrl_code == 0, то вернется нулевой элемент ccs
1
|
Диссидент
![]() 27188 / 16945 / 3745
Регистрация: 24.12.2010
Сообщений: 38,127
|
|
12.04.2017, 14:35 | 5 |
Видимо, ccs - какой-то внешний массив. extern или static. Вполне возможно, что в нем только 16 элементов. int ccs[16].
Параметр ctrl_code может быть сборищем флагов. &0x0F выделяет младшие 4 цифры - 4 флага. Наверное, какие-то их комбинации допустимы (ccs[i]==1), какие-то - нет (ccs[i]==0) Но это только догадки. Без контекста конкретнее сказать трудно. А сам код вполне разумен.
0
|
Заблокирован
|
|
12.04.2017, 14:50 [ТС] | 6 |
ccs это массив unsigned char [16] "\x01\x01\x01\x01\x01\x01\0\0\0\0\x01\x01\x01\0\0\ 0" в дебаггере, наверно в 16сс, в 2сс это было бы наверно это 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0. И нулевой элемент это 1. Но функция эта не имеет никакого смысла, так как массив ссs[16] из маски 0x000F можно использовать только самую младшую цыфру F, так как массив имеет всего 16 индексов. А F это 4 единицы и в логическом И они значение переменной ctrl_code не меняют, зачем тогда весть этот огород, можно было записать просто return[ctrl_code]? и не вызывать эту функцию, а сразу на верхнем уровне получить значение массива?
Добавлено через 1 минуту я думаю Вам и не нужно знать ![]() Добавлено через 46 секунд А какой? Добавлено через 2 минуты или я ошибся и берутся 2 декады или как их там 0f и тогда маска все же есть? Только не для этого нулевого значения? Добавлено через 53 секунды да вы были правы, так и есть Добавлено через 1 минуту значит все таки 4, тогда нет смысла в этой функции
0
|
Диссидент
![]() 27188 / 16945 / 3745
Регистрация: 24.12.2010
Сообщений: 38,127
|
|
12.04.2017, 14:57 | 7 |
Нет. ctrl_cole может быть больше 15, состоять из большего количества флагов, чем 4. Функция же проверяет совместимость только последних 4-х
Можно. Вместо вызова функции писать просто ccs[ctrl_code&=0x000F]
Но это - хороший стиль. Проверка локализована, имеет хорошее мнемоническое название. Кроме того к функции возможно обращение и из других исходных модулей проекта.
0
|
Заблокирован
|
|
12.04.2017, 14:58 [ТС] | 9 |
Спасибо всем за разъяснение. Понятно примерно.
0
|
12.04.2017, 14:58 | |
Помогаю со студенческими работами здесь
9
Что означает запись в скобках и что возвращает return Не могу понять на что способен sort, и что делает его компаратор Что в программе делает так, что процессор грузится на 100%? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |