Mitt första C program (Quincy 2005)
Re: Mitt första C program (Quincy 2005)
Jag får skylla på den dåliga boken jag hittat på biblioteket: "C genom ett nyckelhål" av Håkan Strömberg. Den är minst sagt ostrukturerad och man måste verkligen läsa igenom hela boken för att få fullständig information om en viss instruktion, variabeltyp eller operator, t.ex. Den är inte uppbyggd så att man lär sig en sak ordentligt, utan ara så pass mycket att man klarar av att utföra den uppgift författaren tänkt sig (utan att bry sig om att man får varningar, tydligen). Har ingen annan bok för tillfället, så det blir Håkan Strömberg som blir min förebild när det gäller programmering i C. Men man ska alltså helst avsluta main med return på ett lämpigt ställe? Det verkar annars som om kompilatorn lägger till det i slutet av programmet, för det avslutas i alla fall efter sista raden.
Jo, jag misstänker att det är en slump att z får värdet 400, antagligen någon pekaradress som hänger kvar. Därför lade jag till a++ i slutet på funktionen för att se om z skulle få värdet av a, men så blev det inte. Den borde ju åtminstonde varna eller ge error när jag skriver
z = testar();
då det inte finns något att hämta!
på gränsen hade väl det varit om returnfunktionen saknats och man bara anropade funktionen:
testar();
eftersom man ändå inte hämtar något värde.
Kompilatorn är GCC och debuggern heter GDB, dessa ska ju inte vara dåliga, men allt kanske beror på hur de anropas?
Jo, jag misstänker att det är en slump att z får värdet 400, antagligen någon pekaradress som hänger kvar. Därför lade jag till a++ i slutet på funktionen för att se om z skulle få värdet av a, men så blev det inte. Den borde ju åtminstonde varna eller ge error när jag skriver
z = testar();
då det inte finns något att hämta!
på gränsen hade väl det varit om returnfunktionen saknats och man bara anropade funktionen:
testar();
eftersom man ändå inte hämtar något värde.
Kompilatorn är GCC och debuggern heter GDB, dessa ska ju inte vara dåliga, men allt kanske beror på hur de anropas?
Re: Mitt första C program (Quincy 2005)
Kommandotolken märker då inte att jag returnerar ett värde i main. Kan man anropa test1.exe (mitt program) inifrån ett annat program och få värdet?
Re: Mitt första C program (Quincy 2005)
Normalt ser man väl inte vad som returneras, men ett sätt som det brukar användas är tex "make all && make program" (vet ej om detta fungerar i DOS, är mer van med bash men helt olika bör det inte vara). Om den första sekvensen "make all" returnerade OK så körs den efterföljande "make program". Skulle första misslyckas och returnera ett fel (tex error vid kompileringen) så är det ingen ide att köra den efterföljande.
Re: Mitt första C program (Quincy 2005)
"Kommandotolken märker då inte att jag returnerar ett värde i main. Kan man anropa test1.exe (mitt program) inifrån ett annat program och få värdet?"
I en .BAT fil i DOS/Windows kan man kolla returkoden från ett program som anropats från själva .BAT filen.
I en .BAT fil i DOS/Windows kan man kolla returkoden från ett program som anropats från själva .BAT filen.
Re: Mitt första C program (Quincy 2005)
I Windows-miljö vet jag inte. I unix-miljö använder man "$?" i skalet.jesse skrev:Kommandotolken märker då inte att jag returnerar ett värde i main. Kan man anropa test1.exe (mitt program) inifrån ett annat program och få värdet?
Re: Mitt första C program (Quincy 2005)
"Kan man anropa test1.exe (mitt program) inifrån ett annat program och få värdet?"
Hmm... läste ju inte hela meningen.
Jo, ett annat program kan också köra din .exe file direkt. I C brukar finnas funktionen system(), som returnerar koden från programmet det kört.
Men men, returkoden från main() är väl ändå inte så intressant för dig i detta skede, eller? Det viktiga i dikussionen är att varje fuktion som inte har returtypen "void" SKALL returnera ett värde eller nåt typ av "objekt". main() är inget undantag.
Hmm... läste ju inte hela meningen.
Jo, ett annat program kan också köra din .exe file direkt. I C brukar finnas funktionen system(), som returnerar koden från programmet det kört.
Men men, returkoden från main() är väl ändå inte så intressant för dig i detta skede, eller? Det viktiga i dikussionen är att varje fuktion som inte har returtypen "void" SKALL returnera ett värde eller nåt typ av "objekt". main() är inget undantag.
Re: Mitt första C program (Quincy 2005)
nej, det var väl ett sidospår. Men när jag ändå upptäckte att man kan använda "return" i main så ville jag ju veta hur det kan utnyttjas. Kan säkert vara bra att veta i framtiden.
Re: Mitt första C program (Quincy 2005)
bloodshed är visst skrivet i Delphi(Pascal)! Det är väl därför den populärspeakman skrev:Kör själv också Emacs (vilket inte kan annat än rekommenderas; en editor till *allt* tänkbart!), men något jag tror är rätt populärt för Windows (och är open source et al) är http://www.bloodshed.net/dev/

