 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5819 Aktiv.: 24.56 Kraj: Grosuplje
|
Objavljeno: Ned Mar 04, 2012 1:08 pm Naslov sporočila: C problem |
|
|
vilko je napisal/a: |
4 dni ali morda cel teden sem iskal napako v programu, pisanem v C-u.
V if stavku sem namestno dvojnega enačaja uporabil enojnega.
Namesto if (nekaj == nekaj)
sem napisa if (nekaj = nekaj )
Saj vem, pravila so taka. Ampak pravila bi moral olajšati človeku življenje ne pa, da mu ga zapletejo.
Živio Bascom! |
Ja, ja teta Roza dela svoje .
Čedalje več stvari si je potrebno zapisovati .
Citiram: |
Warning:
Beware of accidentally using the single equal sign (e.g. if (x = 10) ). The single equal sign is the assignment operator, and sets x to 10 (puts the value 10 into the variable x). Instead use the double equal sign (e.g. if (x == 10) ), which is the comparison operator, and tests whether x is equal to 10 or not. The latter statement is only true if x equals 10, but the former statement will always be true.
This is because C evaluates the statement if (x=10) as follows: 10 is assigned to x (remember that the single equal sign is the assignment operator), so x now contains 10. Then the 'if' conditional evaluates 10, which always evaluates to TRUE, since any non-zero number evaluates to TRUE. Consequently, if (x = 10) will always evaluate to TRUE, which is not the desired result when using an 'if' statement. Additionally, the variable x will be set to 10, which is also not a desired action. |
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Ned Mar 04, 2012 7:02 pm Naslov sporočila: |
|
|
To je bolj problem kompajlerja. Poskusi tako napako napraviti v kakem bolj "komercialnem" kompajlerju. Visual Studio bi ti hitro povedal, da ne moreš implicitno pretvoriti integerja v boolean Take napake se rade zgodijo, lahko si srečen, če te kompajler nanje opozori.
LP G _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Pon Mar 05, 2012 8:09 pm Naslov sporočila: |
|
|
Vilko, nemogoče bi bilo ustvariti sintakso, kjer bi enojni enačaj pomenil dve različni stvari. Prevajalnik ne razume človeške semantike in ne ve, kdaj mi želimo nekaj prirediti in kdaj primerjati dve vrednosti. Verjetno je v vseh programskih jezikih isto in ne samo v C-ju. Če pa se motim, se pa opravičujem. Ampak ta navada pride sčasoma. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Pon Mar 05, 2012 9:52 pm Naslov sporočila: |
|
|
@ljudsko:
Res da nujno rabimo dva različna operatorja, samo ni nujno da izberemo = in ==.
pascal:
- primerjanje =
- prirejanje :=
@Vilko:
Če boš več delal v C in C++ boš take napake hitro našel.
Opomba:
Obstajajo tudi jeziki kjer imaš tudi === operator.
javascript (in php):
- operator === primerja tudi tip spremenjlivke == pa ne
- "5" == 5 je true
- "5" === 5 je false
lp, Gregor |
|
Nazaj na vrh |
|
 |
Krampus Član



Pridružen-a: Pon 08 Sep 2008 13:07 Prispevkov: 1852 Aktiv.: 9.07
|
Objavljeno: Pon Mar 05, 2012 10:39 pm Naslov sporočila: |
|
|
Basic:
Piši kao što govoriš
If a = b then
a = b + x
end if _________________ Nisem ravno najbolj pameten na svetu, tu in tam pa imam kakšno idejo. |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Tor Mar 06, 2012 12:14 am Naslov sporočila: |
|
|
In na koncu..
C je še vedno tata mata vseh jezikov  _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Tor Mar 06, 2012 12:20 am Naslov sporočila: C problem |
|
|
Krampus je napisal/a: |
Piši kao što govoriš  |
Koda: |
if(p=malloc(500))
{
...
free(p);
}
else
puts("kupi malo več RAM-a"); |
Kje je problem?
C über alles  _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2012 12:44 am Naslov sporočila: |
|
|
Problem seveda ni v Cju, problem je v programerjih.
Vilko hvali bascom,
silvo hvali assembler,
gumby ima rad C,
meni je všeč C++,
....
To lahko vlečemo do nezavesti .
Dejstvo je da se večino mikrokontrolerjev da programirati v C ju (verjetno tudi v assemblerju).
V bascomu se ne da delat vsega,
C# je super za poslovne aplikacije na windowsih, za MCUje pa najbrž nikoli ne bo,
java je (baje) super samo je tudi bolj za destop aplikacije (linux in windows),
php je bolj za web strani,
...
assembler je pa za silvota .
TOREJ:
Programer se mora prilagoditi prevajalniku ki ga uporablja.
Prevajalnik se načeloma ne prilagaja programerju.
Bom počasi utihnil / nehal neumnosti kvasit,
lp,Gregor |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.06 Kraj: Divača (Kačiče)
|
Objavljeno: Tor Mar 06, 2012 12:50 am Naslov sporočila: |
|
|
gregoral je napisal/a: |
assembler je pa za silvota . |
Asembler je zato, da stvari delajo hitreje, programer je pa zato počasen. Ampak silvo ima čas,... _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Tor Mar 06, 2012 12:57 am Naslov sporočila: |
|
|
gregoral je napisal/a: |
Dejstvo je da se večino mikrokontrolerjev da programirati v C ju (verjetno tudi v assemblerju).
--------------------------------------
V bascomu se ne da delat vsega
----------------------------------------------
assembler je pa za silvota .
lp,Gregor |
Ne verjetno, ampak prej obratna situacija (verjetno tudi v C-ju)-v assemblerju se da vse
Z drugo izjavo se popolnoma strinjam, še preveč...
Tretja izjava..poskusi assembler, ti bo postal kmalu všeč, ko boš videl koliko pomnilnika privarčuješ, sploh če znaš kodo dobro optimizirati.
Skratka, na programerju je, da izbere jezik, ki mu najbolj ustreza in mu je najbolj všeč. Če ti bo basic premalo, boš pač vzel C. Če ti bo C premalo, boš vzel zbirnik. Se pa po moje tudi v C-ju da spisati vse, če imaš dovolj izkušenj, da znaš do dobra zoptimizirat kodo (če bi že pomnilnik bil tak problem). _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koroška-Mežica
|
Objavljeno: Tor Mar 06, 2012 1:01 am Naslov sporočila: |
|
|
VolkD je napisal/a: |
gregoral je napisal/a: |
assembler je pa za silvota . |
Asembler je zato, da stvari delajo hitreje, programer je pa zato počasen. Ampak silvo ima čas,... |
Mislim, da Silvo ni tako počasen, kolikor programira v zbirniku. Je verjetno še precej hitrejši od marsikaterega C vešča  _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Tor Mar 06, 2012 1:31 am Naslov sporočila: |
|
|
Ne podcenjujem ne assemblerja ne silvota.
Moje stališče je tako:
- assembler omogoča v celoti izkoristiti MCU
- zahteva veliko večji začetni vložek (učenje)
- ni direktno prenosljiv med procesorji
- če obvladaš assembler za določen MCU lahko narediš veliko več pri isti količini pomnilnika
- če ne obvladaš assemblerja je lahko tvoj program celo večji od prevedenega iz C
Da ne bo pomote Silvotovo znanje assemblerja občudujem .
Kolikor sem opazil pa je eden redkih (če ni edini) na forumu ki dela v assemblerju.
Jaz sem se igral z assemblerjem, ga razumem, samo nimam volje da bi ga vzel za svojega.
Večina primerov na internetu je v Cju, ker je assembler preveč "write only".
Torej zaradi uporabljenih trikov izvorno kodo v assemblerju pogosto zares razume le avtor.
Če preteče dovolj časa včasih še avtor ne ve več točno kaj koda dela (velja za vse jezike).
VolkD je napisal/a: |
Asembler je zato, da stvari delajo hitreje, programer je pa zato počasen. ... |
Načelno se z izjavo strinjam. Vendar če ima programer izkušnje in izdelane solidne knjižnice, potem lahko tudi v assemblerju zelo hitro programira.
Sploh pri MCUjih kjer se večinoma dela samo s: string-i, integer-ji, in vgrajeno periferijo (Timerji, interrupti, ADC, UART, SPI, ...).
LP, Gregor |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Mar 06, 2012 7:52 am Naslov sporočila: |
|
|
Citiram: |
...silvo hvali assembler,... |
He, he Silvo ne hvali assemblerja - ga pa uporablja Sicer poznam tudi toliko osnov C-ja, da bi znal kaj enostavnega napisati a nekako mi ne "leže.."
Trditve glede assemblerja so popolnoma točne. Morda popravim darkotovo trditev. Slabo napisana assemblerska koda je prav tako lahko počasna ter potratna.
Res je programiranje - pravzaprav priprave na programiranje v assemblerju vzamejo precej časa. Če si rutine lepo "zložiš" je nadaljno programiranje zelo enostavno.
Nekaj časa nazaj sem si pripravljal rutine za LCD v navezi z I2c.
Če so rutine pametno napisane je dejansko zelo enostavno programirati.
Tako recimo izgleda del demo programa. Po moje je vsakemu, ki je blizu kakega programiranja razumljiv, kljub temu, da ni komentarjev)
Koda: |
Demo:
ldi LcdData,0
rcall PosljiUkaz
Napolni 1,0,20,' ' ;vrstica, začetek, število znakov , znak
Napolni 2,0,20,' ' ;brisanje obeh vrstic
Napis "Demo LCD I2C",1,1 ;tekst , vrstica, začetek
Napis "PCF8574",2,1
rcall Pavza2S
Napolni 1,0,20,'*'
Rcall Pavza200mS
Napolni 2,0,20,'*'
Rcall Pavza2S
Napolni 1,0,20,' '
Rcall Pavza200mS
Napolni 2,0,20,' '
rcall Pavza200mS
Napis "Prva vrsta",1,1
rcall Pavza200mS
Napis "Druga vrsta",2,1
rcall Pavza2S
Napolni 1,0,20,' '
Napolni 2,0,20,' '
Polozaj 1,1
Crkuj 'w'
Rcall Pavza200mS
Crkuj 'w'
Rcall Pavza200mS
Crkuj 'w'
Rcall Pavza200mS
Crkuj '.'
Rcall Pavza200mS
Napis "elektronik",1,5
Napis ".si",2,1
rcall Pavza2S
Napolni 2,0,20,' '
Napis "Reset",2,1
Crkuj '.'
rcall Pavza200mS
Crkuj '.'
rcall Pavza200mS
Crkuj '.'
rcall Pavza200mS
rjmp Demo
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Tor Mar 06, 2012 9:24 am Naslov sporočila: |
|
|
Tema je: Kaj trenutno počnete.
Jaz trenutno berem besedno bitko med cigani, ko vsak svojega konja hvali. In mi gre malo na smeh, kot gre na smeh neprizadetem opazovalcu, ki opazuje, kako se otroci ravsajo med samo zaradi časti in ugleda.
Samo eno potpitanje: Če se omejimo na atmel, česa bascom ne more? _________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Tor Mar 06, 2012 9:49 am Naslov sporočila: |
|
|
vilko je napisal/a: |
Tema je: Kaj trenutno počnete. |
Ni več. Temo sem razdelil, ker je bila debata okoli C tam čisto offtopic. _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|