mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: spostare file

Ciao a tutti, ho un problema,
uso il compilatore Turbo C della borland e non riesco a
spostare i file da una cartella all'altra..
es:
char temp[200];
strcpy(temp,"move ");
strcat(temp,"c:\\a.txt");
strcat(temp," c:\\document\\");
if(system(temp))
   printf("file non spostato");
Qualcuno sa come spostare il file in un'altra maniera?
grazie duido
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Qualcuno sa come spostare il file in un'altra maniera?
Se vuoi  fare una cosa  portabile al  100% ma della  prestazioni dubbie,
potresti  aprire  il file,  copiarlo  nella  nuova locazione,  eliminare
quello vecchio (fopen, fread/fwrite, remove). Il tuo metodo e`
sicuramente il piu` veloce.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Il coraggio non mi manca.
E` la paura che mi frega...

 Qualcuno sa come spostare il file in un'altra maniera?
c'e' questa possibilita', usa la funzione
int rename(const char *oldname, const char *newname);
dall'help del BorlandC5.0:
"rename changes the name of a file from oldname to newname. If a drive
specifier is given in newname, the specifier must be the same as that given
in oldname.
Directories in oldname and newname need not be the same, so rename can be
used to move a file from one directory to another. Wildcards are not
allowed."
ciao
donCiccio

 donCiccio
Avevo già provato il metodo rename() e devo dire che quando lasciavo la
prima cartella sorgente non
dava nessun problema, ma appena la cambiavo non me li spostava
più...questo non lo capisco proprio...
ho molte cartelle da definire e non posso certo aspettare di sperare
nella buona stella del rename().
Farò come mi ha consigliato il compagno del post precedente, è l'unica
soluzione che trovo velocemente.
ciao duido


 più...questo non lo capisco proprio...
detta cosi' non l'ho capita nemmeno io.
un ultimo consiglio:
se il tuo e' un programma DOS che gira in un FileSystem Windows9x devi solo
scrivere il nome lunghi
dei file e delle directory nel modo giusto per il DOS.
nel tuo primo post scrivevi "c:\\document\\"
non e' che per caso il nome reale e' "documenti", allora in DOS diventa
*forse* "docume~1"...
ciao
donCiccio

Grazie per l'interessamento, fa molto piacere che l'argomento sia di tuo
gradimento.
comunque non ho commesso errori di lunghezza nome,
qualsiasi nome o percorso con nomi concateneti lo passo alla funzione
verifica() che mi
permette la correzione di questo tipo...inoltre stampo il nome prima di
ogni movimento per accertarmi dell'esattezza.
Non contento ho cercato di esaminare la cosa + a fondo e ho scoperto con
la funzione perror("rename")
che il numero dell'errore dos è il 5, vale a dire per me...permetion
denied o qualcosa del genere, non sono forte in inglese...
Ho visto che la variabile del numero 5 corrisponde a "_doserrno" e
"errno" e nemmeno azzerando quest'ultime riesco a far funzionare questa
stupenda funzione rename()
peccato...mi sa che dovrò copiarle come un copione...
grazie comunque donCiccio
bye duido

Newsgroup: it.comp.lang.c
Titolo: Calcolare n° giorni tra due date

Salvea tutti, mi sapete dire se in C esiste una funzione per calcolare
quanti  giorni ci sono tra due date?
Grazie a tutti
Ciao

[...]
... ti ringrazio!
Saluti

Newsgroup: it.comp.lang.c
Titolo: il mio problema è questo:

utilizzo la funzione getch() per leggere un carattere dallo stdin, letto il
carattere chiamo una funzione che a sua volta ha bisogno di fare un'altra
lettura dallo stdin che sia diversa da quella precedente, il problema è che
mi trovo il valore precedentemente digitato.
Questo mi fa capire che forse bisognerebbe pulire il buffer della tastiera.
Domanda:
Il problema è questo? se è questo:
Come faccio? esiste qualche funzione? oppure devo fare necessariamente una
chiamata a funzione int21 per  pulire il buffer della tastiera?
Premetto che il problema potrei risolverlo utilizzando la getchar() ma io
voglio utilizzare la fuzione getch()
Ringrazio anticipatamente


Puo' provare a fare la chiamata alla funzione fflush
in questo modo:
fflush(stdin)
in questo modo viene svuotato il buffer di input della tastiera
(sui quasi tutti i sistemi UNIX ho notato che la cosa funziona,
penso che funzioni anche in DOS o Windows) .
Ciao.
Fab.
Sent via Deja.com
http://www.deja.com/

 fflush(stdin)
"Comportamento non definito", dice lo standard...
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

infatti, ho provato ad usare la function fflush(stdin), ma ho sempre lo
stesso problema.


Newsgroup: it.comp.lang.c
Titolo: cerco il compilatore watcom C/C++ v. 11.0

Mi serve urgentemente il compilatore in oggetto, se qualcuno ce l'ha, mi
può contattare al mio indirizzo e-mail.
--------------------------------
Inviato via 
http://usenet.iol.it



www.openwatcom.org
 ...... se e quando watcom decidederà di rilasciare
il suo compilatore..... cosa alquanto dubbiosa....
ciao
cod
Newsgroup: it.comp.lang.c
Titolo: strcat() e multiarray

Il programma che listo di seguito fa tranquillamente il suo sporco lavoro, 
che a me basterebbe anche.
Volevo però fare qualcosa di più elegante usando strcat(),  (vedi le due 
righe commentate), anche per imparare a lavorare con le stringhe in C.
Però ci deve essere qualche problema nel passaggio dell'array bidimensionale 
visto che mi da "syntax error before token [".
Quello che vorrei ottenere, nella sostanza, è che negli array d0,r1,r2 e r3 
fosse contenuta l'intera stringa invece di doverla comporre alla fine in 
stdout con printf.
P.S. certo che lavorare con le stringhe in C fa rimpiangere persino il 
Fortran.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
  int i,j;
  char *d0[10][80], *r1[10][80], *r2[10][80], *r3[10][80], buffer[33];
  for (i=1; i<=10; i++)
  {
    j=i-1;
    itoa(i,buffer,10);
//    strcat(d0[j][[0],"domanda n.");
//    strcat(d0[j][[0],&buffer[0]);
    d0[j][0]="Domanda n.";
    r1[j][0]="Risposta 1 alla domanda n.";
    r2[j][0]="Risposta 2 alla domanda n.";
    r3[j][0]="Risposta 3 alla domanda n.";
    printf("%s %s\n",d0[j][0],&buffer[0]);
    printf("%s %s\n",r1[j][0],&buffer[0]);
    printf("%s %s\n",r2[j][0],&buffer[0]);
    printf("%s %s\n",r3[j][0],&buffer[0]);
  }
  system("PAUSE");
  return 0;
.. 

 
ci sono 2 parentesi quadre aperte consecutive

 ci sono 2 parentesi quadre aperte consecutive
Grazie! Chiedo scusa per la banalità.
Non era mia intenzione farvi perdere tempo in sciocchezze.
Il problema cmq permane perché anche corretto lo stupido errore poi mi dà 
errore a runtime, senza però segnalarmi cosa.
Ora riesumo una macchina Linux e compilo con quella,  dove se non altro ho 
molti più log da andare a spulciare per vedere di capire cosa succede.
Penso cmq che la difficoltà risieda nel passaggio come parametri di array 
multidimensionali.
..

 molti più log da andare a spulciare per vedere di capire cosa succede.
[...]
NB: dovrai rinunciare a "system("PAUSE");" su Linux.
-- 
Non puoi insegnare qualcosa ad un uomo. You cannot teach a man anything.
Lo puoi solo aiutare   --  Galileo  Galilei  --   You can only help him
a scoprirla dentro di sé.                        discover it in himself.
Vincenzo Mercuri

 NB: dovrai rinunciare a "system("PAUSE");" su Linux.
Non necessariamente, penso si possa realizzare facilmente uno script che lo 
emuli e chiamarlo PAUSE.
#read -p "Press any key to continue"
Così a occhio dovrebbe fare lo stesso lavoro di PAUSE.
.. 

 Cosě a occhio dovrebbe fare lo stesso lavoro di PAUSE.
No, a occhio no.



Tanto perché ero curioso ho provato un po'...
#!/bin/bash
read -p "Press any key to continue . . ." -n 1 -s
echo
echo
:-)
Ciao!


Quindi, avevo ragione no? ;-)
e gli basta solo "PAUSE"?
(PS: non sono sicuro che system("PAUSE") a lui serva davvero, spesso
si usa sotto windows per il piccolo difetto che ha il terminale di
chiudersi a programma terminato, cosa che su Linux non succede, ma vabè...)

Newsgroup: it.comp.lang.c
Titolo: aiuto con il djgpp

chi mi sa spiegare con un esempio le fasi da la compilazione al lincaggio di
un sorgente?
Ovviamente sono alle primissime armi.



utilizza il comando unico :
gcc -Wall -pedantic -ansi sorgente.c -o compilato.exe

Newsgroup: it.comp.lang.c
Titolo: Conversione da Pascal a C

Salve a tutto il NG.
Avrei il seguente problema che non riesco a risolvere:
in Pascal ho ad esempio tra le costanti
Const
operazioni: set of char = ['+','-','*','/','^']; ad esempio
e poi nel resto del programma se voglio controllare che una variabile
contenga uno di quei valori faccio
operazione:='+';
if (operazione in operazioni) fai questo oppure fai quest'altro......
come si fa questo in C
esiste qualcosa di simile?
Si fa per caso con enum?
In attesa di una vostra risposta colgo l'occasione per salutarvi
cordialmente...
euterpex

 Si fa per caso con enum?
   E` una possibilita`, anche se risolve il tuo problema solo per via 
simbolica. Definendo un'enumerazione ed una variabile intera come segue:
	enum operazioni {
		OP_ADD,
		OP_MUL,
		OP_SUB,
		OP_DIV
	};
	int operazione;
puoi emulare il comportamento dell'idioma Pascal
	If (Operazione in Operazioni)
con
	if((operazione>=OP_ADD)&&(operazione<=OP_DIV))
   Altrimenti, puoi implementare tu la struttura dati /set/ o 
utilizzarne qualcuna gia` disponibile in libreria (immagino ne esistano 
svariate).
--
Alla prossima,
Marco


Puoi risolvere con uno switch:
definite le funzioni somma,sottrai, dividi etc, definisci
char ; dai un valore ad op e poi:
switch ( op )    {
    case   '+':  somma(x,y);     break;
    case   '-':   sottrai(x,y);     break;
    case   '/':   dividi(x,y);     break;
    case   :   /* altri casi */
default: /* funzione da eseguire se `op` non appare nello switch */
}
HTH

 ha scritto nel messaggio
news:3B56B5D2...@bar.va...


 esempio?
<code>
	/*
	 * set.c -- implements a (very) simple pascal /set/ in c
	 */
	#include <stdlib.h>
	#include <string.h>
	typedef struct t_set {
		size_t s_size;
		int *s_vals;
	} set;
	set *set_create(size_t size,int *values)
	{
		set *my_set;
		if((my_set=malloc(sizeof(set)))==NULL)
			return NULL;
		if((set->s_vals=malloc(size*sizeof(int)))==NULL) {
			free(my_set);
			return NULL;
		}
		memcpy(set->s_vals,values,size*sizeof(int));
		return my_set;
	}
	void set_delete(set *my_set)
	{
		free(my_set->s_vals);
		free(my_set);
	}
	int set_in(set *my_set,int what)
	{
		int retval=0;
		int counter=0;
		while((counter<my_set->s_size)||(!retval))
			retval=my_set->s_vals[counter]==what;
		return retval;
	}
 
</code>
--
Alla prossima,
Marco
Newsgroup: it.comp.lang.c
Titolo: Struct e procedura

