Kirjoittaja Aihe: Pieni ohjeistus c-kielen kääntämiseen  (Luettu 6669 kertaa)

Gtec

  • Käyttäjä
  • Viestejä: 32
    • Profiili
Pieni ohjeistus c-kielen kääntämiseen
« : 13.07.07 - klo:18.43 »
Ajattelin tässä tutustua c-ohjelmointiin. Olen kolunnut Ohjelmointiputkan ja Mureankuhan c++ sivustoja, mutta tuo kääntäjä homma on täyttä utopiaa. Siis niiden käytöstä ja toiminnasta ei ole mitään tietoa. Latasin Anjutan koneelle, siellähän on myös se oletus gcc. Onko jompikumpi helppo täysin ummikolle. Onko jotakin muuta ohjelmaa?. Lähinnä kait kaipaisin käestä pitäen ohjeita tuohon hommaan (kääntäjille). Olen kyllä selannut muita topikkeja, mutta en niistä ole viisastunut. Muita ohjelmointi kieliä en edes harkitse (tässä vaihessa), johtuen koulussa eteen tulevista tarpeista ja opetuksesta.

EDIT:
Muutin otsikon paremmin aihetta vastaavaksi
« Viimeksi muokattu: 14.07.07 - klo:15.26 kirjoittanut Gtec »

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #1 : 13.07.07 - klo:20.32 »
Ajattelin tässä tutustua c-ohjelmointiin. Olen kolunnut Ohjelmointiputkan ja Mureankuhan c++ sivustoja, mutta tuo kääntäjä homma on täyttä utopiaa. Siis niiden käytöstä ja toiminnasta ei ole mitään tietoa.

no, käytännössä kääntäjän sielunelämää ei tarvitsekaan kamalan syvällisesti tuntea, kunhan perusteet ymmärtää.

Latasin Anjutan koneelle, siellähän on myös se oletus gcc. Onko jompikumpi helppo täysin ummikolle.

Anjuta ei ole kääntäjä vaan integtoitu kehitysympäristö, IDE. taustalla Anjuta käyttää kiltisti gcc:tä.

siitä mikä on oikeasti helppo on kahtaa mielipidettä. toisten mielestä kääntäjän käyttäminen suoraan on 'pelottavaa' tai 'hankalaa' mutta toisaalta IDE:n käyttäminen vaatii kuitenkin hieman perustietoja kääntämisestä ja lisäksi pitää opetella käyttämään sitä IDEä.

joka tapauksessa kääntäjän käytön opettelu tulee jossain vaiheessa eteen, hyvin todennäköisesti myös maken.

Onko jotakin muuta ohjelmaa?

kääntäjiä ja IDEjä löytyy molempia. vapaina, ilmaisina ja maksullisina.

Lähinnä kait kaipaisin käestä pitäen ohjeita tuohon hommaan (kääntäjille). Olen kyllä selannut muita topikkeja, mutta en niistä ole viisastunut. Muita ohjelmointi kieliä en edes harkitse (tässä vaihessa), johtuen koulussa eteen tulevista tarpeista ja opetuksesta.

eiköhän sitä sitten siellä koulussakin opeteta. alkuun on kuitenkin helppo päästä. asennat vain paketin build-essential, kirjoitat c-kielisen lähdekoodin ja käännät sen komennolla:
Koodia: [Valitse]
$ gcc <tiedostosi nimi>
tuloksen pullahtaa käänetty, suoritettavissa oleva binääri nimeltään a.out.
Janne

Melmacian

  • Käyttäjä
  • Viestejä: 868
  • Ubuntu Hardy
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #2 : 13.07.07 - klo:20.37 »
Hello worldin kääntäminen:

Koodia: [Valitse]
$ sudo apt-get install build-essential
hello.cpp
Koodia: [Valitse]
#include <iostream>

using namespace std;

int main()
{
cout << "Hello World \n";
return 0;
}
Koodia: [Valitse]
$ g++ hello.cpp -o hello
Koodia: [Valitse]
$ ./hello

tomppa

  • Käyttäjä
  • Viestejä: 165
  • Debian4.0
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #3 : 13.07.07 - klo:20.38 »
Tutustumisen arvoinen IDE: http://www.codeblocks.org/

Jos ei pelkkä gedit riitä (vaikka pieniin soodailuihin soveltuukin vallan mainiosti). :)

muoks:

Tuo Epelin koodi vaikuttaisi aika pitkälti c++:lta. ;)

C:llä kai menee jotenkin näin:
Koodia: [Valitse]
#include <stdio.h>
int main(void)
{
  printf("Hello world!\n");
  return 0;
}
« Viimeksi muokattu: 13.07.07 - klo:20.40 kirjoittanut tomppa »

Melmacian

  • Käyttäjä
  • Viestejä: 868
  • Ubuntu Hardy
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #4 : 13.07.07 - klo:20.42 »
Ohops, C:tä kysyttiin :P Mutta miksi ei opetella suoraan C++:aa, jos kumpikaan ei ole ennestään hallussa?

Gtec

  • Käyttäjä
  • Viestejä: 32
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #5 : 13.07.07 - klo:21.23 »
Koulussa on käytössä mikkisofta (itse en aio siihen takaisin siirtyä ainakaan vapaa ehtoisesti) ja ilmeisesti (kuulopuheita) sellainen kääntäjä joka "auttaa" ja toimii jotenkin "reaaliajassa". Tarkoituksenani on opetella myös c++ kun aika koitaa, mutta nyt on tärkein tuo c. Jos joskus meinaa itse ruveta suunnittelemaan, valmistamaan ja toteuttamaan tuotantolinjoja yms. ei pelkät koulun opit riitä. Mutta asiaan.

Kirjoitin geditillä näin.

#include <stdio.h>
   int main(void)
   {
     printf("Hello world!\n");
     return 0;
   }.

Tallensin sen desktopille ja aukaisin päätteen jonne latelin,
koti@koti-desktop:~$ gcc <tero>

pääte vastasi,
bash: syntax error near unexpected token `newline'.

Mikäköhän meni vikaan :)
(Asensin ensimmäisenä sen build-essentialin)

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #6 : 13.07.07 - klo:21.39 »
Tallensin sen desktopille ja aukaisin päätteen jonne latelin,
koti@koti-desktop:~$ gcc <tero>

pääte vastasi,
bash: syntax error near unexpected token `newline'.

Mikäköhän meni vikaan :)
(Asensin ensimmäisenä sen build-essentialin)

no vika on varmaan tuossa <tero> -kohdassa. en tietysti ollut kyllin selvä ohjeissani... siis sen tiedoston ympärille ei kirjoiteta noita <> merkkejä vaan pelkkä tiedoston nimi.

kyllä se siitä lähtee :)
Janne

tomppa

  • Käyttäjä
  • Viestejä: 165
  • Debian4.0
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #7 : 14.07.07 - klo:12.50 »
Ja vielä kun tallennat sen tiedoston esim tero.c niin sitten alkaa sujumaan.

Jos ei tuolle tiedostolle anna tuota .c-päätettä niin huutelee  tällaista:
file not recognized: File format not recognized



Gtec

  • Käyttäjä
  • Viestejä: 32
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #8 : 14.07.07 - klo:13.00 »
Justiiinsa kun meinasin ruveta kyselemään tuosta file not recon... olikin siihen jo vastattu.  ;D
Mutta millä tuo  a.out suoritetaan?

tomppa

  • Käyttäjä
  • Viestejä: 165
  • Debian4.0
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #9 : 14.07.07 - klo:13.03 »
Justiiinsa kun meinasin ruveta kyselemään tuosta file not recon... olikin siihen jo vastattu.  ;D
Mutta millä tuo  a.out suoritetaan?

./a.out

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #10 : 14.07.07 - klo:13.36 »
Justiiinsa kun meinasin ruveta kyselemään tuosta file not recon... olikin siihen jo vastattu.  ;D
Mutta millä tuo  a.out suoritetaan?

Epeli tuolla jo lisäsikin soppaan parametrin jolla käännetyn ohjelman nimen pystyy itse määrittämään jo käännösaikana, eli siis tuo -o. tällöin:
Koodia: [Valitse]
$ gcc tero.c -o tero
tuottaa binäärin nimeltä tero, jonka voi suorittaa aivan kuten tomppa ohjeisti.

tuo suorittaminen tapahtuu noin, koska... komentotulkissa annettuja komentoja etsitään vain hakupolun* varresta, jos suoritettavaa sovellusta ei polun varresta löydy, niin tulostetaan virhe. jotta komentotulkki suorittaisi jonkun tietyn suoritettavaksi merkityn ohjelman, pitää sille antaa polku tähän suoritettavaksi tarkoitettuun binääriin. polku saa olla absoluuttinen tai suhteellinen.

käytännössä siis minun koneellani oman profiilini nimi on janne, joten työpöydällä olevan a.out-tiedoston voisi suorittaa absoluuttista polkua käyttäen komennolla:
Koodia: [Valitse]
$ /home/janne/Desktop/a.out
suhteellisella polulla, polku annetaan nimensä mukaan suhteessa siihen hakemistoon jossa parhaillaan ollaan, esim. jos olisi hakemistossa /home/janne, voisin komentaa:
Koodia: [Valitse]
$ Desktop/a.out
tompan antama polku on suhteellinen, sillä pistettä käytetään osoittamaan nykyiseen hakemistoon. vastaavasi kahta pistettä käytetään viittaamaa hakemistoon joka on yhtä pykällää lähempänä juurta aivan kuten komennon cd kanssakin. siis jos olen hakemistossa /home/janne/Desktop/juttui, onnistuu a.outin suoritus komennolla:
Koodia: [Valitse]
$ ../a.out
lisäksi on varmaan hyvä mainita, että tilde-merkki (~) osoittaa käyttäjän omaan kotihakemistoon (aivan kuten URLeissa ;) ). siis voisin suorittaa a.out:n absoluuttisen polun lisäksi tildeä käyttäen, riippumatta siitä missä itse olen komentoa suorittaessani:
Koodia: [Valitse]
$ ~/Desktop/a.out
*ja se aikaisemmin mainittu hakupolku sijaitsee ympäristömuuttujassa nimeltä PATH ja jos se kiinnostaa, niin sen saa näkyviin vaikkapa komentamalla:
Koodia: [Valitse]
$ echo $PATH
jossa etsittävät hakemistot on eroteltu kaksoispisteellä.
Janne

Gtec

  • Käyttäjä
  • Viestejä: 32
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #11 : 14.07.07 - klo:15.24 »
Kiitoksia kaikille vastanneille nyt on päästy alkuun ja Hello Worldkin näkyville.

Teenpä vielä pikku koosteen jos joskus joku muukin asiaa miettii.

Ensimmäisenä asennetaan Build-Essential, jos ei sitä vielä ole asennettu.

sudo apt-get install build-essential

Seuraavaksi kirjoitetaan tekstieditorilla koodi esim.

#include <stdio.h>
   int main(void)
   {
     printf("Hello world!\n");
     return 0;
   }

tallennetaan koodin pätkä kotikansioon vaikka nimelle nimi.c
Avataan pääte jonne naputellaan gcc nimi.c, tämän toiminnon pitäisi tehdä kotikansioon tiedoston nimeltä a.out
a.out suoritetaan päätteessä käskyllä ./a.out. Jos kaikki on mennyt hyvin pitäisi päätteessä lukea Hello World.

Tuolla litanialla ainakin minä sain homman alulle ja nyt opiskelemaan lisää.

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #12 : 14.07.07 - klo:15.29 »
a.out suoritetaan päätteessä käskyllä ./a.out. Jos kaikki on mennyt hyvin pitäisi päätteessä lukea Hello World.

Kunhan muistaa tehdä tiedostosta ajettavan chmod-komennolla.

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: c-kääntäjää? (käyttö apua).
« Vastaus #13 : 14.07.07 - klo:15.38 »
a.out suoritetaan päätteessä käskyllä ./a.out. Jos kaikki on mennyt hyvin pitäisi päätteessä lukea Hello World.

Kunhan muistaa tehdä tiedostosta ajettavan chmod-komennolla.

eikö käänösprosessi aseta sitä automaattisesti ajettavaksi?
Janne

Gtec

  • Käyttäjä
  • Viestejä: 32
    • Profiili
Vs: Pieni ohjeistus c-kielen kääntämiseen
« Vastaus #14 : 14.07.07 - klo:16.03 »
Tämän chmod jutunko pitäisi tehdä tiedostosta hiirellä aukaistavan?

Tuo gcc tero.c:n ajaminen tekee kansioon a.out kuvakkeen joka on samanlainen kuin .exe tiedosto ja sitä saa hiirellä naputella ihan rauhassa, mitään ei tapahtunut. Tuolla ./a.out komenolla saan päätteeseen näkymään kirjoitukseni.

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: Pieni ohjeistus c-kielen kääntämiseen
« Vastaus #15 : 14.07.07 - klo:17.50 »
Tämän chmod jutunko pitäisi tehdä tiedostosta hiirellä aukaistavan?

ei. sillä voi antaa eri käyttäjille ja ryhmille eriliaisa oikeuksia tiedostoon nähden ja tässä ajettiin takaa suoritusoikeuksia. jos tiedostolla ei ole suoritusoikeuksia, niin sitä ei voi ajaa.

Tuo gcc tero.c:n ajaminen tekee kansioon a.out kuvakkeen joka on samanlainen kuin .exe tiedosto ja sitä saa hiirellä naputella ihan rauhassa, mitään ei tapahtunut. Tuolla ./a.out komenolla saan päätteeseen näkymään kirjoitukseni.

kun klikkaat suoritettavaa ohjelmaa hiirellä, niin se kyllä ajetaan, mutta koska sitä varten ei avata terminaali-ikkunaa, ei stdoutiin tulostettu teksti tule mihinkään näkyviin. jos ohjelmasi loisi vaikkapa tiedostoja ja kirjoittaisi niihin jotain, niin tiedsoto luotaisiin vaikka mitään ei tulisikaan näkyviin.
Janne