|
Мне было, очень приятно почитать все ваши отклики. Статья удалась. Больше всего спотыканий, почему-то у всех вызвало присвоение байтовой переменной значения 256.
Ах! Ах! Как же так! Караул! Не могет такого быть, потому что не могет быть никогда! Почему-то все эти люди, а особенно некий Виталий, забыли простой факт, что в байте умещается 256 значений.
Да, приведенное присвоение
unsigned char i = 256;
Но читаемость программы при этом резко падает. Вы видите цикл, в начале которого переменной присваивается значение 0, а условием окончания цикла является сравнение на ноль. Э-э-э..? И сразу возникает вопрос -- КАК это работает?
Еще один факт -- если я заменю объявление unsigned char на unsigned int -- как это скажется на выполнении программы? В моем случае -- никак! Будет выполнено опять же 256 итераций. Если же записать i=0, то сколько раз будет выполнен цикл? Предлагаю посчитать самим, если вы знаете разрядность переменной типа int.
Еще одно. Почему вы решили, что всегда и везде и во всех процах и во всех компиляторах переменная типа unsigned char будет однобайтовой?
Еще одно. Миф про переносимость программ. Нет такого понятия! Это МИФ! Программу, написанную в Keil для 8051 вряд ли без изменений можно будет перенести в IAR для 8051. Си для встраиваемых систем -- это нечто особенное, хоть и пытается соответствовать стандарту ANSI C.
Еще одно. Замечания компилятора -- это замечания. Это НЕ реальные ошибки. Это потенциальные ошибки. Как говорил Морфей Нео в 1й Матрице: "В этой программе [спарринга] имитируются некие правила -- гравитация, закон Ньютона. Но ты должен понять -- это всего лишь программа. Некоторые правила можно обойти, другие нарушить". Как говорил классик -- главное конечный результат.
А конечный результат на асме51 для моего примера будет таким:
mov i, #0
label:
; тело цикла
djnz i, label
Ну и? Какие вопросы? Причем тут Visual C?
---
Закончить хочу известным афоризмом:
В мире есть всего 10 типов людей -- те, кто понимает двоичную систему счисления и все остальные.
Похоже Виталий и компания -- это те все остальные.
Спасибо за внимание.
(Копия этого объяснения будет помещена на мой сайт http://bialix.narod.ru/)
E-mail: info@telesys.ru