Sida 2 av 3

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 07:51:47
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 08:57:22
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 09:03:50
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 09:23:39
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 09:37:03
av DennisCA
Jo jag snubblade just över samma då jag gick igenom stackoverflow, intressant och väl värt att ha i åtanke.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:02:55
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!

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:28:32
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:42:28
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

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:42:50
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:44:17
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

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:48:36
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 😀

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:57:03
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 10:59:05
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

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 11:30:56
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.

Re: förmodligen en simpel C fråga

Postat: 9 januari 2023, 12:08:11
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.