Pascal är förövrigt mitt favoritspråk.
Re: Mitt första C program (Quincy 2005)
jo, jag har installerat bloodshed's dev.
Verkar riktigt bra, fast jag inte hunnit prova det ännu.
Förresten, vad är skillnaden mellan C och C++, eh... eller kanske ska omformulera frågan:
Jag kör ju C för AVR-processorerna. Om nu syntax och vissa regler skiljer sig mellan C och C++ så kanske jag bara blir mer förvirrad om jag dessutom ska skriva program i C++ (för PC)! Å andra sidan verkar ju grafiska gränssnitt för PC vara skirvna mest i C++ och då har jag ju inget val. C++ använder ju klasser. Känns både som en tillgång fast också lite krångligare.
Hur är det, ni som skrivit lite större program i C och C++ , är det lättare att strukturera programmen i C++ eller varför väljer man det? Är det fler regler och begränsningar så man inte skriver allt för dåliga program i C++ (ja, inget programspråk kan väl hindra en från att skriva dåliga program
)
Verkar riktigt bra, fast jag inte hunnit prova det ännu.
Förresten, vad är skillnaden mellan C och C++, eh... eller kanske ska omformulera frågan:
Jag kör ju C för AVR-processorerna. Om nu syntax och vissa regler skiljer sig mellan C och C++ så kanske jag bara blir mer förvirrad om jag dessutom ska skriva program i C++ (för PC)! Å andra sidan verkar ju grafiska gränssnitt för PC vara skirvna mest i C++ och då har jag ju inget val. C++ använder ju klasser. Känns både som en tillgång fast också lite krångligare.
Hur är det, ni som skrivit lite större program i C och C++ , är det lättare att strukturera programmen i C++ eller varför väljer man det? Är det fler regler och begränsningar så man inte skriver allt för dåliga program i C++ (ja, inget programspråk kan väl hindra en från att skriva dåliga program

Re: Mitt första C program (Quincy 2005)
C++ kan allt som C kan, plus en hel del till, t.ex. objektorientering (klasser, interface och arv).
Har man programmerat mycket C så är det ett ganska stort steg att börja tänka objektorienterat (så var det för mig åtminstone) vilket man bör göra med C++.
C++ är nog ett mera "invecklat" och tyngre språk att lära sig, men när man väl greppat tillräckligt är det ett bra språk.
C++ är striktare än C, dvs du har lite mindre frihet att göra vissa (farliga) saker jämfört med C, men det är nog lika enkelt som i C att skriva dåliga program.
Jag gillar egenskapen att man kan kaplsa in kod och data i klasser. Detta är trevligt även i små program.
Har man programmerat mycket C så är det ett ganska stort steg att börja tänka objektorienterat (så var det för mig åtminstone) vilket man bör göra med C++.
C++ är nog ett mera "invecklat" och tyngre språk att lära sig, men när man väl greppat tillräckligt är det ett bra språk.
C++ är striktare än C, dvs du har lite mindre frihet att göra vissa (farliga) saker jämfört med C, men det är nog lika enkelt som i C att skriva dåliga program.

Jag gillar egenskapen att man kan kaplsa in kod och data i klasser. Detta är trevligt även i små program.
Re: Mitt första C program (Quincy 2005)
tja, jag har ju försökt programmerat i java. Att göra egna klasser fungerar bra, men när det kommer till arv och subklasser så blir det svårt, och att begripa sig på en (valfri) standardklass i java är stört omöjligt. Det finns tusen funktioner och möjligheter, och det sitter inte någon bredvid mig och säger: i den här situationen passar den här funktionen bra, men du måste först deklarera en subklass och omdefiniera några funktioner och inte glömma att lägga dit ett antal nödvändiga konstanter i subklassen.
Det jobbigaste i C hittills är väl att jag som oftast glömmer semikolon i slutet på raden...
EDIT: ...och att jag inte alltid vet hur ett uttryck beräknar en sak, tex. integer: A=B*3/10, blir A = B*(3) eller A = (B*10)/3... kan ju bli viss skillnad. Sen kan jag inte alltid läsa ut vad som händer i ett program när man bökar med pekare hit och dit.
Det jobbigaste i C hittills är väl att jag som oftast glömmer semikolon i slutet på raden...
EDIT: ...och att jag inte alltid vet hur ett uttryck beräknar en sak, tex. integer: A=B*3/10, blir A = B*(3) eller A = (B*10)/3... kan ju bli viss skillnad. Sen kan jag inte alltid läsa ut vad som händer i ett program när man bökar med pekare hit och dit.
Re: Mitt första C program (Quincy 2005)
> Sen kan jag inte alltid läsa ut vad som händer i ett program när man bökar med pekare hit och dit.
Hm...
Jag håller på med liste testar av nya Web Services funktioner som ska köras mot
befintliga applikationer i COBOL. Använder verktygen gSOAP för att generera C-kod
som hanterar XML/SOAP packningen/uppackningen. Dessa kräver i princip lite C-stubbar
mellan gSOAP koden och min egen COBOL kod. Inte mycket alls, i princip bara lite hantering
av fält mellan fixed-size strängar i vanliga variabler och null-terminated strängar i ett par structs.
Hur som helst. 90% av tiden går åt till att få de där jäkla "*" och "&" rätt...
Hm...
Jag håller på med liste testar av nya Web Services funktioner som ska köras mot
befintliga applikationer i COBOL. Använder verktygen gSOAP för att generera C-kod
som hanterar XML/SOAP packningen/uppackningen. Dessa kräver i princip lite C-stubbar
mellan gSOAP koden och min egen COBOL kod. Inte mycket alls, i princip bara lite hantering
av fält mellan fixed-size strängar i vanliga variabler och null-terminated strängar i ett par structs.
Hur som helst. 90% av tiden går åt till att få de där jäkla "*" och "&" rätt...
