Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Gtec - 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
-
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:
$ gcc <tiedostosi nimi>
tuloksen pullahtaa käänetty, suoritettavissa oleva binääri nimeltään a.out.
-
Hello worldin kääntäminen:
$ sudo apt-get install build-essential
hello.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World \n";
return 0;
}
$ g++ hello.cpp -o hello
$ ./hello
-
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:
#include <stdio.h>
int main(void)
{
printf("Hello world!\n");
return 0;
}
-
Ohops, C:tä kysyttiin :P Mutta miksi ei opetella suoraan C++:aa, jos kumpikaan ei ole ennestään hallussa?
-
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)
-
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 :)
-
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
-
Justiiinsa kun meinasin ruveta kyselemään tuosta file not recon... olikin siihen jo vastattu. ;D
Mutta millä tuo a.out suoritetaan?
-
Justiiinsa kun meinasin ruveta kyselemään tuosta file not recon... olikin siihen jo vastattu. ;D
Mutta millä tuo a.out suoritetaan?
./a.out
-
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:
$ 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:
$ /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:
$ 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:
$ ../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:
$ ~/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:
$ echo $PATH
jossa etsittävät hakemistot on eroteltu kaksoispisteellä.
-
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ää.
-
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.
-
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?
-
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.
-
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.