Mitt första C program (Quincy 2005)

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Mitt första C program (Quincy 2005)

Inlägg av jesse »

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?
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Mitt första C program (Quincy 2005)

Inlägg av jesse »

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?
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Re: Mitt första C program (Quincy 2005)

Inlägg av eqlazer »

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.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Mitt första C program (Quincy 2005)

Inlägg av mri »

"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.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Mitt första C program (Quincy 2005)

Inlägg av bos »

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?
I Windows-miljö vet jag inte. I unix-miljö använder man "$?" i skalet.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Mitt första C program (Quincy 2005)

Inlägg av mri »

"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.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Mitt första C program (Quincy 2005)

Inlägg av jesse »

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.
Niklas-k
Inlägg: 354
Blev medlem: 10 mars 2004, 15:59:21
Ort: Katrineholm

Re: Mitt första C program (Quincy 2005)

Inlägg av Niklas-k »

speakman 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/
bloodshed är visst skrivet i Delphi(Pascal)! Det är väl därför den populär :lol:

Pascal är förövrigt mitt favoritspråk.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Mitt första C program (Quincy 2005)

Inlägg av jesse »

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 :roll: )
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Mitt första C program (Quincy 2005)

Inlägg av mri »

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.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Mitt första C program (Quincy 2005)

Inlägg av jesse »

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.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Mitt första C program (Quincy 2005)

Inlägg av sodjan »

> 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... :roll:
Skriv svar