TuguLab

Lo spazio delle idee del Tugurio
  • rss
  • Home
  • About
  • Termini Legali
  • Contact

Iniziare a programmare in C o C++ su Ubuntu

jollyr0ger | December 15, 2007 | 2:52 pm

Per la serie “Iniziare a programmare in…” ecco a voi un nuovo capitolo. Oggi vedremo come iniziare a programmare in C o in C++. Vedremo nello specifico come poter programmare con questi due linguaggi, secondo la standard ANSI (ovvero la vera versione del linguaggio, non quelle modificate dalle aziende per i loro comodi).

c_cpp.png

 

 

Avvertenze: il seguente manuale è stato pensato e testato per essere usato su una Ubuntu 7.10 Gutsy Gibbon. Questo vuol dire che su versioni o distribuzioni ci potrebbero essere alcuni accorgimenti da tenere in considerazione.
Quindi attenzione a ciò che fate!

Come hanno consigliato a me, a mio tempo, vi consiglierò anche io di seguire lo standard. Poichè è solo senguendo questa strada che si possono fare programmi in cui si sa esattamente quello che il vostro codice fa sulla macchina, dato che uno standard è tutto documentato. Inoltre, non siete obbligati ad usare specifici compilatori che potrebbero restringere la vostra libertà, imponendovi l’uso di determinati sistemi operativi o architetture, oltre alla possibilità di trovarvi nella situazione di pagare una licenza…

Quindi per evitare tutto questo, studiate il C o il C++ ANSI e utilizzate un compilatore come gcc (e soci) che oltre ad essere *ottimo* è pure open source.

»Preparazione

Dobbiamo preparare la nostra Ubuntu a compilare i nostri programmi, quindi installiamo un set di compilatori e librerie utili alla programmazione C/C++, con un unico comando:
sudo aptitude install build-essential

A questo punto siamo pronti per iniziare!

»Il turno del C

Ora proveremo a scrivere il nostro primo programma in C, quindi aprite un editor di testo, ad esempio gEdit e scrivete queste linee di codice:
#include <stdio.h>
int main(void){
printf("Hello Tugu!\n");
return 0;
}

Quindi salvatelo nella directory /home (quella predefinita) dandogli un nome a piacere, ma con estenzione .c, in questo esempio utilizzeremo hellotugu.c
Apriamo un Terminale, in cui digiteremo le seguenti linee di codice per compilare il nostro programma ed eseguirlo:
gcc -Wall -g hellotugu.c -o hellotugu
./hellotugu

Cosa abbiamo fatto? Abbiamo chiamato il compilatore gcc (compilatore su cui è cresciuto Linux, scritto dal gruppo GNU, tant’è che gcc significa GNU Compiler Collection) dandogli diversi parametri:

  • -Wall che ci segnala tutti gli errori non critici, che sì non compromettono la compilazione del nostro programma, ma che sarebbe meglio correggere. Se vi cimenterete nelle studio del linguaggio imparerete sicuramente cosa sono i Warning
  • -g hellotugu.c gli dice che file compilare
  • -o hellotugu dice che nome deve avere il file compilato (quello che potremo eseguire)

Dopo questo comando, se non vi è nessun output da parte del compilatore significa che la compilazione è andata a buon fine, altrimenti vi segnala dov’è l’errore ed eventualmente il motivo.

Nota: ci sarebbe stata anche la possibilità di compilare con il comando gcc hellotugu.c, ma lo sconsiglio, questa forma la ritengo personalmente più razionale.

Nella seconda riga abbiamo eseguito il programma con il comando ./nome_eseguibile. Cosa significa “./ “?? Significa directory corrente, quindi il comando significa “esegui il file nome_eseguibile nella directory corrente“.
E in fine abbiamo l’output del nostro programma.

»Il turno del C++

Apriamo un editor di testo, ad esempio gEdit e scriviamo questo codice:
#include <iostream>
using namespace std;
int main(void){
cout << "Hello Tugu!\n";
return 0;
}

Chiudiamo e salviamo con nome, anche qui, a piacere, ma con estensione .cpp. Noi utilizzeremo hellotugu.cpp per questo esempio.
Ora compiliamo ed eseguiamo:
g++ -Wall -g hellotugu.cpp -o hellotugu
./hellotugu

Come sopra, con la prima compiliamo e con la seconda eseguiamo. Citando da sopra ecco cosa facciamo in dettaglio con questi comandi.
Abbiamo chiamato il compilatore g++ (compilatore per il C++, scritto dal gruppo GNU, all’interno della suite gcc) dandogli diversi parametri:

  • -Wall che ci segnala tutti gli errori non critici, che sì non compromettono la compilazione del nostro programma, ma che sarebbe meglio correggere. Se vi cimenterete nelle studio del linguaggio imparerete sicuramente cosa sono i Warning
  • -g hellotugu.cpp gli dice che file compilare
  • -o hellotugu dice che nome deve avere il file compilato (quello che potremo eseguire)

Dopo questo comando, se non vi è nessun output da parte del compilatore significa che la compilazione è andata a buon fine, altrimenti vi segnala dov’è l’errore ed eventualmente il motivo.

Nota: ci sarebbe stata anche la possibilità di compilare con il comando g++ hellotugu.cpp, ma lo sconsiglio, questa forma la ritengo personalmente più razionale.

Nella seconda riga abbiamo eseguito il programma con il comando ./nome_eseguibile. Cosa significa “./ “?? Significa directory corrente, quindi il comando significa “esegui il file nome_eseguibile nella directory corrente“.

»Utilizziamo un IDE per programmare

L’ultima chicca della giornata è Geany. Un IDE (Integrated Development Environment – Ambiente Integrato di Sviluppo), ovvero un programma che comprende molte utilità che ci aiutano nello sviluppo, rendendolo più veloce e meno difficoltoso.

Lo installiamo digitando nel terminale questo comando (bisogna attivare i repository Extra):
sudo aptitude install geany

A questo punto potete riaprire uno dei programmi creati con Geany e compilarli con F8 (talvolta con F9) ed eseguirli con F5. Molto più rapido.

hellotugucpp_geany.png

Ora non rimane che augurarci, buona fortuna!

»Link utili

  • Sito del progetto del compilatore
  • Forum molto preparato sul C/C++
  • Descrizione funzioni C

Post correlati

  • Come configurare un mouse a più tasti
  • Installare WebGoat su GNU/Linux
  • Differenze installazione software su GNU/Linux e Windows
  • How-To: Server LAMP su Ubuntu con un 1 click
  • Guida definitiva per emulare Openmoko e l’ASU
Categories
C/C++, GNU/Linux, Geany, Guide, How-To, Iniziare-a-programmare, Programmazione, Ubuntu
Tags
c, C/C++, cominciare, How-To, howto, iniziare, Installare, linux, programmare, Ubuntu
Comments rss
Comments rss
Trackback
Trackback

« Cartelle con password?? Meglio EasyCrypt! Attivare i Repository Extra (per newbie) »

14 responses

mi esce fuori sta cosa qua..anche se il sorgente l'ho

beppe | January 21, 2008 | 7:55 pm

mi esce fuori sta cosa qua..anche se il sorgente l’ho copia/incollato da questa guida..

faccio gcc -Wall -g esempio.cpp -o esempio
e poi ecco:

In file included from /usr/include/c++/4.1.3/backward/iostream.h:31,
from esempio.cpp:1:
/usr/include/c++/4.1.3/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the header for the header for C++ includes, or instead of the deprecated header . To disable this warning use -Wno-deprecated.
/tmp/ccKWDMHg.o: In function `__static_initialization_and_destruction_0′:
/usr/include/c++/4.1.3/iostream:76: undefined reference to `std::ios_base::Init::Init()’
/tmp/ccKWDMHg.o: In function `__tcf_0′:
/usr/include/c++/4.1.3/iostream:76: undefined reference to `std::ios_base::Init::~Init()’
/tmp/ccKWDMHg.o: In function `main’:
/home/beppe/Desktop/esempio.cpp:5: undefined reference to `std::cout’
/home/beppe/Desktop/esempio.cpp:5: undefined reference to `std::basic_ostream<char, std::char_traits >& std::operator<< <std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*)’
/tmp/ccKWDMHg.o:(.eh_frame+0×11): undefined reference to `__gxx_personality_v0′
collect2: ld returned 1 exit status

devi assicurarti che il codice del programma sia uguale a

jollyr0ger | January 22, 2008 | 11:18 am

devi assicurarti che il codice del programma sia uguale a quello postato.
Questo errore lo capirei se avessi usato la vecchia libreria c++ (per intenderci quella .h), ma se hai utilizzato iostream non dovrebbero esserci problemi…

x beppe L'errore ti salta fuori perchè hai compilato un programma

Cristian | January 22, 2008 | 2:32 pm

x beppe

L’errore ti salta fuori perchè hai compilato un programma in c++ (estensione .cpp) con il compilatore gcc che è per programmi scritti in c (estensione .c).
Se invece usi il compilatore g++ l’errore non ti salta più fuori…

Buona programmazione, ciao!!

Grazie a voi ho risolto :D sbagliavo compilatore. ciao!

beppe | January 25, 2008 | 3:44 pm

Grazie a voi ho risolto :D

sbagliavo compilatore.
ciao!

come posso eseguire da shell (ubuntu 7.10) il programma (in

elehan | February 27, 2008 | 6:10 pm

come posso eseguire da shell (ubuntu 7.10) il programma (in c) compilato? basta che una volta creato file.exe scriva sulla riga di comando “file”? perchè mi dice command not found e di sicuro… ha ragione lui.
grazie!

allora come postato nella guida prima devi aprire la shell,

jollyr0ger | February 27, 2008 | 8:23 pm

allora come postato nella guida prima devi aprire la shell, poi ti dirigi nella cartella dove hai il sorgente. A questo punto digiti: gcc -Wall -g nome_sorgente.c -o nome_eseguibile
questo comando servirà a compilare e crearti il file eseguibile (non necessariamente .exe, può avere qualsiasi nome)
per eseguire il programma devi dare: ./nome_eseguibile
Nota che davanti a nome_eseguibile c’è un punto e slash “./”

Così dovresti riuscirci

Nell'esempio scritto in C, bisogna fare attenzione alle virgolette copiate

gianted | March 9, 2008 | 9:02 am

Nell’esempio scritto in C, bisogna fare attenzione alle virgolette copiate dal codice (“”, al posto di ””). Nell’esempio bisogna inserire “Hello Tugu!\n”, anziché ”Hello Tugu!\n” (altrimenti gcc restituise un errore di compilazione).

Ciao,
gianted

PS. Ho rivisto la mia risposta di poco fa pubblicata:

gianted | March 9, 2008 | 9:04 am

PS. Ho rivisto la mia risposta di poco fa pubblicata: a quanto pare le virgolette “dritte” vengono reinterpretate dall’applicazione che pubblica sul web. Quindi meglio inserirle a mano che copiarle.

Ciao.

grazie per il tuo appunto ;)

jollyr0ger | March 10, 2008 | 8:37 pm

grazie per il tuo appunto ;)

io con ubuntu 7.10 compilando con: g++ -Wall -g Provacpiupiu.cpp -o

andrea | March 12, 2008 | 1:30 pm

io con ubuntu 7.10 compilando con:

g++ -Wall -g Provacpiupiu.cpp -o prova

ho il seguente errore:

Provacpiupiu.cpp: In function ‘int main()’:
Provacpiupiu.cpp:12: error: no match for ‘operator>>’ in ‘std::cin.std::basic_istream::operator>> [with _CharT = char, _Traits = std::char_traits](((int&)(& anni))) >> std::endl’
/usr/include/c++/4.1.3/istream:131: note: candidates are: std::basic_istream& std::basic_istream::operator>>(std::basic_istream& (*)(std::basic_istream&)) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:134: note: std::basic_istream& std::basic_istream::operator>>(std::basic_ios& (*)(std::basic_ios&)) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:137: note: std::basic_istream& std::basic_istream::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:169: note: std::basic_istream& std::basic_istream::operator>>(bool&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:172: note: std::basic_istream& std::basic_istream::operator>>(short int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:175: note: std::basic_istream& std::basic_istream::operator>>(short unsigned int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:178: note: std::basic_istream& std::basic_istream::operator>>(int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:181: note: std::basic_istream& std::basic_istream::operator>>(unsigned int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:184: note: std::basic_istream& std::basic_istream::operator>>(long int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:187: note: std::basic_istream& std::basic_istream::operator>>(long unsigned int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:191: note: std::basic_istream& std::basic_istream::operator>>(long long int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:194: note: std::basic_istream& std::basic_istream::operator>>(long long unsigned int&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:198: note: std::basic_istream& std::basic_istream::operator>>(float&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:201: note: std::basic_istream& std::basic_istream::operator>>(double&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:204: note: std::basic_istream& std::basic_istream::operator>>(long double&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:207: note: std::basic_istream& std::basic_istream::operator>>(void*&) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:230: note: std::basic_istream& std::basic_istream::operator>>(std::basic_streambuf*) [with _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:730: note: std::basic_istream& std::operator>>(std::basic_istream&, _CharT2*) [with _CharT2 = char, _Traits2 = std::char_traits, _CharT = char, _Traits = std::char_traits]
/usr/include/c++/4.1.3/istream:78: note: std::basic_istream& std::operator>>(std::basic_istream&, _CharT2&) [with _CharT2 = char, _Traits2 = std::char_traits, _CharT = char, _Traits = std::char_traits]

a seguito di un banale programma : #include using namespace std; int main

andrea | March 12, 2008 | 1:33 pm

a seguito di un banale programma :

#include

using namespace std;
int main ()
{
int anni=0;
cout<<”Inserisci un numero “<>anni>>endl;
cout<<” Il numero e’ “<<anni<<endl;
return 0;
}

l'include c'è inserito ed è : #include

andrea | March 12, 2008 | 1:34 pm

l’include c’è inserito ed è :

#include

quello precedente l'ho risolto. Invece dei problemi a far funzionare questo: #include #include using

andrea | March 12, 2008 | 3:32 pm

quello precedente l’ho risolto.

Invece dei problemi a far funzionare questo:

#include
#include

using namespace std;

int main()
{
set a;
a.insert(4);
for(a::iterator pos =a.begin; pos!=a.end; pos++)
{
cout<<”Il valore inserito e’”<< *pos<<endl;
}
}

che mi da i seguenti errori:

Provacpiupiu.cpp: In function ‘int main()’:
Provacpiupiu.cpp:10: error: ‘a’ is not a class or namespace
Provacpiupiu.cpp:10: error: expected `;’ before ‘pos’
Provacpiupiu.cpp:10: error: ‘pos’ was not declared in this scope

invece se metto il typedef, come nel modo seguente: #include #include using namespace

andrea | March 12, 2008 | 3:35 pm

invece se metto il typedef, come nel modo seguente:

#include
#include

using namespace std;

int main()
{
typedef set a;
a.insert(4);
for(a::iterator pos =a.begin; pos!=a.end; pos++)
{
cout<<”Il valore inserito e’”<< *pos<<endl;
}
return 0;
}

mi da quest’altri errori:

Provacpiupiu.cpp: In function ‘int main()’:
Provacpiupiu.cpp:9: error: expected unqualified-id before ‘.’ token
Provacpiupiu.cpp:10: error: expected primary-expression before ‘.’ token
Provacpiupiu.cpp:10: error: expected primary-expression before ‘.’ token

Leave a comment

You can use these tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


 Iscriviti ai Feed!

Categories

  • Eventi
  • GNU/Linux
    • Ubuntu
  • Guide
    • How-To
  • Libri
  • Migliorare Ubuntu+1
  • Openmoko
    • Neo Freerunner
  • opensource
  • Progetti
  • Programmazione
    • C/C++
    • Geany
    • Iniziare-a-programmare
    • Php
  • Sicurezza
    • Crypt
  • Software
    • Installare
  • StoryBoard
    • jollyr0ger
  • Sviluppo web
  • Uncategorized
  • Università
  • Varie
  • Varietà informatico
  • Web2.0
    • SecretCities

Blogroll

  • Brunozzi
  • Club del Libro
  • Ercolinux
  • Facciosnao
  • Futuro prossimo
  • Intruders TV
  • Italian webdesign
  • OSSblog
  • Planet Openmoko
  • Pollycoke
  • Story of Stuff
  • Ubuntista
  • Where the Hell is Matt?

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

Recent Comments

  • Notizie dai blog su How To Install BIKA LIMS Inkosi On Ubuntu Server In 15 Minutes on How-To: Server LAMP su Ubuntu con un 1 click
  • Pagoman on Cominciamo ad utilizzare il nostro FreeRunner Openmoko FDOM sul serio!!
  • granago on Vendo Openmoko Freerunner a Torino
  • jollyr0ger on Migliorare Ubuntu+1: il menù di avvio
  • Steve on Migliorare Ubuntu+1: il menù di avvio

Buttons


linuxfeed Spread
eXplicatum - Aggregatore online di Notizie / Blog / Flussi RSS
View blog authority

BlogItalia.it - La directory italiana dei blog
Aggregato su SocialBlog

Computer Blogs - BlogCatalog Blog Directory
Computers
Top Blogs
Page Rank Check

Locations of visitors to this page
Free Blogger

Sign for No alla rettifica per tutti i "siti informatici"

My Buzz Monitor

Tags

1973 abaco abacocomputers aggiornare ASU better brainstorm cercasi come configurare days debian FreeRunner getting GNU/Linux grub guida howto improve iniziare Installare linux list manuale mappano menu moko mysql Neo open Openmoko opensource Software source start started startup sviluppo talk torino Ubuntu ubuntu+1 up veloce web
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox