förmodligen en simpel C fråga

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
DennisCA
Inlägg: 2249
Blev medlem: 13 maj 2014, 08:44:18
Ort: Finland, österbotten

Re: förmodligen en simpel C fråga

Inlägg av DennisCA »

Marta skrev: 9 januari 2023, 06:43:47 När jag skulle kravla upp ur Pascalträsket var den här till stor hjälp. https://en.wikibooks.org/wiki/A_Little_ ... nt_version

Det Du har hittat nu tycker jag verkar rörigt och lär ut obra saker. Man använder inte open array som argument i funktioner. char *varname är det rätta. För kommentarer används //en kommentar. Det är enradare som slutar vid radrytningen. Snabbare, enklare och Du har /* */ kvar att användas vid felsökning för att tillfälligt ta bort ett avsnitt.
Menar du mig så boken jag har är skriven av Dennis Ritchie som uppfann C och jag tycker den har funkat bra tillsvidare och jag är inställd på att gå igenom denna. Jag kommer aldrig komma nånstans om jag byter bok så fort nån säger denna bok är dålig och du borde läsa X istället. För det händer med precis varenda bok jag forskat i. Jag vet denna bok är gammal C, ANSI C. Men jag är helt OK med det, tror det kommer hjälpa att uppleva hur språket förändras med revisionerna. De här tidiga kodsnuttarna stod det i boken om att dom inte alltid är bästa sättet att skriva C, men dom är skrivna för att hjälpa en förstå saker i C och sen kommer det bli bättre koll på den saken.

Jag vet om att det finns två kommentarstyper men beroende på hur autokompletteringsinlägget i emacs som jag nyttjar funkar, finner jag det ibland enklare att nyttja /**/ än //. det är mera ett problem med emacs än att jag inte förstår kommentarsfunktionen och nånting jag borde ta itu med där egentligen. Den har det irriterande draget att nästa rad efter // blir en till. Det vill jag inte ha.

Då boken skrevs så fanns inte // i C standarden så därför skrivs all kod i boken med /**/. Det är inget som stör mig.

Efter jag gått igenom denna bok har jag tänkt gå igenom en C bok av K.N. King, och en slutligen en onlinebok från en som heter Beej för modernare C. Jag har tänkt gå igenom flera böcker alltså.

Sen har jag en till bok som heter Algorithms and C som jag tror är bra att ta till sist som har mindre med själva programmeringen att göra. Men detta är nu den stig jag har stakat upp för mig själv och hur jag behöver få jobba för att inte tappa motivationen.
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Re: förmodligen en simpel C fråga

Inlägg av henkebenke »

Det är ju bibeln du har. Men du bör vara medveten om att stil och praxis har utvecklats lite sedan dess. Tex for-loopen i din getline2 hade (förhoppningsvis) inte gått igenom någon kodgranskning hos något företag som har en kodstandard.
DennisCA
Inlägg: 2249
Blev medlem: 13 maj 2014, 08:44:18
Ort: Finland, österbotten

Re: förmodligen en simpel C fråga

Inlägg av DennisCA »

Ja men se vad för intressanta saker som då ploppar upp, som gör man kommer ihåg dessa saker bättre än annars. Så tycker jag.

Skulle gärna veta mera om hur en modern for loop skiljer sig men kan säkert googla det själv.

En sak som stör mig själv är att jag märkte jag blandar på ++i och i++, borde hålla mig till en. Gillar ++i mera men tror det är gammaldags.
davidi
Inlägg: 571
Blev medlem: 13 oktober 2011, 16:45:38
Ort: Ekerö

Re: förmodligen en simpel C fråga

Inlägg av davidi »

Använt för sig själv spelar det ingen roll, men returvärdet skiljer om man tar till vara på det.

a = 5;
b = a++;

b tilldelas a:s gamla värde 5, och a inkrementeras med 1 och blir 6.

a = 5;
b = ++a;

Här inkrementeras a först, och det nya värdet tilldelas b. Både a och b är 6.
DennisCA
Inlägg: 2249
Blev medlem: 13 maj 2014, 08:44:18
Ort: Finland, österbotten

Re: förmodligen en simpel C fråga

Inlägg av DennisCA »

Jo jag snubblade just över samma då jag gick igenom stackoverflow, intressant och väl värt att ha i åtanke.
Användarvisningsbild
AndLi
Inlägg: 17051
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: förmodligen en simpel C fråga

Inlägg av AndLi »

davidi skrev: 9 januari 2023, 09:23:39 Använt för sig själv spelar det ingen roll, men returvärdet skiljer om man tar till vara på det.

a = 5;
b = a++;

b tilldelas a:s gamla värde 5, och a inkrementeras med 1 och blir 6.

a = 5;
b = ++a;

Här inkrementeras a först, och det nya värdet tilldelas b. Både a och b är 6.
Tydligt bevis varför man ska göra en sak per rad och inte försöka optimera i C. Låt kompilatorn ta hand om det!
Gimbal
Inlägg: 7879
Blev medlem: 20 april 2005, 15:43:53

Re: förmodligen en simpel C fråga

Inlägg av Gimbal »

Va menar du? ++a eller a++ är ju två olika saker.
Addera först eller addera efter, vilken man väljer beror på hur man vill ha det.
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: förmodligen en simpel C fråga

Inlägg av Klas-Kenny »

Tror AndLi menar att det lämpligaste är att aldrig skriva
b = a++;
Eller
b = ++a;
Över huvud taget.

Utan istället skriva kod som är begriplig utan att verkligen behöva tänka efter hur det är språket beter sig i såna specialfall.

Istället skriva:
b = a;
a++;
Eller
a++;
b = a;

Där det är helt uppenbart för vem som helst, vilket värde b får.
Och om inte AndLi menade det, så gör jag det. :D
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: förmodligen en simpel C fråga

Inlägg av TomasL »

När det gäller kommentarer, // kommer väl egentligen från Javascript, har jag för mig, vissa tidiga C-kompilatorer stöder inte //-formatet.
Dock själv använder jag bägge varianter beroende på vad jag skall kommentera, så /*......*/ för hela block och // för enstaka rader.

EN annan sak att som jag tycker du skall lära dig, det är att i if-satser och dess kusiner, alltid skriva konstanten först, dvs if[2==A) i stället för if(A==2), du sparar mycket huvudbry i framtiden, då den senare varianten är skulden till väldigt många buggar.
Fölande två rader ser väldigt lika ut, bägge accepteras utan problem av kompilatorn, den ena varianten ger garanterat konstiga fel, när du kör din kod, och felet är synnerligen svårt att hitta när du har ett par tusen rader källkod att gå igenom

Kod: Markera allt

if(2==A){
}
if(A=2){
}
Jag råder dig också att lära dig kommentera enligt JavaDoc och använda doxygen på din kod, det är liksom magiskt.
Doxygen generar bl.a. sådana här diagram, vilka är väldigt upplysande.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
AndLi
Inlägg: 17051
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: förmodligen en simpel C fråga

Inlägg av AndLi »

Klas-Kenny skrev: 9 januari 2023, 10:42:28 Tror AndLi menar att det lämpligaste är att aldrig skriva
b = a++;
Eller
b = ++a;
Över huvud taget.

Utan istället skriva kod som är begriplig utan att verkligen behöva tänka efter hur det är språket beter sig i såna specialfall.

Istället skriva:
b = a;
a++;
Eller
a++;
b = a;

Där det är helt uppenbart för vem som helst, vilket värde b får.
Och om inte AndLi menade det, så gör jag det. :D
Precis! Du är välkommen in i mina c projekt när du vill! :D
Användarvisningsbild
AndLi
Inlägg: 17051
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: förmodligen en simpel C fråga

Inlägg av AndLi »

Finns // med i c standarden överhuvudtaget? Verkar ha introducerats med c++

Och sen kan man ju diskutera var { ska sitta, jag förespråkar på egen ny rad, men verkar bli mer och mer ensam om det 😀
DennisCA
Inlägg: 2249
Blev medlem: 13 maj 2014, 08:44:18
Ort: Finland, österbotten

Re: förmodligen en simpel C fråga

Inlägg av DennisCA »

// kom med C99 såvitt jag vet. Inga problem att nyttja båda för mig med gcc.

Ska hålla det med if-satserna i minnet.

Jag verkar nyttja båda, men lutar mot det ska vara skilld rad. Ibland när jag skriver av koden ur boken, så kör jag på samma vis ibland fastän jag inte själv skulle skrivit på det viset.
Senast redigerad av DennisCA 9 januari 2023, 11:00:25, redigerad totalt 2 gånger.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: förmodligen en simpel C fråga

Inlägg av TomasL »

AndLi skrev: 9 januari 2023, 10:48:36 Finns // med i c standarden överhuvudtaget? Verkar ha introducerats med c++

Och sen kan man ju diskutera var { ska sitta, jag förespråkar på egen ny rad, men verkar bli mer och mer ensam om det 😀
Ja jag håller faktiskt med dig, koden blir väldigt mycket mer lättläst om { är ensamt på en ny rad, intabbat naturligtvis
Gimbal
Inlägg: 7879
Blev medlem: 20 april 2005, 15:43:53

Re: förmodligen en simpel C fråga

Inlägg av Gimbal »

Klas-Kenny skrev: 9 januari 2023, 10:42:28 Tror AndLi menar att det lämpligaste är att aldrig skriva
b = a++;
Eller
b = ++a;
Över huvud taget.

Utan istället skriva kod som är begriplig utan att verkligen behöva tänka efter hur det är språket beter sig i såna specialfall.

Istället skriva:
b = a;
a++;
Eller
a++;
b = a;

Där det är helt uppenbart för vem som helst, vilket värde b får.
Och om inte AndLi menade det, så gör jag det. :D
Ja ok, det håller jag med om. Blir mycket tydligare.
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: förmodligen en simpel C fråga

Inlägg av hummel »

På 90-talet var man ibland tvungen att skriva kryptisk kod för prestanda. Numera är kompilator och dess optimerare mycket bättre så dom får sköta det med bra resultat och jag skriver lättläst kod.
Skriv svar