|
из племени тумба-юбма
|
||||||
Откуда у некоторых переменных вместо значения НОЛЬ, присваивается другое значение?15.10.2019, 12:16. Показов 5249. Ответов 50
Метки нет (Все метки)
Привет, нашел для себя вроде как не плохую и понятную книгу, по обучению Си https://www.kpolyakov.spb.ru/download/devcpp_1.pdf. Сразу в первых примерах на практике, столкнулся с непонятными значениями присвоения переменных.
Кликните здесь для просмотра всего текста
╧ЁштхЄ/Hello a1=0 b1=1 c1=0 a2=0 b2=0 c2=40 x=0 y=0 z=0 n=4203673 Крякозябры кириллицы меня на данном этапе не интересуют. Интересуют сами значения переменных. Откуда у некоторых переменных вместо значения НОЛЬ, присваивается другое значение?
0
|
||||||
| 15.10.2019, 12:16 | |
|
Ответы с готовыми решениями:
50
Макрос: Eсли Х больше Y, то Z присваивается значение Х, в противном случае Z присваивается значение Y Нужно сделать чтобы при делении на ноль, выводило На ноль делить нельзя, введите другое число Не получается корректно вывести значения некоторых переменных |
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||
| 18.10.2019, 11:44 | ||||
|
Недостатки очистки вызываемой стороной очевидны, но вот недостатков очистки вызывающей с ходу придумать не могу. Добавлено через 9 минут Покопался немного по стандарту:
. И там же куча примеров конкретно с int main(), можете пробежаться поиском. Я насчитал 2 примера без списка параметров, 2 с пустым списком (void) и 1 с полным списком (argc, argv)
0
|
||||
|
Вездепух
13217 / 6849 / 1826
Регистрация: 18.10.2014
Сообщений: 17,369
|
|||||||||||
| 18.10.2019, 12:05 | |||||||||||
|
Можно даже делать рекурсивный "неправильный" вызов такой функции из самой себя
() основан только на том, что все K&R объявления официально являются obsolescent, то есть находятся в процессе удаления из языка. Это удаление еще не произошло.
0
|
|||||||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||
| 18.10.2019, 12:35 | ||||||
|
В лучшем случае снимут кальку с С++, где отсутствие списка аргументов эквивалентно пустому списку. Тем более что на практике оно почти всегда так и используется.
0
|
||||||
|
Вездепух
13217 / 6849 / 1826
Регистрация: 18.10.2014
Сообщений: 17,369
|
|||||
| 18.10.2019, 12:55 | |||||
|
Вы уж определитесь, о чем вы говорите: о собственных "мечтах" по поводу языка С или о реальном стандартном языке. А то у вас то чтение стандарта начинается, то собственные выдумки, то снова чтение стандарта, то снова выдумки...
0
|
|||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||||
| 18.10.2019, 15:06 | ||||||||||
|
Кликните здесь для просмотра всего текста
Если подумать: вызывающая сторона заполняет стек и регистры, после чего вызывает функцию, дожидается ее завершения и сбрасывает указатель стека обратно. Вызываемая функция считает, что параметров ей не положено, поэтому содержимое стека просто игнорирует. Поведение вполне безопасное и предсказуемое. Если проверить:
int func(); уже объявление без прототипа. И давно?. Вы приводите какие-то свои домыслы, не подкрепленные ничем: ни логикой, ни цитатами из стандарта, ни конкретными примерами, демонстрирующими то или иное поведение. Может, все-таки перейдете к конструктиву?
0
|
||||||||||
|
Вездепух
13217 / 6849 / 1826
Регистрация: 18.10.2014
Сообщений: 17,369
|
|||||
| 18.10.2019, 17:38 | |||||
![]() Простите, это троллинг или вам просто нечего делать? Пожалуйста, не оскорбляйте присутствующих таким апофеозом вопиющего идиотизма, как попытки "проверять" неопределенное поведение практическими примерами или "подкреплять" тут что-то ими. А давно ли... С того момента, как в языке появились прототипы, то есть С первого стандарта языка С. 1989 год. Вы действительно не знаете, когда появился стандарт языка?
0
|
|||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||||
| 19.10.2019, 09:12 | |||||
|
Если у вас есть ссылки, где указывается, что передача в функцию, объявленной без аргументов, чего-то другого, будет UB, приводите, конечно.
0
|
|||||
|
Вездепух
13217 / 6849 / 1826
Регистрация: 18.10.2014
Сообщений: 17,369
|
||||
| 19.10.2019, 10:38 | ||||
|
От того, что вы будете непрерывно дылдонить обратное, ситуация не поменяется. И ваши попытки "опровергнуть" неопределенные поведение каким-то частными примерами вызывают лишь улыбку. Объявления второго типа - с прототипом - часто называют просто прототипами. Объявления первого типа "прототипами" никто никогда не называет. Кроме безграмотных "пионэров", разумеется. А ввели объявления с прототипом (и термин "прототип") в стандартизованный язык потому, что K&R-синтаксис не накладывает на вызов функции никаких компиляторных проверок и ограничений, и посему опасен, крив и неудобен. А вот базовая корректность вызовов функций с прототипами прекрасно проверяется компилятором, а также позволяет компилятору проводить неявные преобразования типов аргументов к типам параметров. Вызов функции, объявленной без прототипа, с неправильным числом и типами аргументов является неопределенным поведением: http://port70.net/~nsz/c/c11/n1570.html#6.5.2.2p6 "If the expression that denotes the called function has a type that does not include a prototype, the integer promotions are performed on each argument, and arguments that have type float are promoted to double. These are called the default argument promotions. If the number of arguments does not equal the number of parameters, the behavior is undefined.[...]If the function is defined with a type that does not include a prototype, and the types of the arguments after promotion are not compatible with those of the parameters after promotion, the behavior is undefined, except for the following cases: - one promoted type is a signed integer type, the other promoted type is the corresponding unsigned integer type, and the value is representable in both types; - both types are pointers to qualified or unqualified versions of a character type or void." Вызов функции, объявленной с прототипом, с неправильным числом и типами аргументов является некорректным кодом (т.е. "ошибкой компиляции"): http://port70.net/~nsz/c/c11/n1570.html#6.5.2.2p2 "If the expression that denotes the called function has a type that includes a prototype, the number of arguments shall agree with the number of parameters. Each argument shall have a type such that its value may be assigned to an object with the unqualified version of the type of its corresponding parameter." У людей, слабо знакомых с тонкостями языка, может вызывать с затруднение определение принадлежности объявлений с () - это старое K&R-объявление или прототип? Для человека, знакомого со стандартом языка, ответ очевиден - это K&R-объявление, что и иллюстрируется нашими экспериментами. Я вам выше также дал ссылку на разъяснения комитета по стандартизации по поводу определений функции с (), где ясно сказано, что несмотря на фразу "у функции нет параметров" в тексте стандарта, такое определение все равно не вводит прототипа, то есть не фиксирует количество и типы параметров.
0
|
||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||
| 19.10.2019, 20:54 | |||
|
0
|
|||
|
Вездепух
13217 / 6849 / 1826
Регистрация: 18.10.2014
Сообщений: 17,369
|
|||
| 20.10.2019, 00:57 | |||
![]()
0
|
|||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||
| 20.10.2019, 14:04 | ||
|
0
|
||
| 20.10.2019, 14:04 | |
|
Значение присваивается переменной, но не присваивается TexBox Всем элементам массива присваивается ноль
Как вставить, вместо огромного ряда переменных, значения из массива в updateTable? Как сделать чтоб во время работы программы при нажатии определенных клавиш изменялось значение некоторых переменных? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|