Varför måste man hela tiden snåla i C ?

Permalänk

Varför måste man hela tiden snåla i C ?

Hej!

Jag läser just nu C och jag tycker det är mycket enkelt och lätt. Men det finns en sak som jag inte förstår riktigt.
Varför ska man hela tiden tjafsa om "heltalstyper", "bitar" osv? Kan man inte bara ha int, float och string?
Måste man ha long long int? Kan man inte bara ha int?

Ta t.ex char
Där måste man t.ex skriva char namn[20]; för att visa hur stor variabeln namn får vara. Kan man inte bara skriva char namn och sen hålla käft?

Konstanter också. Kan man inte bara ge fan i och röra variablerna? Sätt en kommentar // RÖR EJ!! ?

Permalänk
Medlem

Gammalt språk. På den tiden var det viktigt att spara på minne. Det är inte riktigt samma problem idag därför ser nyare språk annorlunda ut. I framtiden kommer det blir ännu lättare. Hårdvara är billiga än utvecklingstid numera. Så var det inte förr. Behöver man mer minne idag så köper man mer minne.

Permalänk
Skrivet av ozo64:

Gammalt språk. På den tiden var det viktigt att spara på minne. Det är inte riktigt samma problem idag därför ser nyare språk annorlunda ut. I framtiden kommer det blir ännu lättare. Hårdvara är billiga än utvecklingstid numera. Så var det inte förr. Behöver man mer minne idag så köper man mer minne.

Vad skönt.
Så det jag läser om "bit" och "konstanter", det är inte nödvändigt för att programmera normalt, om man sitter på en modern dator?

Permalänk
Medlem

Nu är jag väldigt långt ifrån expert på kodning, men blir det inte också (iaf i teorin) snabbare program ju kortare kod man har? Det blir mindre att läsa in, men kan tänka mig att med dagens datorer är det omöjligt att märka någon skillnad.

Skickades från m.sweclockers.com

Visa signatur

Skrivet med hjälp av Better SweClockers
PC: Ryzen 9 5900X | RTX 4080 Super 16GB | G.Skill Trident Z Neo 64GB 3600MHz CL16 | 12TB NVMe SSD - 4TB SATA SSD = total 16TB SSD + Seagate IronWolf 10TB internal HDD | Synology DS920+ w/20GB RAM SHR 48TB
Skärmar: ASUS PG32UCDM 32" 4K OLED 240Hz, Acer Predator XB323UGX 32" 1440p 270Hz
Foto:
Canon 80D & 60D + Canon 17-55/2.8 IS, Canon 10-22, Canon 70-200/2.8L IS II, Canon 100/2.8L IS Macro

Permalänk
Medlem
Skrivet av heretic16:

Hej!

Jag läser just nu C och jag tycker det är mycket enkelt och lätt. Men det finns en sak som jag inte förstår riktigt.
Varför ska man hela tiden tjafsa om "heltalstyper", "bitar" osv? Kan man inte bara ha int, float och string?
Måste man ha long long int? Kan man inte bara ha int?

Ta t.ex char
Där måste man t.ex skriva char namn[20]; för att visa hur stor variabeln namn får vara. Kan man inte bara skriva char namn och sen hålla käft?

Konstanter också. Kan man inte bara ge fan i och röra variablerna? Sätt en kommentar // RÖR EJ!! ?

Man ska ALLTID hushålla med resurser. Sen går det ju att diskutera var gränsen till (dum)snålhet går.

C är ju ofta ett rätt hårdvarunära språk och kan göra det extra kritiskt att exekveringen är så optimal som möjligt. Det gäller att avväga vad som är nödvändigt och för att kunna göra det är det bra träning att snåla i början så att man vet var man kan "russla" när man kan sakerna lite bättre.

Börjar du programmera mikroprocessorer så är du däremot mer tvingad att hålla resursanvändningen nere eftersom de är betydligt mer begränsade i hos den hårdvaran.

Permalänk
Skrivet av jika:

Man ska ALLTID hushålla med resurser. Sen går det ju att diskutera var gränsen till (dum)snålhet går.

C är ju ofta ett rätt hårdvarunära språk och kan göra det extra kritiskt att exekveringen är så optimal som möjligt. Det gäller att avväga vad som är nödvändigt och för att kunna göra det är det bra träning att snåla i början så att man vet var man kan "russla" när man kan sakerna lite bättre.

Börjar du programmera mikroprocessorer så är du däremot mer tvingad att hålla resursanvändningen nere eftersom de är betydligt mer begränsade i hos den hårdvaran.

Men när vet man när man ska använda ungsinged eller long ?

Permalänk
Medlem
Skrivet av heretic16:

Vad skönt.
Så det jag läser om "bit" och "konstanter", det är inte nödvändigt för att programmera normalt, om man sitter på en modern dator?

Det är i högsta grad nödvändigt. Både då, nu och i framtiden.
Konstanter är deklarerade konstanter för att de INTE ska KUNNA ändras även om man så FELAKTIGEN ber om det. Ponera att du eller någon annan som jobbar med kodbasen finner det en bra ide att definiera om PI till 3.

Och att deklarera rätt utrymme till rätt data gör ofta att man behöver tänka ett steg till. Programmering är inte enbart att skriva kod utan det handlar även om planering.
Om jag skulle välja största möjliga datatypen i mina databaser skulle de ta mångdubbelt mer plats i minnet samt på värdefulla platsen på SSDn vilket direkt översätts till att det blir dyrare och långsammare.

Men aspirerar du inte till något mer än att kunna skriva "hello world" så gäller detta inte dig. Förstår inte i så fall inte varför du inte använder BASIC istället, på en c64 och på en monokrom skärm.

Skrivet av heretic16:

Men när vet man när man ska använda ungsinged eller long ?

Unsigned vad? Signed definierar att du kan använda även negativa tal (genom att använda en bit till det) vilket då halverar "omfånget" på talet du kan spara.
Long använder du när du vill kunna spara ett tal med det omfånget long är definierat till på den plattformen du använder.

Edit : Rättade "Unsigned" till "Signed" ovan.

Permalänk
Skrivet av iXam:

Det är i högsta grad nödvändigt. Både då, nu och i framtiden.
Konstanter är deklarerade konstanter för att de INTE ska KUNNA ändras även om man så FELAKTIGEN ber om det. Ponera att du eller någon annan som jobbar med kodbasen finner det en bra ide att definiera om PI till 3.

Och att deklarera rätt utrymme till rätt data gör ofta att man behöver tänka ett steg till. Programmering är inte enbart att skriva kod utan det handlar även om planering.
Om jag skulle välja största möjliga datatypen i mina databaser skulle de ta mångdubbelt mer plats i minnet samt på värdefulla platsen på SSDn vilket direkt översätts till att det blir dyrare och långsammare.

Men aspirerar du inte till något mer än att kunna skriva "hello world" så gäller detta inte dig. Förstår inte i så fall inte varför du inte använder BASIC istället, på en c64 och på en monokrom skärm.

Ska köra Arduino och göra program på datorn t.ex webläsare och USB drivrutiner
Hur viktigt är det då att jag kan "snålheten" med C då?

Permalänk
Medlem
Skrivet av heretic16:

Ska köra Arduino och göra program på datorn t.ex webläsare och USB drivrutiner
Hur viktigt är det då att jag kan "snålheten" med C då?

Arduino : Ja.
Webbläsare : Beror på vad du ska göra, men ja.
USB-drivrutiner : Ja.

Fast jag är osäker på vad du menar med "snålhet". För mig känns det som du vill hoppa över nödvändig baskunskap och då kan du utesluta i princip allt.

Permalänk
Skrivet av iXam:

Arduino : Ja.
Webbläsare : Beror på vad du ska göra, men ja.
USB-drivrutiner : Ja.

