|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.07.2017, 14:40 | #1 |
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
scanf и %d
При компиляции программ с флагом -Wall часто вижу предупреждение что scanf требуется тип int. Дело в том, что когда я програvмирую и требуются небольшие значения я присваиваю тип char (все-таки что 1 байт, а что 4). Проги все так же работают, но возможны ли ошибки? Может я делаю неправильно?
Код:
Последний раз редактировалось tutejshy; 10.07.2017 в 09:22. |
09.07.2017, 17:07 | #2 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 735
|
Ваш код вызывает исключение вот в этой строке:
- потому что нужно писать вот так: Код:
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Последний раз редактировалось Cuprum5; 09.07.2017 в 17:11. |
09.07.2017, 17:51 | #3 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Когда написано
Код:
Компилятор именно об этом предупреждает, но запретить не может - вдруг Вы действительно хотите выстрелить себе в ногу? Экономия на байтах в данном случае совершенно не оправдана - во-первых, с большой вероятностью её съест выравнивание, во-вторых, работа с байтами, как ни странно, потребует бОльших ресурсов процессора |
10.07.2017, 09:32 | #4 | ||
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
Цитата:
Цитата:
|
||
10.07.2017, 14:01 | #5 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Если всё ещё непонятно: scanf от переменной получает только адрес.
А вот что с этим адресом делать, она определяет по спецификатору формата. Написано %d - значит, scanf будет считать, что на стеке в этом месте адрес int |
10.07.2017, 14:16 | #6 |
Форумчанин
Регистрация: 13.05.2017
Сообщений: 100
|
Понял, немного подправил прогу - теперь scanf в ф-ции, которая возвращает char. Теперь ввожу как int (в пределах char, конечно), а в main возвращает уже char.
|
13.07.2017, 11:43 | #7 | |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,550
|
Цитата:
Код:
|
|
13.07.2017, 11:55 | #8 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Есть.Вообще-то должны быть варнинги в нормальном компиляторе.
http://rextester.com/YFOC70684 http://rextester.com/MEL58695
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
13.07.2017, 16:29 | #9 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,550
|
Много времени прошло, еще из прошлого тысячелетия. Попытался воспроизвести -получилось с точностью до наоборот. Почему - Hz . Компилятор - древний Борланд. Возможно, дело в настройках.
Код:
А до каких высот докатился интеллект теперешних Сишных компиляторов - я не в курсе, давно от Си отошел, так что понятие "нормальный компилятор" - для меня - увы ... Последний раз редактировалось digitalis; 13.07.2017 в 16:33. |
13.07.2017, 16:45 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
как это не с длиной? char это число, меньше int.
Ну и с float тоже есть. http://rextester.com/UDBFM11845
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
%ls и %lc в printf и scanf | Krasiosoft | Помощь студентам | 2 | 08.07.2015 22:30 |
scanf | cocacola | Общие вопросы C/C++ | 1 | 10.07.2014 05:09 |
scanf | zla9_kolu4ka | Общие вопросы C/C++ | 2 | 26.03.2014 21:48 |
scanf | intmain | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 25 | 20.02.2013 17:53 |
аналог scanf() | turtles | Общие вопросы по Java, Java SE, Kotlin | 1 | 09.04.2011 10:33 |