Приведение типов использовал в первую очередь, ...
Извините, но Вы, похоже, заблуждаетесь, или хотите ввести в заблуждение окружающих. Если бы Вы использовали "приведение типов в первую очередь", то сравнение сразу заработало бы и этой темы не было бы. Так что, либо Вы использовали не приведение типов, либо его, но только после того, как Вам на это указали.
А объяснить ему доходчиво - язык отсохнет... Попробую я, у меня не отсохнет. Суть в том, что оператор ~ возвращает результат с типом, используемым по умолчанию. Это int, что и заводит прямо на грабли.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
То есть, преобразовывали unsigned char в unsigned char же? До сего дня был уверен, что написать такое не под силу никому. "О, сколько нам открытий чудных...". Все же прочтите хотя бы немного о языке Си, хотя бы те два раздела... Может тогда простейшие истины перестанут казаться колдовством и слово "высокоинтеллектуальный" обретет свое первоначальное содержание...
Заголовок сообщения: Re: WinAvr в вопросах и ответах
Добавлено: Ср окт 21, 2015 22:53:18
Первый раз сказал Мяу!
Зарегистрирован: Сб май 16, 2015 22:42:01 Сообщений: 26
Рейтинг сообщения:0
Pnjom-Penb писал(а):
Все же прочтите хотя бы немного о языке Си, хотя бы те два раздела... Может тогда простейшие истины перестанут казаться колдовством и слово "высокоинтеллектуальный" обретет свое первоначальное содержание...
А какое содержание еще может быть у слова "высокоинтеллектуальный"?
Надеюсь, вопрос по makefile будет в тему... Я очень начинающий WinAvr пользователь, поэтому, вероятно, спрошу глупость. Объясните (или направьте - где можно почитать, беглый гуглопоиск не помог), что значат строчки в makefile: OPT_DEFS += -DPS2_USE_USART и PS2_USE_USART = yes
И еще одно - я запускаю make из "консоли" (cmd). При работе он выводит ну очень много - полезной, как оказалось,- инфы. Как ее загнать в один файл - а то буфер не бесконечен и начальная часть теряется. В два файла (1>1.txt 2>2.txt) я научился, но ведь наверняка есть способ проще...
Используется ли где-то в коде макрос PS2_USE_USART?
у меня сложилось впечатление, что это не макрос, а флаг... он используется в конструкции ifdef PS2_USE_USART SRC += protocol/ps2_usart.c SRC += protocol/ps2_io_avr.c OPT_DEFS += -DPS2_USE_USART endif но в первом случае файлы не компилируются, в во втором - компилируются собственно, интересно, что делает "OPT_DEFS += -D" я ради интереса (в процессе изысканий) попробовал написать OPT_DEFS += -DPS2_USE_USART = yes но при компиляции вылезла ошибка на первом же файле - "невозможно найти путь" или что-то подобное...
COKPOWEHEU писал(а):
make > file.txt не работает?
интернет говорит, что у make два потока вывода, то есть указанное мною выше make >1.txt >2.txt позволяет получить близкое к желаемому, но файла получается два и надо думать, что с чем взаимосвязано (по моменту вывода) хотя, в общем, все понятно, конечно...
Что-то мне подсказывает что OPT_DEFS это список опций компилятора и выражение это добавляет к параметрам с которыми запустится компилятор определение PS2_USE_USART.
а строка "SRC += protocol/ps2_usart.c" добавляет к списку подключаемых исходников указанные файлы.
Уважаемые форумчане, я не так давно перешёл на си. При компиляции столкнулся с таким warning-ом (' ... ' may be used uninitialized in this function), при чём в разных проэктах. Привожу пример, где получаю такое придупреждение (это только пример, реальные функции сложнее):
В Протеусе всё работает, но я хочу понять, чем вызвано это предупреждение и что с ним делать? Веть по логике алгоритма X как минимум один раз будет инициализирована.
благодаря аккуратности форматирования вашего кода невозможно понять, является ли X=5 единственным оператором блока if или нет. однако, при любом раскладе если условие if не будет выполнено, переменная X окажется не инициализированной.
отслеживать содержимое глобальных переменных, и переменных, меняемых в других функциях, компилятор не может, поэтому не понимает, выполнится ли и когда именно ваше условие, потому на всякий случай предупреждает, что переменная может оказаться с непредсказуемым значением.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Уважаемый ARV я начинающий, прошу Вас отнестись с пониманием, тепер по сути:
ARV писал(а):
благодаря аккуратности форматирования вашего кода невозможно понять, является ли X=5 единственным оператором блока if или нет. однако, при любом раскладе если условие if не будет выполнено, переменная X окажется не инициализированной.
Знакомился с Си по книгам, так вот там по поводу фигурных скобок говорилось, что група оператороров должна быть взята в фигурные скобки, один оператор брать в фигурные скобки не обязательно. У меня в приведённом примере после if(True) выполняется один оператор.
ARV писал(а):
отслеживать содержимое глобальных переменных, и переменных, меняемых в других функциях, компилятор не может, поэтому не понимает, выполнится ли и когда именно ваше условие, потому на всякий случай предупреждает, что переменная может оказаться с непредсказуемым значением.
У меня в начале функции при объявлении переменной status, выполняется её инициализация начальным значением 0b10000010. В первой интерации в if проверяется установка бита 1 переменной status, который установлен при инициализации, и соответственно в 1 интерации X присваивается 5. В дальнейшем, X=5 может не выполниться, но как минимум один раз этот оператор выполнится, и X до использования будет инициализирован. Я хочу понять почему компилятор этого не видит.
Компилятор не настолько умный чтобы рассматривать все возможные ветви условий, тем более ваша переменная могла быть изменена где-то в коде по пути от инициализации до условия. Да и условие могло быть и посложнее. Компиляторы такие ситуации не разруливают настолько глубоко, этим занимаются отдельные статические анализаторы кода. Если хотите чтобы начальное значение Х было равно 5 то так и сделайте. Такая инициализация значением переменной X как у вас сомнительна в плане надёжности, хоть алгоритм и очевиден с первого взгляда. Но не всегда будет так.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения