Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: Суров печат на кирилица върху Матричен принер


  • Subject: Re: lug-bg: Суров печат на кирилица върху Матричен принер
  • From: Skeleta <g_georgiev.sz@xxxxxx>
  • Date: Thu, 25 Nov 2004 10:18:28 +0200

Nikolay Mitev wrote:

Здравейте

Хайде и аз да се обадя, въпреки че малко оффтопик.

Skeleta wrote:

...
    if ((w >= First) & (w <= Last)) w = w-64;


                                   ^^^
Това трябва да е &&, а не &. В случая работи, но по случайност. Защо ли? Ами & е побитова операция, т.е AND-ва *битовете* на левия и десния израз. В случая работи, защото <= и >= са операции, които връщат bool. Сега ще кажете, че то е все тая, ама не е. Има една много съществена разлика м/у & и && и тя е short circuit evaluation. Това означава, че ако левия израз е false, то целия израз няма как да стане true, и съответно десния израз може да не се evaluate-ва. В случая това не ни бърка, но ако десния израз имаше някакъв side-effect (увеличава променлива, вика функция, и т.н), то ще има огромна разлика м/у изпълнението на единия и другия вариант.

Казвам всичко това, защото много, ама много често виждам подобни грешки :-)


Това ми е една от най-дългите програми, които съм писал на C и тя е правена като превод на програма на Pascal, щото на него си пиша най-много. В Pascal-а side-effect нещата има стремеж да се отделят от изчисляването на изрази и принципа е да се счита, че функциите, участващи в израз са 'чисти'. Затова и стила ми на писане е такъв, за което се извинявам на C-феновете !


Да не говорим, че може да се поопрости малко:

#include <stdio.h>
/*
(c) Skelet (G. Georgiev) in terms of GNU GPL
Converts cp1251 -> DOS cyrillic.
*/

int main()
{
unsigned char w;
unsigned char First = 0xc0;
unsigned char Last  = 0xff;
while (!feof(stdin)) {
  w = getchar();
  if ((w >= First) && (w <= Last)) w -= 64;
  putchar(w);
}
return 0;
}
...



--

	Skelet
	------ http://skelet.hit.bg/
	

============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.