Fast jag är osäker på vad du menar med "snålhet". För mig känns det som du vill hoppa över nödvändig baskunskap och då kan du utesluta i princip allt.

Hehe.
Det är så jag inte tänker jobba med det jag gör just nu. Så därför tänkte jag inte lägga ner så mycket energi på det.
Men om det är viktigt så är det nog bäst att jag gör alla uppgifterna i boken

Snålhet = heltalstyper

Permalänk
Medlem
Skrivet av heretic16:

Men när vet man när man ska använda ungsinged eller long ?

Precis som iXam skriver så kan du nyttja ett större "omfång" (flytta omfånget) genom att använda unsigned.

Vet du med dig att ett värde inte kan överskrida maxvärdet för en datatyp så är det onödigt att använda "större" sådana.

Ta en titt på http://sv.wikipedia.org/wiki/Datatyp . Där ser man överskådligt vad varje datatyp innebär.

Gällande arduino (speciellt UNO som bygger på 328-kretsen) så kan man bli begränsad om man är lite oaktsam. Använde själv en sådan i ett examensarbete men fick byta upp mig till en mega eftersom resurserna helt enkelt inte räckte till. Värt att notera är att man får väldigt märkliga fel när man träffar väggen.
Ska du bara har arduinon till att göra lite enklare saker så behöver du nog inte oroa dig så mycket dock.

Permalänk
Skrivet av jika:

Precis som iXam skriver så kan du nyttja ett större "omfång" (flytta omfånget) genom att använda unsigned.

Vet du med dig att ett värde inte kan överskrida maxvärdet för en datatyp så är det onödigt att använda "större" sådana.

Ta en titt på http://sv.wikipedia.org/wiki/Datatyp . Där ser man överskådligt vad varje datatyp innebär.

Gällande arduino (speciellt UNO som bygger på 328-kretsen) så kan man bli begränsad om man är lite oaktsam. Använde själv en sådan i ett examensarbete men fick byta upp mig till en mega eftersom resurserna helt enkelt inte räckte till. Värt att notera är att man får väldigt märkliga fel när man träffar väggen.
Ska du bara har arduinon till att göra lite enklare saker så behöver du nog inte oroa dig så mycket dock.

Okej, tackar. Har mega.

Men jag är ganska bortskämd också när det gäller böcker. Jag har boken "Vägen till C" sista upplagan som behandlar C11. Inte ens den duger för mig.

Det får bli att lära sig från youtube istället
http://www.youtube.com/playlist?list=PLCB9F975ECF01953C

Eller vad föreslår du?
Jag vill helst bli en master i C. Tänk en sån där master som kan göra avancerade spel och program i C, typ som IDsoftware. Dom skapade Quake 3 rent i C.

Rasistisk och onödig formulering bortredigerad.
Permalänk
Medlem
Skrivet av heretic16:

Jag vill helst bli en master i C. Tänk en sån där master som kan göra avancerade spel och program i C, typ som IDsoftware. Dom skapade Quake 3 rent i C.

Ja det rimmar ju fint med det du skrev några inlägg tidigare med att du inte ville lägga ner speciellt mycket energi på det.
Varken Wolfenstein, Doom, eller Quake hade kunnat gjorts utan djupare kunskap och utnyttjande/trick av den hårdvaran som fanns då.

Och ska du göra 3D-spel(motorer) så är det inte enbart programmeringsspråk du behöver kunna utan även en hel del matematik.

Permalänk
Datavetare
Skrivet av heretic16:

Vad skönt.
Så det jag läser om "bit" och "konstanter", det är inte nödvändigt för att programmera normalt, om man sitter på en modern dator?

Beror på vad du gör. Om du tänker implementera protokoll som används på nätet och/eller mellan I/O-enheter i din dator så är dessa protokoll nästan alltid definierade så att man dra maximal nytta av tillgängligt utrymme. Så om ett tal bara kan vara mellan 0-1000 finns det ju absolut ingen anledning att använda mer än 10 bitar för att representera ett sådant tal.

Ta IPv4, det protokoll vi alla använder (ihop med TCP) för att posta och läsa inlägg på SweC. Headern för IPv4 paket ser ut på följande sätt

Dold text

I C kan jag på ett enkelt sätt definiera en struktur som exakt representerar detta så här på en "big-endian" CPU (man måste ha en lite annan definition på en little-endian maskin)

struct ipv4hdr { uint8_t ver:4; uint8_t ihl:4; uint8_t tos; uint8_t tot_len; uint16_t id; uint16_t reserved:1; uint16_t df:1; uint16_t mf:1; uint16_t offset:13; uint8_t ttl; uint8_t proto; uint16_t chksum; uint32_t src; uint32_t dst; uint32_t options[0]; };

I kod kan jag nu läsa/skriva individuella bitar precis lika enkelt och logiskt som vilket annat fält som helst.

foo(struct ipv4hdr *iphdr) { if (iphdr->ver != 4) /* Tydligen inte IPv4... */ if (iphdr->mf) /* detta är inte sista fragmentet */ iphdr->offset = /* nya värdet på 'offset' fältet, kan innehålla talet 0..8192 (0..2^13) */ }

Dold text

I praktiken ska man nog inte använda annat än char, int och unsigned int då storleken på char, short, int & long inte är specificerade. char använder man för enklare text (idag bör man köra med UTF-8 i stället för char) och int/unsigned int använder man när man behöver en heltalstyp som CPUn är som mest effektiv med. Vill man ha specifika storlekar så har ANSI-C typerna jag använde ovan (definierade i stdint.h) där man explicit anger bitstorlek och därmed kapaciteten.

signed/unsigned är något som i praktiken är långt mer komplicerat att få rätt än vad många först inser. Javas beslut att inte ha "unsigned" förenklar rejält jämfört med C/C++/C# då man kan åka på rejält luriga buggar om signed och unsigned heltal kombineras i ett och samma uttryck. I praktiken är det sällan man egentligen behöver unsigned, de tillfällen det är användbart är ofta samma där man även vill kunna specificera bitfält.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Jag skulle säga att baskunskaper inom hårdvara och programmering är viktigt för alla programmerare. Du säger du inte vet varför du skall lära dig detta, det tyder på att du inte har tillräcklig koll för att avgöra det själv. Hade du haft mer kunskaper i hårdvara hade du kanske sett nyttan så därför rekommnederar jag dig att lägga mycket tid på grunderna för att bli en vassare och mer förstående programmerare. Inte för inte som assembler och C är de första man lär ut på universitet.

Edit: grunderna är viktigt! Kommentera vid variabler med "//rör ej" är ett big NONO.

Skickades från m.sweclockers.com

Visa signatur

Gaming: Asus P8P67, Intel i5-2500k, Asus 7970 DCII, 8gb ram, 300gb velociraptor
Server: Asus Rampage II, Intel i7-980x, 6970 ref, 30gb ram, SASUC8I + 8st 2tb diskar + 1st 128gb SSD

Permalänk
Medlem
Skrivet av iXam:

Unsigned vad? Unsigned definierar att du kan använda även negativa tal (genom att använda en bit till det) vilket då halverar "omfånget" på talet du kan spara.
Long använder du när du vill kunna spara ett tal med det omfånget long är definierat till på den plattformen du använder.

Nu vet jag inte om jag läste inlägget bakåfram eller om jag är trött, men jag tolkade ditt inlägg som att unsigned tillåter negativa vilket är motsatsen. Unsigned betyder i princip utan tecken så alla tal blir positiva.

Permalänk
Medlem

Konstanter sparas i ROM och variabler i RAM. Så har du en massa konstanter så tar de inte upp något av ditt dyrbara arbetsminne.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av Dalton Sleeper:

Nu vet jag inte om jag läste inlägget bakåfram eller om jag är trött, men jag tolkade ditt inlägg som att unsigned tillåter negativa vilket är motsatsen. Unsigned betyder i princip utan tecken så alla tal blir positiva.

I signed använder man MSB för att påvisa att talet är negativt. så en signed byte går från 0 - 127 sedan kommer -128

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Skrivet av heretic16:

Vad skönt.
Så det jag läser om "bit" och "konstanter", det är inte nödvändigt för att programmera normalt, om man sitter på en modern dator?

Om du tycker att det är så förjävligt att lära dig om det så är kanske inte programmering någonting för dig. Om du ska arbeta som programmerare så kommer du antagligen vara tvungen att skriva minnessnåla program även idag. Ta som exempel om du arbetar på ett företag som ska utveckla en maskin som ska innehålla ett GUI och massa funktioner. För att dra ner på kostnaden på maskinen så väljer ledningen att köpa så billiga (och därmed dåliga) delar som möjligt. Då är det otroligt viktigt att ha kunniga programmerare som kan utveckla mjukvaran till detta.

För att ta ett exempel som antagligen slår närmare så tänker jag ta ett om spel. När spel-programmerare utvecklar spelmotorn och dylika delar till ett spel så är det även där otroligt viktigt att det är så minnes-snålt som möjligt. Däremot så kanske det inte är lika viktigt om du sedan scriptar till spelmotorn som utvecklats.

För bara ett par veckor sen så var jag tvungen att utveckla ett kommunikations protokoll till en produkt på jobbet. För att lösa denna uppgift var jag tvungen att gå ner på "bit" nivå i koden för att kolla att alla packet som skickades fram och tillbaka stämde.

Sist och inte minst, att som programmerare inte riktigt förstå sig på var en "bit" och en konstant är vore skamligt. Det är inte bara en lära i programmering utan även för hur en dator fungerar, varför skulle en programmerare som inte fullt förstår sig på hur man kan använda datorn för att göra som man vill få en anställning?

Konstanter kan även vara bra för design syfte och alltså inte allt i minneshantering. Säg att du vill skapa en variabel som ALDRIG får ändras. Då deklarerar man den som "const" och så är det klart. I detta fall handlar det inte allt om minneshantering.

EDIT: Jag förstår dock hur du känner, men tror att du kommer att ändra åsikt när du förstår dig på programmering bättre. Ett tips vore att fortsätta lära dig så mycket som möjligt och sedan möjligtvis att lära dig C# (lite lättare språk) för att lättare uppskatta programmering.

Visa signatur

| MacBook Pro 2016 Touch Bar 15" |

| 16GB Ram DDR4 2133 MHz | i5 6500k | RX 480 4GB | ASUS Z170-A | Fractal Design XL | Corsair TX650W |

CITERA FÖR SVAR

Permalänk
Medlem

Att bli en "Master" på programmera handlar väldigt lite om att behärska språket.

Du bör skaffa en god kunskap om hur en
Processor fungera och hårdvara rent generellt.
Hur kod kompileras och vilka instruktioner de omvandlas till.
Hur operativsystem fungera etc..

Sen kommer du fatta varför man vill ha koll på bitar, signed och float...

Visa signatur

ASUS M4A89GTD PRO/USB3 | AMD Phenom2 X6 1055T|GB GF GTX 460 | Corsair 4GB | SSD 40GB Intel X25-M | HD500GB Seagate ST3500418AS | |HD2TB Seagate ST2000DL003 | Corsair TX 650W PSU | Fractal Design Define R3

Permalänk
Medlem
Skrivet av Tallkotten:

Om du tycker att det är så förjävligt att lära dig om det så är kanske inte programmering någonting för dig. Om du ska arbeta som programmerare så kommer du antagligen vara tvungen att skriva minnessnåla program även idag. Ta som exempel om du arbetar på ett företag som ska utveckla en maskin som ska innehålla ett GUI och massa funktioner. För att dra ner på kostnaden på maskinen så väljer ledningen att köpa så billiga (och därmed dåliga) delar som möjligt. Då är det otroligt viktigt att ha kunniga programmerare som kan utveckla mjukvaran till detta.