Credo sia un problema di puntatori..cmq...ho creato un tipo con la funzione
struct, e poi vado ad immettere i valori di una variabile del tipo creato
con una procedura....questi però non vengono immagazzinati..credo, appunto,
perchè dovrei passare dei puntatori e non dei valori...però non riesco
proprio a sistemarlo...se qualche anima pia può darmi una dritta....
#include "mio.h"
void leggi(persona uffa)
{
printf("****IMMISSIONE DATI****\n\n");
printf("Nome: ");
scanf ("%s", uffa.nome);
printf("\nCognome: ");
scanf ("%s", uffa.cognome);
printf("\nEta': ");
scanf ("%d", &uffa.eta);
printf("\nVia: ");
scanf ("%s", uffa.via);
printf("\nCitta': ");
scanf ("%s", uffa.citta);
printf("\nTelefono: ");
scanf ("%s", uffa.telefono);
}
#include "mio.h"
main()
{
int menu;
persona p;
presentazione();                 /**lancio la presentazione **/
system( "cls" );
printf("****EFFETTUARE UNA SCELTA****\n\n1- Inserimento nuovo nominativo\n2-
Ricerca nominativo\n3- Esci dal programma\n\nScelta: ");
scanf ("%d",&menu);
switch (menu)                    /** valuto le differenti scelte con uno
switch **/
{
case 1:  system( "cls" );        /** faccio inserire i valori **/
         leggi(p);
         stampa(p);
        break;
case 2:  ;
         break;
case 3: exit(0);
}
}
file mio.h:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct { char nome[20];
                 char cognome[40];
                 int eta;
                 char via[60];
                 char citta[30];
                 char telefono[15];
                 } persona;
void leggi(persona uffa);
void presentazione();
void stampa(persona uffa);
Grazie a tutti
--
Fabio
-----------------
http://www.atheist.too.it
-----------------

 proprio a sistemarlo...se qualche anima pia può darmi una dritta....
prova con:
void leggi(persona *uffa)
e poi:
uffa->nome
uffa->cognome
ecc.
Ciao.
Stefano.

 uffa->cognome
Ecco, mi mancava questo.....sapresti mica dirmi due righe a riguardo? o
meglio: serve solo per puntare una variabile o un vettore di variabili di un
tipo struct?
Thx a lot

Newsgroup: it.comp.lang.c
Titolo: Flag sullo standard C da passare al compilatore per evitare codici poco portabili

Ciao a tutti, dato che i moderni compilatori e librerie C sotto win e 
Linux implementano già lo standard C99 (che tra l'altro è quello che 
spesso si studia sui nuovi libri), è ancora consigliabile usare il flag 
"-ansi" (o uno equivalente che imposta lo standard ansi C) se si 
scrivono sorgenti da compilare sotto versioni moderne di win o linux o 
conviene piuttosto usare il flag che imposta lo standard C99?
Intendo: ci sono validi motivi che portano a rimanere aderenti all'ansi 
C anzichè al più moderno standard del C99?
	ciao e grazie, rz
-- 
http://mrzac.altervista.org

 anzichč al piů moderno standard del C99?
Si`, ci sono. Per prima cosa non e` vero che il C99 e` completamente
implementato. Il GCC, per esempio, non lo implementa del tutto nemmeno
nell'ultima versione 4. Non oso immaginare cosa faccia il Visual C++ dato
che Microsoft ha la tendenza ad "inventarsi" i propri standard.
Il C99 offre vari livelli di conformita`, ma non so se il livello che
prevede tutto lo standard sia implementato da qualche compilatore. Per
cose piu` specifiche mi affido ai tatuaggi di Andrea LaForgia ;)
Seconda cosa. Il mondo non si ferma a Linux e Windows. Su architetture
particolari e magari proprietarie, potrebbe essere estremamente difficile
trovare un compilatore compatibile con il C99, mentre e` praticamente
certo trovarne uno ANSI.
Terza cosa. Compatibilita` con il passato. Un particolare software
potrebbe dover essere compilabile su un'infinita` di UNIX del passato
antecedenti all'arrivo del C99. Figurati che ci sono programmi che
usano ancora la sintassi K&R per compatibilita` (uno tra tanti, BRL-CAD,
che --credo-- giri su tutti gli UNIX mai esistiti!).
In conclusione, se hai la garanzia di usare un compilatore recente
e diffuso, allora vai col C99. Altrimenti, ben venga il caro vecchio
ANSI.
Saluti,
Marco
PS. Non ho alcuna pretesa di precisione/completezza in questo post.
-- 
To email me, remove the no_ and _spam from my address.

 C anzichè al più moderno standard del C99?
Sì, la più ampia compatibilità tra sistemi e portabilità.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/
Newsgroup: it.comp.lang.c
Titolo: Daemon a dormire...

Ciao,
Sto scrivendo un daemon in ambiente Linux che in pratica deve eseguire un 
certo compito a ore stabilite leggibili da un elenco (che non dura piu' di 
alcuni secondi) e non fare nient'altro durante il resto del tempo (e 
ovviamente non mangiarsi tutte le risorse del PC!)
Se faccio un ciclo (while) che controlla l'ora attuale con quella letta 
dalla lista ho paura che si puppi tutte le risorse.
C'e' un modo diverso per lasciarlo in 'sleep' senza occupare risorse del PC?
AL

 ha scritto nel messaggio
news:jivE9.74544$Yw.34...@news2.tin.it...

fai una sleep del tempo che manca alla prossima attivazione se l'elenco non
cambia nel frattempo.
la sleep provoca la deschedulazione del processo fino all'arrivo del
messaggio del clock => non usi processore.
una cosa el tipo:
....
while(12345678==12345678) //true
{
    /*
     fai quello che devi fare
    */
    durata_sleep_in_sec = tempo_prox_attivazione_in_sec -
tempo_attuale_in_sec;
    sleep( durata-sleep );
}
....
buon lavoro,
Nids

C'e' un modo diverso per lasciarlo in 'sleep' senza occupare risorse del PC?
Esiste la funzione POSIX sleep(numero_secondi) che serve a
dormire un po' di tempo senza occupare troppe risorse.
Nota che la durata della dormita puo' essere diversa (inferiore
o superiore) a quella richiesta per via di signal (anticipo)
oppure del fatto che il sistema era occupato (ritardo).
Se le pause sono molto lunghe pero' forse conviene usare un altro
approccio e schedulare le esecuzioni in cron (che e' un processo
di sistema che si occupa di seguire le attivita' periodiche).
HTH
Andrea

Andrea Griffini wrote:

Diciamo che le pause possono essere dell'ordine di decine di minuti/ore. Il 
problema di metterlo nel cron e' che le pause non sono regolari e vengono 
ricalcolate di giorno in giorno (devo fare tracking di satelliti).
Alberto

 di satelliti).
senza segnali, direi due processi:
uno, l'applicativo vero e proprio.
l'altro gestisce i calcoli (schedulatore).
eseguendo lo schedulatore, questo inserisce nel cron l'orario 
dell'applicativo: cancella la vecchia, ricalcola, mette nel cron
inoltre, un minuto dopo l'orario dell'applicativo, inserisce un nuovo 
ciclo di calcolo. Questo IMHO e' meglio di calcolare una volta al 
giorno: evita casini se l'orario schedulato del calcolo coincide con uno 
di ricezione
occhio: ti conviene usare o un ricevitore di sincronia come quelli delle 
sveglie e degli orologi, o usare il protocollo NTP per mantenere 
l'orologio del PC aggiornato.
Newsgroup: it.comp.lang.c
Titolo: #define

Se scrivo:
#define kCifre = "0123456789"
kCifre cos'è? Una const char*?
Come faccio a usare quel kCifre con strstr()?
Thx a tutti in anticipo!

 kCifre cos'è?
un simbolo.

 Come faccio a usare quel kCifre con strstr()?
Esattamente come useresti il valore letterale.
Andrea
p.s.: a meno che non ti chiami "anotnio", il tuo indirizzo e-mail è errato
;-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 un simbolo.
No, non lo è, è solo un "alias" per un valore letterale.


 ;-)
No no no :) Ti giuro che mi chiamo ANTONIO, sicuramente è sbagliato 
l'indirizzo e-mail :)

 Togliendo l'uguale funziona :)
Per forza!
Se scrivi
#define kCifre = "0123456789"
dentro la "definizione" di kCifre ci va a finire anche =
e poi se scrivi qualcosa del tipo
x = strstr(s, kCifre);
per il compilatore e' come se tu scrivessi:
x = strstr(s, = "0123456789");
e quindi si lamenta.
ciao,
g.

 e quindi si lamenta.
E' proprio per questo motivo che bisognerebbe evitare le define come la
peste.
Gli eventuali errori causati da una definizione sbagliata possono essere
veramente difficili da trovare.  E' meglio usare le "const".


E io posso usare una const fuori da una funzione?
Cioč posso scrivere cose tipo:
const char *kCifre = "0123456789"
int main()
{
   ...
   return 0;
}
?
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello...
(A. Celentano)
Per rispondermi in privato, togli prima l'immondizia dalla testa ;)

 Cioč posso scrivere cose tipo:
<snip>
Sě (provare non costa nulla).
Studia un buon manuale del linguaggio.


> Studia un buon manuale del linguaggio.
Uffffffff fino a qk anno fa sapevo fare un bel po' di cose, ora nn 
ricordo molto...
Dovrň rispolverare un po' di cose :\
Purtroppo x questioni di lavoro uso sempre VB...


Newsgroup: it.comp.lang.c
Titolo: prova

it.test
Per cortesia.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it
"Meglio cieco che negro" (Stevie Wonder)

Newsgroup: it.comp.lang.c
Titolo: Apertura file

Sto sviluppando un'applicazione che, tra le tante cose, deve aprire un 
file scelto da un utente. Il problema e':
fopen(nome_file,"r")
se nome_file contiene il nome del file (tipo prova.txt) tutto funziona, 
ma se contiene il nome + path (/home/paolo/prova.txt) allora non riesce 
ad aprirlo, ritornando errore.
Come posso risolvere il problema?
Grazie.

 ad aprirlo, ritornando errore.
Magari se dicessi che errore restituisce...
Sei sicuro che il path esista ? o che tu abbia i permessi ?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

paolo ha scritto:

Scoprendo perché non lo apre... Per ottenere l'informazione, usi errno e
strerror:
    errno = 0;
    f = fopen(nome_file, "r");
    if (f == NULL)
    {
       fprintf(stderr, "Errore! Codice %d, messggio <%s>\n",
               errno, strerror(errno));
    }
--
Cingar


 
Ora provo a usare errno per vedere che tipo di errore mi restituisce, 
comunque il file esiste e ho i giusti permessi.
Grazie
Newsgroup: it.comp.lang.c
Titolo: Quesito Lista, ricorsiva

Salve a tutti
questa e' una funzione ricorsiva che prende un intero sotto forma di lista
(ogni nodo e' una cifra) e lo ricompone in intero "vero" (la cifra in testa
alla lista e' quella meno significativa)
int lint_to_int(NODOPTR lint)
{
if (lint == NULL) /* lista vuota: ritorna 0 */
return 0;
else /* somma cifra di testa alla conversione della coda x10 */
return (lint->dato + lint_to_int(lint->next)*10);
}
Il problema e' che io non la capisco:
return (lint->dato + lint_to_int(lint->next)*10);
come fa a incrementare il *10 ogni volta? fino a diventare *100 *1000 per
ogni volta che lo stack viene riempito?
Forse sono un po stupido, comunque ogni aiuto e' gradito!

 ogni volta che lo stack viene riempito?
lint->dato + (lint->dato * 10) * 10
etc etc..

 escribió en el mensaje
news:l5AB8.17925$US3.4...@twister1.libero.it...

7238 = 8 + 3*10+2*100+7*1000
chiaro?
Toni

 Toni
si, come e' fatto un numero in base 10 era chiaro :)
Newsgroup: it.comp.lang.c
Titolo: umask: questo sconosciuto

Sto avendo un po' di difficoltà a capirne l'utilizzo.
Se setto umask(044) ed apro un file con i permessi 664 quale sarà il
risultato?
Se ho ben capito il calcolo è: 044 &~ 644. Cioè?
Grazie
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Se ho ben capito il calcolo è: 044 &~ 644. Cioè?
In fase di creazione il calcolo e'
644 & ~044 
Significa che nella open specifichi
rwx per il   proprietario
rw- per il   gruppo
rw- per gli  altri
e il file ti viene creato con i permessi
rwx per il   proprietario
--- per il   gruppo
--- per gli  altri
In ogni caso sei leggermente OT, ti suggerisco di spostarti su un NG
piu' appropriato, ad es it.comp.os.linux.development
HTH
C:\>iao Angelo


 rw- per gli  altri
I permessi di sopra sono errati
644 vale rw-r--r-- e non rwxrw-rw-


Newsgroup: it.comp.lang.c
Titolo: Consiglio su implementazione Clustering

Sono a pochi passi dalla soluzione definitiva del mio problema...mi
manca l'unica parte: devo raggruppare i risultati ottenuti. Mi spiego
meglio:
Ho una griglia (Praticamente una matrice 3D). In ogni cella è
memorizzato un valore che va da 0 a 9.
Devo raggruppare queste celle utilizzando il seguente algoritmo:
- Trovo una cella con il valore superiore a 7. Lo inserisco nel primo
gruppo.
- Controllo le celle vicine. Se hanno un valore superiore al 7 le
inserisco nel gruppo.
- Itero il passo precedente per tutte le celle inserite nel gruppo al
passo precedente fino a quando nessun nuovo punto è stato inserito.
- Trovo un'altra cella con valore superiore a 7 e la inserisco nel
secondo gruppo...e ripeto come sopra
E così via finquando ho controllato tutti i punti.
Alla fine salvo solo i gruppi con un certo numero di elementi.
Mi potete dare qualche consiglio sull'implementazione? Nei metodi che
ho io in mente alcuni punti sono controllati più volte...
Grazie mille


wrote:
Io ho pensato a questa soluzione, vediamo che mi dite:
int[][][] griglia1; //  Ho i dati memorizzati. Ogni cella ha un valore
da 0 a 9
int[][][] griglia2; // Griglia di supporto nella quale memorizzo a
quale gruppo appartiene la cella
int a=1; //indice dei gruppi
for i, j k {
if griglia1[i][j][k]>= CUTOFF&& griglia2[i][j][k]==0; {
check(i, j, k, a);
a++;
}
}
void check(i,j,k,a){
if griglia1[i][j][k]>= CUTOFF&& griglia2[i][j][k]==0;
{
griglia2[i][j][k]=a;
check(SU TUTTI I VICINI) //Ossia controllo gli 8 vicini
}
}
ho fatto alcune prove e sembra funzionare...il codice è molto
semplice...dovrebbe essere anche abbastanza veloce.
Se avete qualche idea è ben accetta.
Grazie

 int[][][] griglia1; //  Ho i dati memorizzati. Ogni cella ha un valore da 0 a 9
syntax error: il sorgente non e' linguaggio C.
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 Ciao
ok ok...tanto lo faccio con la malloc! era giusto per farmi capire!


 check(SU TUTTI I VICINI) //Ossia controllo gli 8 vicini
Questo metodo e' probabilmente il piu' efficente, ma l'occupazione dello 
STACK puo' diventare proporzionale al numero di celle nella griglia...
E.
Newsgroup: it.comp.lang.c
Titolo: [ot?] allocazione

Ciao, non capisco una cosa riguardo all'allocazione delle variabili 
automatiche sullo stack. Scusate se sono ot, ma mi sembrava il ng piu' 
adatto. Qui c'e' la funzione (linux, i386):
/******************/
void funz(char *txt)
{
     char buf[12];
     strcpy(buf,txt);  /*fatto apposta :-)*/
}
/*********************/
$gcc bof.c --static
$gdb a.out
(gdb)disassemble funz
Dump of assembler code for function funz:
0x08048214 <funz+0>:    push   %ebp       <<ok, salva frame pointer
0x08048215 <funz+1>:    mov    %esp,%ebp  <<ok, aggiorna frame pointer
0x08048217 <funz+3>:    sub    $0x28,%esp <<???
Questa istruzione riserva 40 byte per le variabili locali spostando lo 
stack pointer. La cosa strana pero' e' che ho solo 12 byte di variabili 
locali. Gli altri 28 a cosa servono? Nel codice seguente magari si 
capisce, ve lo posto cosi' magari mi potete aiutare?
0x0804821a <funz+6>:    mov    0x8(%ebp),%eax
0x0804821d <funz+9>:    mov    %eax,0x4(%esp)
	secondo argomento in seconda pos sullo stack
0x08048221 <funz+13>:   lea    0xffffffe8(%ebp),%eax
	cosa c'e' li? (in mezzo allo stack)
0x08048224 <funz+16>:   mov    %eax,(%esp)
0x08048227 <funz+19>:   call   0x804de00 <strcpy>
	mette quella cosa in cima allo stack e chiama strcpy
Da questo pezzo sembrerebbe che strcpy voglia i 2 argomenti in cima allo 
stack (niente di strano) ma non capisco perche' li va a prendere in 
posti assurdi quando il primo e' 0xfffffffc(%ebp) e il secondo 
0x8(%ebp). Qui pero' vado troppo sull'ot... Comunque grazie anche solo 
per aver letto :-)
0x0804822c <funz+24>:   leave
0x0804822d <funz+25>:   ret
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 
Sembrerebbe che gcc voglia allineare lo stack ai 16 byte. Ho quasi 
risolto compilando con -mpreferred-stack-boundary=2 cosi' spreco solo 1 
byte. Il thread originale e' su gnu.gcc.help

Newsgroup: it.comp.lang.c
Titolo: Il fattoriale

(4 bytes, parlo degli int del C... in Pascal sono addirittura 2 bytes!!) :-)
Scusate l'OT, ma se vogliamo essere precisi ( e poi devi specificare il
compilatore :) ) le dimensioni degli interi del C sono :
sizeof ( char )  =  1        
sizeof ( short ) =  2        
sizeof ( int )   =  4        
sizeof ( long )  =  4
:)
Si' ma comunque e' una caxxata, tanto la routine di Fabio gira piu' velocemente
....
Skyscraper
---------------------------
andrea_...@bigfoot.com
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

 sizeof ( long )  =  4
Non credo.  Io ad esempio ho programmato su una piattaforma (un DSP)
su cui char, short, int e long sono tutti di 32 bits.
Cominciamo: sizeof(char) = 1 per definizione.  Poi, sizeof(char) <=
sizeof(short) <= sizeof(int) <= sizeof(long).  E, per finire, un char
e' garantito di _almeno_ 8 bits, uno short di _almeno_ 16 bits ed un
long di _almeno 32_.  Il resto e' implementation dependent.
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

 sizeof ( long )  =  4
Questo sarą vero sul compilatore che hai utilizzato per fare la prova ma
lo standard non parla (e come potrebbe) di dimensioni fisiche dei tipi.
Queste cambiano a seconda della macchina e del compilatore.
EMG

 long di _almeno 32_.  Il resto e' implementation dependent.
Potrebbero essere tutti da 8 bits senza andare fuori dallo standard.
EMG



Aridagli!  E' insopportabile continuare a gridare le cose nel deserto,
a chi non le vuol sentire e continua a rispondere con castronate.  Io
sto per citare riferimenti esatti a quello che affermo: se hai da
ridire, dammi anche tu capitolo e versetto dei sacri testi.
K&R2, pag. 18:  "long integers are at least 32 bits."
K&R2, pagina 36: "Each compiler is free to choose appropriate sizes
for its own hardware, subject only to the restriction that shorts and
ints are at least 16 bits, longs are at least 32 bits, and short is no
longer than int, which is no longer than long".
ANSI C Standard X3.159-1989 : capitoli 2.2.4.2.1 e 3.1.2.5 .
ISO C Standard 9899:1990 : capitoli 5.2.4.2.1 e 6.1.2.5 .
E non te lo ripeto piu'.


 E non te lo ripeto piu'.
Non ce n'è bisogno. Siamo qui per imparare, non per litigare.
EMG

long di _almeno 32_.  Il resto e' implementation dependent.
Be', ma questo lo sapevamo gia' ;) ...
Skyscraper (apprezzatelo adesso : eviterete la coda)
----------------------------------------------------
 
andrea_...@bigfoot.com
----------------------------------------------------


Non c'h alcun motivo per rispondere in questo modo.
Concordo !!!


Queste cambiano a seconda della macchina e del compilatore.
Si, si, siamo perfettamente d'accordo.
In realta' ho scritto che andava specificato il compilatore, ma intendevo il GCC
per DOS.


 Be', ma questo lo sapevamo gia' ;) ...
Ed allora perche' hai detto una cosa in contrasto con quanto sapevi?


Ed allora perche' hai detto una cosa in contrasto con quanto sapevi?
Mi meraviglio che tu non sappia che 1 <= 2 <= 4 <= 4 . 

Newsgroup: it.comp.lang.c
Titolo: acqusizione caratteri

salve,
devo acquisisre dei caratteri dallo standard input
contenenti spazi.
se uso scanf o fscanf mi rileva solo
la prima parte dello scritto,
se uso fgets non riesco a scrivere....
cosa faccio?
grazie
--
Denis



int c;
int i = 0;
while( (c = getchar()) != '\n')
{
	mia_stringa[i] = c;
	i++;
}
mia_stringa[i] = '\0';
Ciao
Matic

 mia_stringa[i] = '';
Dove e soprattuto COME e' allocata mia_stringa? Un controllino che non 
venga scritto niente oltre la memoria allocata per mia_stringa non credi
sia opportuno metterlo?
C:\>iao Angelo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 C:\>iao Angelo
Ciao
Matic

 parentisi graffe, ma ho creduto che potesse farlo da solo
fino a lě ci arrivo :)
grazie mille
--
Denis
WebMaster di 
http://www.casafiorita.it
Fai i tuoi regali in modo unico ed originale!

 mia_stringa[i] = '\0';
ma neanche cosě attende che
io scriva la stringa....
mah!!!


 mah!!!
forse dipende dal fatto che hai già letto una stringa magari con scanf e
arrivati a quel punto il primo carattere che viene fornito da getchar() è
un '\n' residuo della precedente chiamata a scanf
Matic

 un '\n' residuo della precedente chiamata a scanf
esatto...
per eliminarlo?


 Denis
Ciao
Matic
Newsgroup: it.comp.lang.c
Titolo: Grafica Semplice

Salve a tutti,
    Sono uno studente, che deve presentare
il progetto di Algoritmi e strutture dati,
la consegna e' a venerdi, il progetto e'
ultimato, (compilato con djgpp)
manca la grafica, e qui viene il bello :
Le librerie grafiche, non mancano per il
djgpp, ma o non mi funzionano, o non
trovo (tipo per grx20) degli esempi semplici
che mi facciano capire come funziona!.
Il problema e' questo, devo:
inizializzare modalita' grafica (qualsiasi,
ma se fosse possibile una 640x480),
devo avere una funzione che mi permette
di tracciare delle linee, magari di due colori
diversi, chiudere la modalita grafica.
Questo e' tutto quello che devo fare, se qualche
anima pia, mi volesse dare una mano
(un pezzo di codice, un esempietto per una
libreria che faccia quello di cui sopra, una
libreria semplice, semplice magari fatta da voi,
qualsiasi cosa) glie ne sarei grato a vita
(si intende il tutto per il djgpp)
Grazie mille in anticipo
                                                        Gabriele

Studi a Milano?
Prof. Goldwurm?
:-)))))
--
Zio Patata®
ICQ# 25304214
"Solo i colti amano imparare,
gli ignoranti preferiscono insegnare"

Aggiungo: che soluzione hai trovato per il progetto?
Io...albero binario di ricerca...che ne pensi?
Se leggi presto questo mex mi fai un fischio?
GRAZIE!
Claudio
nor...@tin.it


 Prof. Goldwurm?
Potrebbe essere anche Torelli-Alberti... e visti i problemi con la
grafica, direi proprio Alberti ;-)
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it

  Ciao, Luca.
Alberti no, il progetto per la prof.ssa Alberti andava consegnato lunedě e
lui parla di consegna per venerdě.
Ciao,
giovann...@libero.it

Invece avevo indovinato...era il Gold!:-)

Newsgroup: it.comp.lang.c
Titolo: (OT) Parser.c

Ciao a tutta la lista,
ho necessità di implementare un parser per analizzare un file di config di 
un mio progetto.
La sintassi del file di config è simile a quella usata dai programmi unix, 
es:
[ nome_direttiva    valore_direttiva  #commenti. ]
prima di mettermi a scrivere il codice volevo sapere se esiste qualcosa di 
già implementato,
e se non esiste qual'è il metodo più efficace per costruire un 
"applicazione" del genere.
Mi rendo conto di essere OT,  ma spero che qualche anima pia perda un pò di 
tempo a
darmi delle dritte o a consigliarmi qualche ng adatto.
Grazie mille,  ciao.
Salvatore.

 un mio progetto.
così a bruciapelo mi vengono in mente flex e bison: generatori di lexer 
e parser.
ciao.

 "applicazione" del genere.
Il metodo piu' efficiente & piu' efficace e' usare flex e bison. Un
parser del genere si realizza in un paio di minuti se sai usare i
programmi citati: il vero problema e' imparare ad usare i programmi
citati.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 C:\>iao Angelo
Link ai pgm e a tuttorial?
(funziano su Win?)

 (funziano su Win?)
certo che si, ci sono sia nelle versioni per cygwin sia nativi grazie al 
progetto gnuwin32 ( 
http://gnuwin32.sourceforge.net/
 )
ciao.

 (funziano su Win?)
Ovvio :-)
http://sourceforge.net/projects/gnuwin32/
Qui dovrebbero esserci anche i manuali
HTH


Grazie a tutti per le dritte.
ciao ciao.
Salvatore. 

 citati.
Appunto. Se uno non ne sa niente, è una robetta da un mese di studio
intenso.
Mentre per realizzare a mano un parser per una sintassi banale come quella
descritta da Salvatore, anche il più imbranato dei programmatore non ci
mette più di un paio d'ore.
Inoltre, se Bison funziona come gli Yacc con cui ho avuto a che fare,
genererà qualche megabyte di codice C illeggibile, che s'appoggia su
strutture dati pesantissime: un overhead più che accettabile per uno che
deve implementare un compilatore, ma assolutamente ingiustificato per un
filettino di configurazione come quello descritto.
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 filettino di configurazione come quello descritto.
Se uno non conosce flex e bison ci mette un paio d'ore a fare quel
parser, ma se uno li conosce ci mette un paio di minuti.
La prossima volta che faro' un parser (di qualunque complessita') di
sicuro non lo faccio piu' scrivendo direttamente il codice "C". :-)


Newsgroup: it.comp.lang.c
Titolo: Cerco un compilatore da scaricare

Qualcuno saprebbe dirmi almeno un indirizzo di un sito dove si puņ scaricare
un compilatore C per windows???
Ringrazio anticipatamente

 Qualcuno saprebbe dirmi almeno un indirizzo di un sito dove si può

Newsgroup: it.comp.lang.c
Titolo: liste

scusate io dovrei caricare una lista con questa funzione ma al terzo
giro del while mi si pianta sulla riga che vi ho segnato
player  *carica_gioc(int *n_gioc)
{
    int numero;
    int i;
    char stringa[21];
    FILE *file_ptr;
    char *nome_file="giocatori.txt";
    int flag_nome;/*indicatore del tipo lettura file 1 nome giocatore 0
proprietà*/
    file_ptr=fopen(nome_file,"r");
    if(file_ptr!=NULL)
    {
        flag_nome=1;
        while(fscanf(file_ptr,"%s %d",stringa,&numero)!=EOF)
        {
            if(strchr(stringa,'#')!=0)
            {
                printf("aux->nome %s\n",aux->nome);
                printf("aux->capitale %d\n",aux->capitale);
                printf("aux->n_prop %d\n",aux->n_prop);
                for(i=0;i<aux->n_prop;i++)
printf("\t%s\n",aux->proprieta[i].nome_p);
                flag_nome=1;/*imposto il flag a 1 nuovo nome*/
                aux->next=testa;
                testa=aux; /*chiudo la lista corrente*/
                n_gioc ++; /*incremento numero giocatori*/
            }
            else
            {
                if(flag_nome==1)/*carico nome giocatore e capitale*/
                {
                    /**************************riga in cui si pianta
                    aux=(player *) malloc(sizeof(player));
                    ******************************************/
                    strcpy(aux->nome,stringa);
                    aux->capitale=numero;
                    aux->n_prop=0;
                    aux->proprieta=NULL;
                    flag_nome=0;
                }
                else
                {
                    /*carico le proprietà*/
                    aux->n_prop ++;
                    if(aux->proprieta==NULL) aux->proprieta=(prop *)
malloc(sizeof(prop));
                    else aux->proprieta=(prop *)
realloc(aux->proprieta,aux->n_prop);
strcpy(aux->proprieta[aux->n_prop-1].nome_p,stringa);
                    aux->proprieta[aux->n_prop-1].costo=numero;
                }
            }
            strcpy(stringa,"");
        }
        return testa;
    }
    else return 0;
}

Scusate le strutture suate nel programma sono le seguenti:
typedef struct proprieta {
        char nome_p[21];
        int costo;
        }prop ;
typedef struct giocatore {
        char nome[21];
        int capitale;
        prop *proprieta;/*vettore proprietà da inizializzare*/
        int casella;
        int n_prop;
        struct giocatore *next;
        } player;
player è una lista che include il puntatore a proprieta che poi alloco
come vettore dinamico;
Grazie


Newsgroup: it.comp.lang.c
Titolo: Consiglio libro

Ho visto in libreria il libro "Linguaggio C - guida alla programmazione" di
Guidi, Bellini. Che ne pensate? E' un buon libro per chi vuole iniziare?
grazie ciao!

 wrote in message
news:kCtU7.1808$db7.6...@twister2.libero.it...


Guidi, Bellini. Che ne pensate? E' un buon libro per chi vuole iniziare?
E' ottimo
--
:-P
PZ "I'm a slave for you" & "Overprotected"

 ha scritto nel messaggio
news:kCtU7.1808$db7.6...@twister2.libero.it...

Newsgroup: it.comp.lang.c
Titolo: infoC(Testo)

Ciao a tutti
sapendo che:
- l'unico linguaggio di programmazione che conosco è VB
- vorrei imparare C perché sono interessato alla comprensione dei S.O.
(sorgenti linux, algoritmi di gestione e schedulazione dei processi...) e
non, almeno al momento, a scrivere io dei programmi (ma anche se fosse
sempre orientati ai S.O.)
mi piacerebbe m'indicaste un paio di titoli di testi
universitari_introduttivi, preferibilmente scritti in lingua italiana, sul
linguaggio C.
Grazie
Saluti
    Roberto
P.S.
Ho un titolo in inglese ma non ho ancora cercato il libro perché trattenuto
dalla duplice difficoltà linguaggio C / lingua inglese:
Eric S. Roberts: The Art of C, Addison-Wesley, 1995.
Che ne pensate?
Let me know

Che ne pensate?
Mi spiace, non lo conosco.
(come il 90% dei libri scritti sul C ;))
Andrea Laforgia

 linguaggio C.
Un testo senz'altro piů che introduttivo(insegna ad usare il linguaggio 
con riferimenti anche alla parte ingegneristica della programmazione) č: 
C Manuale di programamzione di Peter.A.Darnell e Philip.E.Margolis edito 
da Mc Graw-Hill.
Uno universitario e introduttivo č:Guida al C di Alessandro Bellini e 
Andrea Guidi.
CiauZ!

Linguaggio C: senz'altro il Kernighan & Ritchie, per iniziare.
OS: in italiano mi sento di consigliarti il Tanenbaum "Moderni sistemi
operativi" (o giů di lě).
Note:
1- La teoria dei sistemi operativi č ovviamente indipendente da un
particolare linguaggio di programmazione, sicchč se ti interessano gli
algoritmi non č necessario conoscere il C.
2- se oltre alla teoria vuoi anche sporcarti le mani allora ti serve
l'inglese (tecnico), qualche anno di pratica col C, la lettura di un
certo numero di classici sui sistemi operativi (che sono tutti in
inglese), lo studio dei sorgenti, e molta passione. Forse per questo
parecchi fanno la teoria ma pochi la pratica.
Ciao e in bocca al lupo.

MINI_REPLICA:
- In effetti ho cominciato a studiare un testo sulla teoria dei s.o. che è
proprio "i moderni sistemi operativi" di tanenbaum ma devo ancora
concluderlo.
- Conosco andrea guidi per aver letto un suo testo su linux e non mi è
sembrato male.
- Altri titoli sui s.o. :
Williams Stalling, Operating Systems (2nd ed.), Prentice Hall, 1995
Silberschatz, Galvin, Sistemi Operativi (quarta ed.), Addison Wesley, 1995
ed anche integrativo Petterson, Hennessy, Computer Organization & Design:
The HW/SW Interface, Morgan Kaufmann 1994.
Anyway, penso che cercherò sia  "guida al c" di guidi-bellini che il
"Linguaggio C" Kernighan&Ritchie II versione
Vi ringrazio per l'attenzione prestatami.
Saluti
    Roberto

Newsgroup: it.comp.lang.c
Titolo: Problem

Salve a tutti, toglietemi una curiosità.... ma in C è possibile inserire un
carattere in una qualsiasi posizione dello schermo (come facevo con il
basic) ?
Grazie a tutti by Carlo

E' possibile...usando una appropriata libreria...!!!
Per Esempio sotto windows mi sembra che la "conio.h" fa al caso tuo
bye bye
Lucpie


>Per Esempio sotto windows mi sembra che la "conio.h" fa al caso tuo
e Ncurser sotto linux.
Oppure trovi dei porting per Unix di Conio (Uconio) e dei porting per
Windows di Ncurser (PdCurser).
Mox =)
Newsgroup: it.comp.lang.c
Titolo: Cancellazione di parte di un stringa?

Come č possibile 'muovere' una stringa?
ovvero togliere una parte di stringa da una var. e spostarla in un' altra?
Oppure č possibile copiare una parte di stringa situata fra due spazi all'
interno di una variabile?
Gabryc
gab...@ciaoweb.it
Ciao....

 interno di una variabile?
Come sopra. Magari aggiungendo la ricerca dello spazio.
EMG

 > Oppure è possibile copiare una parte di stringa situata fra due spazi


Newsgroup: it.comp.lang.c
Titolo: inserire codice c++ in codice c

Salve a tutti...il saluto è obbligo...
ho un problema, come posso fare a inserire del codice c++ in un
programma scritto completamente in c, facendo in maniera tale che il
prepocessore del c riconosca il codice c++?
Utilizzo Visual Studio 6 e mi hanno detto che il riconoscimento potrei
farlo fare anche attraverso il visual studio.
Qualcuno sa qualcosa in merito?
Grazie

posto anche l'errore.
midl : command line error MIDL1003 : error returned by the C
preprocessor (2)
Error executing midl.exe.
l'uscita dovrebbe essere chiaramente una .dll
malurc ha scritto:


 prepocessore del c riconosca il codice c++?
Per compilare automaticamente in cpp, devi rinominare il file .c in cui
usi il C++, in .cpp cosě Visual Studio capisce che quel file deve essere
compilato come C++

 compilato come C++

 l'uscita del project cioè la dll va in pasto ad un altro project in c.
Scusa, ma dovresti esporre un'pò meglio la situazione, iniziando a 
specificare che intendi per "l'uscita del project"

scusa hai ragione..volevo dire che dalla lib deve essere prodotta una
dll che poi deve essere usata dal codice c.
inizialmente avevo posto la lib tra quelle che il mio programma c deve
ricercare in compilazione però non mi succede niente.
allora ho detto: creo un progetto con il file.h più un paio di altri
file per le chiamate di errore metto la lib tra quelle che lui deve
cercare e la dll che esce la prendo e la uso con il mio programma ma
l'errore che ho è :
LINK : error LNK2001: unresolved external symbol __DllMainCRTStartup@12
../../bin/w32_deb/smr_lib.dll : fatal error LNK1120: 1 unresolved
externals
Error executing link.exe.
mah!
AlterX ha scritto:


risoltissimo dopo un lungo peregrinare......
malurc ha scritto:

Newsgroup: it.comp.lang.c
Titolo: volatile

buongiorno a tutti; nonostante il materiale che ho studiato non mi è
assolutamente chiaro cosa faccia le keyword volatile, ne' quando viene
usata in dichiarazioni locali o globali ne' quando usata per parametri di
funzioni; riesco solamente ad intuire che si tratta di un vero obbrobbrio
O_o
qualcuno potrebbe darmi gentilmente una spiegazione chiara e semplice di
cosa succede di preciso a una variabile se viene dichiarata con volatile?
e un parametro di funzione?
grazie a tutti
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 non e` piu` modificabile, se non dalla funzione stessa.
Lo standard dice questo?
Comunque alcuni compilatori permettono il passaggi dei parametri, o di
parte dei parametri nei registri, o di sostituire le chiamate delle
funzioni con il codice della funzione stessa. Per esempio il compilatore
della Microsoft. Su questo, se ne senti la necessità, puoi gestire
completamente tutti gli aspetti di una chiamata a funzione, ovviamente con
modalità non starndard. A quanti possa servire poi non lo so, credo a pochi
e in ambiti molto ristretti.

 e in ambiti molto ristretti.
Il passaggio dei parametri via registri o l'implementazione delle 
funzioni inline non cambia il fatto che una funzione riceve un parametro 
che valorizzato al momento della chiamata.
Il solo effetto che potrebbe avere dichiarare volatile un parametro e` 
quello di disabilitare le ottimizzazioni come se quella variabile fosse 
veramente volatile.
Quanto al passaggio dei parametri via registri e` uno standard per certi 
processori e l'uso delle funzioni inline e` stato introdotto nell'ultima 
versione degli standard del C.


 il valore passato al momento della chiamata.
Non ti scaldare. Volevo solo puntalizzare che nel mondo reale dei
compilatori C i parametri di una funzione non sono necessariamente messi
nello stack. Tutto qua. Tra l'altro non ho la minima idea di cosa dice lo
standard a riguardo.
Non ho parlato di parametri dichiarati volatile, e mi sfugge il senso della
cosa. Potrei capire un parametro dichiarato register, ma non valatile. Poi
non so nemmeno se è standard una simile dichiarazione.
Rileggengo il tuo post ho capito perché mi hai travisato. Facevo
riferimento solo ed esclusivamente alla seconda parte della tua risposta.
Ho sbagliato io a quotare, e quindi ne è risultato che la mia risposta è
stata un poco fuorviante. Di questo mi scuso.

 standard a riguardo.
Non ti preoccupare.  Tutto OK.   Io non sono stato corretto a scrivere 
che i parametri sono passati nello stack.  Mi e` capitato di lavorare in 
ambiente VAX/VMS, le macchine piu` recenti avevano 30 registri di lavoro 
e i parametri (fino ad un certo numero) venivano passati sempre nei 
registri.


ah adesso ho capito, ti ringrazio.


 Se il parametro e` un puntatore lo puo` essere l'oggetto puntato.
si, dev'essere cosě: la dichiarazione ha la forma:
<tipo> volatile <asterisco><identificatore>
quindi con volatile prima dell'asterisco; si riferisce al puntatore o alla
locazione puntata?
grazie, ciao.

Newsgroup: it.comp.lang.c
Titolo: creare una libreria

Ho provato a crere una libreria con la funzione fattoriale, ma quando
compilo un programma che usa la funzione mi dice: undefined referiment to
factorial.
Quesi sono i tre file che ho scritto, sarei molto grato a chiunque riuscisse
a spiegarmi il mio errore. Il mio indirizzo è 
red....@tiscalinet.it
Luca.
File: factorial.h
# ifndef _FATTORIALE_H
# define _FATTORIALE_H
int factorial(int x);
#endif
File: factorial.c
# include <stdio.h>
# include "factorial.h"
int factorial(int x){
if(x==0) return 1;
else return x*factorial(x-1);
}
File: fatt.c
# include <stdio.h>
# include "factorial.h"
int main()
{
 int a, b;
 printf("Inserire numero: ");
 scanf("%d",&a);
 b=factorial(a);
 printf("Ris=%d",b);
}

 ha scritto:

Devi prima compilare factorial.c e creare il file oggetto
(factorial.o) poi compili il file fatt.c linkandolo a factorial.o; se
usi gcc e' cosi' (se non ricordo male):
gcc -c factorial.c
gcc factorial.o fatt.c -o fatt.x
fatt.x sara' il file eseguibile.
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it