Debianizzati.Org | Forum | Blog | Guide | IRC
 
 
Forum Italiano Debian - Debianizzati.Org
Novembre 22, 2008, 05:11:15 pm *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Aiuto Ricerca Agenda Accedi Registrati  
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: [C] argomenti default  (Letto 429 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
skuro
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 75


Mostra profilo E-mail
« inserita:: Ottobre 14, 2005, 01:40:58 pm »

salve a tutti

mi è capitata una cosa che non mi riesco a spiegare: per un progettino sto scrivendo una libreria di I/O a livello di bit in C, di cui una funzione è una specie di wrapper per la open (2):

BITIO*
bit_open (const char* file, int flags)

dove BITIO è una tipo opaco usato dalla mia libreria. all'interno della funzione chiamo direttamente la open:

<...>
if((fp->fd = open (file, flags)) == -1)
<...>

per poter contemplare il caso in cui il file da aprire non esista e si debba passare alla mia bit_open anche il parametro per indicare i permessi da dare al file creato, pensavo di usare un parametro default in questo modo:

BITIO*
bit_open (const char* file, int flags, mode_t mode=DEFAULT_MODE)

con DEFAULT_MODE impostato come più mi piace, es S_IRWXU. purtoppo il secondo modo non compila, con il seguente errore:

bitio.c:42: error: syntax error before '=' token

porquoi? :conf:

 :ciauz:
Registrato

Utente Debian SID Registered Linux User #372086 This post has Super Cow Powers
le0n
Hero Member
*****

Karma: +1/-0
Scollegato Scollegato

Messaggi: 517


Mostra profilo E-mail
« Risposta #1 inserita:: Ottobre 14, 2005, 04:00:43 pm »

Citazione

skuro ha scritto:
BITIO*
bit_open (const char* file, int flags, mode_t mode=DEFAULT_MODE)

con DEFAULT_MODE impostato come più mi piace, es S_IRWXU. purtoppo il secondo modo non compila, con il seguente errore:

bitio.c:42: error: syntax error before '=' token

porquoi?

hai provato ad usare il parametro in questo modo
Codice:
BITIO*
bit_open (const char* file, int flags, mode_t DEFAULT_MODE)

senza l'assegnazione??

nella dichiarazione di una funzione non ho mai usato un'assegnazione...

in C non dovresti fare una cose del genere
Codice:
BITIO* bit_open (const char* file, int flags, mode_t mode)
...
bit_open (<*file>, , S_IRWXU)

in cui la prima è la dichiarazione e la seconda è la chiamata di funzione dove passi direttamente l'argomento S_IRWXU...

invece di mettere sempre S_IRWXU come parametro passato in ogni chiamata puoi usare una costante (DEFAULT_MODE) con un'assegnazione ad inizio codice, ma non in una funzione...
Codice:
#define DEFAULT_MODE S_IRWXU
...
bit_open (<*file>, , DEFAULT_MODE)

con il #define dopo gli include e tutto dovrebbe andare bene  ;-)

Hasta!
Registrato

Coltiva linux tanto windows si pianta da solo
Nessun sistema è sicuro se c'è un idiota a gestirlo!
La mia Debian sul portatile HP Pavilion dv6270EU
skuro
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 75


Mostra profilo E-mail
« Risposta #2 inserita:: Ottobre 14, 2005, 04:27:10 pm »

i parametri di default per le funzioni (ovvero le assegnazioni nella lista degli argomneti formali) le ho studiate col C++, ma suppogo (anzi, spero) che valgano anche per il C...

ho anche provato con un overloading di funzioni

BITIO*
bit_open (file, flag)
{
return bit_open (file, flag, DEFAULT_MODE)
}

BITIO*
bit_open (file, flag, mode)


ma non mi compila ugualmente. attualmente sono in facoltà e non ho accesso ai messaggi di errore precisi, vi faro sapere

grazie ancora

bye  :ciauz:
Registrato

Utente Debian SID Registered Linux User #372086 This post has Super Cow Powers
hitfil82
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 21


Mostra profilo E-mail
« Risposta #3 inserita:: Ottobre 27, 2005, 07:49:18 pm »

per quello che ne so io in C non puoi fare come in C++ in questo modo

Codice:
int func(int a,char b='h');


ad esempio.

ti conviene crearti una macro come ti è stato già suggerito...
se è quello che vuoi(la macro non la cambi più)...
oppure metti come argomento un puntatore a funzione...la funzione dovrebbe farti passare il mode_t desiderato..

Codice:
BITIO*
bit_open (const char* file, int flags, mode_t (function*)(arg1,arg2));

spero di non averle sparate :-D

in c non valgono le stesse cose che valgono per il c++,infatti conpila con gcc e non con g++.
 :ciauz:
Registrato

Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Altri Topic Correlati
Oggetto Aperta da Risposte Visite Ultimo messaggio
sessione default Generale vitto 5 297 Ultimo messaggio Settembre 09, 2005, 09:00:34 pm
da keltik
Cambiare file manager di default in xfce. Generale Belzebu 1 193 Ultimo messaggio Gennaio 22, 2006, 06:22:32 pm
da tindal
vlc di default su iceweasel Multimedia peppe_rm 9 899 Ultimo messaggio Novembre 01, 2007, 06:35:46 pm
da Stinko
route del default Network mlibero 6 311 Ultimo messaggio Marzo 05, 2008, 12:56:02 am
da thtieig
Powered by MySQL Powered by PHP Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 valido! CSS valido!
Pagina creata in 0.075 secondi con 19 interrogazioni al database.