För att ta ett exempel som antagligen slår närmare så tänker jag ta ett om spel. När spel-programmerare utvecklar spelmotorn och dylika delar till ett spel så är det även där otroligt viktigt att det är så minnes-snålt som möjligt. Däremot så kanske det inte är lika viktigt om du sedan scriptar till spelmotorn som utvecklats.

När man gör spelmotorer (iallafall förr när jag lekte med det) så är det viktigt att göra den så liten att den får plats i cachen på processorn, iallafall huvudloopen. Då får du upp en ohygglig fart på den om den inte behöver accessa det långsamma DRam minnet hela tiden. Tänk på det när du köper en speladtor. Så mycket minne på CPUn som möjligt.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Skrivet av ZecretW:

När man gör spelmotorer (iallafall förr när jag lekte med det) så är det viktigt att göra den så liten att den får plats i cachen på processorn, iallafall huvudloopen. Då får du upp en ohygglig fart på den om den inte behöver accessa det långsamma DRam minnet hela tiden. Tänk på det när du köper en speladtor. Så mycket minne på CPUn som möjligt.

Intressant. Har inte byggt en "renodlad" spelmotor än men mitt hobbyprojekt är väldigt nära. Bygger i C++ där och då är det väldigt viktigt att hålla reda på minnet och leaks.

Visa signatur

| MacBook Pro 2016 Touch Bar 15" |

| 16GB Ram DDR4 2133 MHz | i5 6500k | RX 480 4GB | ASUS Z170-A | Fractal Design XL | Corsair TX650W |

CITERA FÖR SVAR

Permalänk
Datavetare
Skrivet av ZecretW:

När man gör spelmotorer (iallafall förr när jag lekte med det) så är det viktigt att göra den så liten att den får plats i cachen på processorn, iallafall huvudloopen. Då får du upp en ohygglig fart på den om den inte behöver accessa det långsamma DRam minnet hela tiden. Tänk på det när du köper en speladtor. Så mycket minne på CPUn som möjligt.

En sak som är långt viktigare idag är att ta hänsyn till hur CPU-cachen mellan CPU-kärnor påverkas av ett program. Och här ser man den stora fördelen C/C++ har över alla andra språk; kontroll!

Om du har en struktur som samtidigt används av flera CPU-kärnor, vissa delar läser man bara och vissa andra både skriver man och läser (t.ex. statistikräknare, då vill du säkerställa en rad saker: din struktur ska alltid ligga i så få cache-lines som möjligt, men du vill ändå säkerställa att den del som är read-only ligger på en annan cache-line än delen som även skrivs. Du vill också att den del som skrivs, om möjligt, ligger så att CPU-kärna 1 skriver på en cache-line medan CPU-kärna 2 skriver på en annan (så slår man ihop resultatet när man vill läsa).

Är bara C/C++ (och assembler) som ger programmeraren den kontroll som behövs för att kunna säkerställa sådana saker, i Java/C# har jag ju ingen direkt konstroll över vart en struktur allokeras och heller ingen direkt kontroll över hur en struktur läggs ut i minnet. Någon kanske tycker: men nu pratar du om riktiga micro-optimeringar som man knappast behöver. Men det är inte sant, effekten av att ha olika CPU-kärnor skriva på separata cache-lines mot att de råkar dela en cache-line är typiskt 10-50% högre prestanda om det görs rätt vid 2 CPU-kärnor och effekten ökar exponentiellt med antalet CPU-kärnor (så vid 4-8 kärnor skiljer det många heltalsfaktorer).

I spel och andra interaktiva applikationer vill man också att programmet är helt förutsägbart, saker som automatiskt minneshantering blir då helt uteslutet. Alla lite mer avancerade spel använder sig inte ens direkt av malloc()/free() utan man skriver egna minneshanterar som ofta är specifika (lite olika) för olika typer av objekt i spelet. Moderna OS gör precis samma sak, det finns en generell minneshanterar i botten men sen har man specialdesignade minneshanterar för varje delsystem.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Rätt typ

Att lära sig och använda rätt datatyp gör ju skillnaden mellan en skicklig och en amatör till programmerare. Rätt datatyp för uppgiften gör koden mer lättläst, mindre risk för buggar, enklare att debugga och enklare att underhålla. Automatiskt fär man en kod som exekverar optimalt och spar på minnesresurser. Det finns fler argument tycker jag som försörjt mig på att koda C i 30 år.

Permalänk
Medlem
Skrivet av Yoshman:

Massa text...

Spännande, det visste jag inte. När jag höll på med detta fanns det bara en kärna i en CPU.

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av Dalton Sleeper:

Nu vet jag inte om jag läste inlägget bakåfram eller om jag är trött, men jag tolkade ditt inlägg som att unsigned tillåter negativa vilket är motsatsen. Unsigned betyder i princip utan tecken så alla tal blir positiva.

Med sömntabletter i kroppen skrev jag naturligtvis fel.

Permalänk

Jag laddade ner en PDF om just Arduino C.

Arduino använder sig inte av C eller C++. Det är ganska felaktigt också att skriva C/C++ också enligt mig.
Enligt boken som jag har nu så tillämpar man språket Arduino C som är C fast anpassat för arduino.

Så det går frammåt.
Arduino C är nog en mycket nedbantad version av C.

Permalänk
Datavetare
Skrivet av heretic16:

Det är ganska felaktigt också att skriva C/C++ också enligt mig.

Om man skriver C/C++ för att på något sätt mena C eller C-delmängden av C++ så är det numera fel. Det var korrekt fram till C89 då C innan dess var en strikt delmängd av C++. Men i C99 finns flera saker som saknas i C++ (även i C++11), och med C11 så har C och C++ divergerat ganska rejält.

När jag skrev C/C++ ovan var det för att beskriva egenskaper som de två språken delar, precis som jag skrev Java/C#, är nog större skillnad mellan C & C++ än det är mellan Java & C# om man bara tittar på finesser i språken.

Skrivet av heretic16:

Arduino C är nog en mycket nedbantad version av C.

Tittade lite snabbt, språkmässigt verkar Arduino C vara väldigt nära C89.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Läs på om läckande abstraktioner (en bit ner på sidan). Det finns som angivit tidigare i tråden mycket goda grunder till att använda just det man behöver av ressurser varken mer eller mindre. Det är klart att det är jobbigt att hålla på och mecka med malloc och free, men det finns en poäng även med detta. Om du har tänkt att koda med Arduino så finns det ofta ingen poäng med att släppa minne (på grund av att man sällan behöver samsas med andra program), men när man endast har 2 KB RAM till rådighet för programmet så räknas varje byte. Texten i detta meddelande kräver t.ex. 616 bytes!

Permalänk
Medlem

Det du tar upp är anledningen till att det finns effektiv kod och fungerande kod. Blir less på folk som behandlar mjukvaruproblem med lathet och hårdvara, och sedan sitter och kör saker som en gammal 286 processor hade klarat om man inte var en sån lat tafflare men som nu drar 25% på en överklockad i5. Vilket är lugnt. För att alla maskiner byts ut så fort det kommer ny arkitektur... just det...

C är ett underbart språk som gör att man kan använda så lite som möjligt till onödiga saker och sedan lägga kraften där den behövs. Klarar man inte av att vara noga och göra saker effektivt så kan man koda i Java, det skriver i princip sig självt.

Vet inte om det märks, men mjukvara driver man inte med i min värld. Lat mjukvara är roten till all ondska. Konsollmarknaden är ett lättillgängligt och underbart exempel på varför man alltid ska sträva efter effektivare kod.