16
C for Java-programmerere
Innspill: Comments off · Kategori: Data og teknologi · Tagger: C, Java, programmering

Av: Else Lervik, førstelektor og faglærer i programmering og databaser
Mange nyutdannede programmerere behersker Java. Hva gjør du når du blir konfrontert med et C-program som det skal legges inn endringer i? For ordens skyld: Dette blogginnlegget handler ikke om C++ (som er en objektorientert utvidelse av C). Det meste som sies her er imidlertid også sant for C++, men med C++ kommer det mye mer.
Det som nok vil ta mest tid, er forskjellen i grunnfilosofien bak de to språkene. C passer ikke like godt på deg som Java. Det vil si at du får færre feilmeldinger. Ting som Java-kompilator eller -tolker fanger opp, blir oversett av C. I stedet får du logiske feil eller intetsigende meldinger som det kan være svært vanskelig å finne ut av. Tanken i C er at en programmerer alltid vet hva han/hun gjør, og derfor må få lov til å gjøre det (for eksempel å skrive utenfor en tabellgrense), så sant det er teknisk mulig.
Merk deg spesielt følgende:
- I Java kompilerer du til class-filer, og kjører en tolker som oversetter til maskinkode der og da. Et C-program kompileres direkte til maskinkode. De kompilerte filene lenkes sammen til et kjørbart program.
- C er ikke plattformuavhengig. Eksempelvis kan tallområdet for heltall være forskjellige på ulike plattformer. (Slik er det ikke i Java.)
- Klasser eksisterer ikke i C. Alt kan betraktes som static-metoder (sagt i Java-terminologi). main() skal altså ikke ligge i en klasse.
- Husk at alle variabler må gis verdi i programmet. Dersom du ikke gjør det får de en tilfeldig verdi. Og da blir selvfølgelig resultatene feil.
- En peker er en variabel som inneholder adressen til en annen variabel. På den måten ligner den på en referanse i Java. Men du kan addere og subtrahere heltall til en peker (og få nye adresser), det kan du ikke med en Java-referanse.
- En funksjon i C er det samme som en metode i Java. I C er det vanlig at funksjoner sender data ut gjennom parameterlisten. Og da brukes pekere.
- C er ikke objektorientert. Prinsippet for ”gammeldags”, strukturert programmering er som følger: Du deler opp algoritmene på flere nivåer uten å knytte algoritmene til objekter. Du deler altså kompliserte algoritmer opp i mindre håndterbare deler – som gjerne blir funksjoner.
- Funksjoner i strukturert programmering er altså ikke knyttet til objekter. Slik ligner de på klassemetoder i Java. Alle data som du er vant til at er samlet i objektet i Java, må i C sendes fram og tilbake via parameterlisten (og eventuelt returverdien). (Vel – dataene kan være globale, men det anbefales ikke …)
- I C kan du lage tabeller både på stakken og i det frie lageret (”heapen”). Tabellene kjenner ikke til sin egen lengde. Du kan gjerne bruke ugyldig indeks. Kjøresystemet regner ut den adressen du ber om og henter ut eller lagrer data der, uavhengig av om datacellen tilhører tabellen eller ikke. Dette kan selvfølgelig få uante konsekvenser. I C-standarden fra -99 kan tabeller på stakken ha størrelse gitt av en variabel. (I C++ må man bruke det frie lageret for å lage tabeller med lengde som ikke er kjent under kompilering.)
- Data kan samles i strukturer (struct). Dette ligner på objekter uten metoder og med kun offentlige variabler.
Har du eksempler eller erfaringer som viser forskjellen på C og Java? Triks eller gode lenker som gjør det lettere for Java-programmerere å gå over til C? Del gjerne!
Dette innlegget har Comments off. Gjerne bidra :-)
Skrevet av: itfag (totalt 65 blogginnlegg)