mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Ritorno negativo da clock()

Ciao,
compilatore Microsoft di Visual studio 2003
e un pc windows XP embedded
mi è successa una cosa strana :
con scrittura di un log di debug per la valutazione di un mancato controllo 
time out la funzione clock()
torna un numero negativo per un processo appena istanziato,
non mi era mai capitato in 15 anni di lavoro sapete se esiste un motivo?
Grazie
Luca


è possibile:
On success, clock returns the processor time elapsed since 
the beginning of the program invocation.
On error (if the processor time is not available or its 
value cannot be represented), clock returns -1.
ciao.

 ciao
si ok attenzionenon si tratta di ritorni con -1 ma di ritorni tipo
-1161373217
per molte  volte .....
devo controllare ogni singolo ritorno dalla clock() ?
Grazie.
:) 

 devo controllare ogni singolo ritorno dalla clock() ?
in questo caso può essere che il tipo di ritorno, clock_t, 
di clock() sia definito come intero segnato e che si sia 
verificato un overflow.
ciao.


Ciao,
si ma la funzione clock() che dovrebbe tornare il tempo dalla partenza
del programma e per mandare in overflow un clock_t che
viene definito long, nel compilatore microsoft di
Visual studio 2003, occorre un sacco di tempo e il programma
girava da 10 minuti.

 girava da 10 minuti.
mm... puoi postare il codice?
grazie, ciao.

 grazie, ciao.
//  Il tutto mi è successo una volta sola tieni presente che utilizzo
// questo metodo per altre cose e non mi è mai successo (anni).
// tieni presente che sono all'interno di una dll e dentro un thread.
clock_t StartTick = 0L ;
// -------------------------------------------------------
// Non capisco come mai ma torna un numero negativo!!!
// -------------------------------------------------------
StartTick = clock();
while ( 1 )
{
    // In questo punto faccio nu controllo su un evento per 100 millisecondi
    DWORD dwRet = WaitForSingleObject( hScaleVoidEvent, 100 );
    // --------------------------------------
    // Se e' stato segnalato l'evento di void
    // esce dall'attesa
    // --------------------------------------
    if ( dwRet == WAIT_OBJECT_0 )
    {
        OutputDebugString ( "ARRIVATO VOID\n" );
        return ( GET_MSG_VOID );
    }
    if ( ( clock() - StartTick ) > ( CLK_TCK * 5 ) )
    {
        // Dopo 5 secondi di attesa esco dall'attesa.
        // nel caso in questione esce subito perchè dopo la
        // prima funzione StartTick = clock(); che torna
        // un numero negativo (attenzione non -1 che sarebbe un errore
        // ma una cosa tipo -1161397962)
        // la clock seguente ritorna un numero positivo tipo 51.
        sprintf ( MessageDbg, "Timeout Start %ld clock %ld",
                    StartTick, clock() );
        return ( GET_MSG_VOID );
    }
}

 [...]
ho dato un'occhiata al codice e non mi sembra di cogliere 
"stranezze"... onestamente non ho idea di perché succeda. a 
parte appunto l'ipotesi dell'overflow già detta, che però a 
questo punto mi pare regga poco. :(
ciao.

 ciao.
non so che dire ma altre volte mi sono successe cose strane sui
pc dei clienti , spesso problemi del pc HD,ram,ecc.ecc.
Grazie
Luca
:)
Newsgroup: it.comp.lang.c
Titolo: Arrotondamenti e percentuali

Ciao ho una serie di dati che esprimono una percentuale di una misura
calcolati come float con la consueta fiormula (#misurato / # totale)*100.
Per arrotondare e stampare solo la parte intera ho fatto nel seguente modo:
printf("%3d", (int) (dato+0.5))
ma, nel gioco degli arrotondamenti, facendo alcune somme delle percentuali
alcune vengono 101%. Ora non č un problema grave, ma sapete suggerirmi un
modo per ottenere la somma esatta a 100 per ogni misura?
Ho gią provato anche con floor()....


a me sembra un problema abbastanza grave, nel senso che se
(int) (dato+0.5) ti stampa 101 vuol dire
che dato e' gia' di suo maggiore o uguale a 100.5 e quindi
c'e' comunque qualche magagna... poi sta a te valutare
se l'errore commesso e' insignificante.
Per la stampa ti puoi definire una funzioncina del tipo:
int perc(double x)
{
   int v;
   v = (int) (x + 0.5);
   if (v<100) return v; else return 100;
}
che banalmente ritorna 100 al massimo.
e poi
printf("%3d", perc(dato));
ciao,
g.

 
-- 
oggi no, domani sì


Newsgroups: free.it.programmazione.c,it.comp.lang.c
Sent: Thursday, May 06, 2004 3:09 PM
Subject: Re: Arrotondamenti e percentuali

Newsgroup: it.comp.lang.c
Titolo: Problema con output

Ho un problema con questo programma, che non mi visualizza nessun output a
parte quando commento le prime due righe del main:
#include <stdio.h>
#include <stdlib.h>
struct rotation{
 int istant;
 enum{
  RIGHT,
  LEFT
  }direction;
 int cellnum;
 struct rotation *next;
};
typedef struct rotation* Rotation;
int position = 0;
int main(){
 Rotation current;
 current = rotate(0,0);  //questa da problemi...ma nessun errore in
compilazione
 printf("%d",rand());
 system("PAUSE");
 return(0);
}
Rotation rotate(int istant, int cellnum){
 Rotation rot;
 rot->cellnum = cellnum;
 rot->istant = istant;
 rot->direction = LEFT;
 rot->next = NULL;
 rotate_rt(&position,cellnum);
 return rot;
}
void rotate_rt(int *position,int cells){
 *position = (*position + cells) % SRL;
}
come mai??

 rot->cellnum = cellnum;
   qui utilizzi un puntatore non inizializzato.
-- 
S.L.

    qui utilizzi un puntatore non inizializzato.
Quindi dove sta io mio problema??

>...
risolto, restituivo un puntatore ad una variabile locale alla funzione
rotate().

 rot->cellnum = cellnum;
   Ti ricordo che hai definito Rotation come "struct rotation *",
quindi la funzione restituiva un puntatore non inizializzato, dopo
averlo anche usato per scrivere su un'area qualsiasi della memoria.
-- 
S.L.

Newsgroup: it.comp.lang.c
Titolo: A che punto con le FAQ in italiano ?

Scusate ,vorrei sapere (è un pò che non leggo il NG) se sono state ultimate
, e a che indirizzo si possono scaricare...
--
Grazie e ciao a tutti
-----------------------------
mg...@polbox.com
-----------------------------

 , e a che indirizzo si possono scaricare...
Purtroppo non sono ancora state ultimate. Vogliamo riassumere la
situazione e vedere, con uno sforzo comune, di portarle a termine?
EMG
Newsgroup: it.comp.lang.c
Titolo: [Linked list] Segmentation fault

Qualcuno vede l'errore (magari e' macroscopico ma mi sfugge:-(    )
P.
#define MAX 25
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int menu(void);
int main(int argc , char *argv[])
{
struct dati{
	char info[MAX];
	struct dati *next;
}; 
struct dati *primo;
struct dati *elem;
int scelta;
char app[MAX];
primo = (struct dati* )malloc(sizeof(struct dati)); 
elem = primo;
for(;;){
	printf("\t 1 per inserire \n\t 0 per uscire\n\t 2 per vedere   ");	
		                 scanf("%d", &scelta);
	if ( scelta == 0 ) break;
	if ( scelta == 1)
	{
	elem->next = (struct dati *)malloc(sizeof(struct dati));
	scanf("%s", &app);
	strcpy( elem->info, app );
	elem = elem->next;	
	}
 
	if ( scelta == 2 )
	elem = primo;
	while ( elem != NULL)
	{
		printf("%s", elem->info);
		elem = elem->next;
	}	
 
}/*   for  */
}


se si vuole far leggere, e capire, il proprio codice
ad altri, vale la pena indentare!!!
ciao
Massimo

	}	
Secondo me mancano 2 parentesi graffe :P  Comunque usa lo switch, non
una catena di if
switch (scelta) {
	case 0: /* todo if case == 0 */
		break;
	case 1: /* todo if case == 1 */
		break;
	case 2: /* todo if case == 2 */
		break;
In un caso simile in effetti non servirebbero le graffe, se usi degli
if pero' devi mettercele.
Mox :)

         }
L'errore stà proprio quì: si esce dal while se elem == 0, ma quando
reiteri il for hai un elem nullo, e quindi quando richiami elem->next
ottieni il seg fault. Nel while devi utilizzare un puntatore temporaneo
a primo al posto di elem, che non devi toccare per poter allocare un
ulteriore elemento della lista. Oltre tutto non deallochi la memoria
prima dell'uscita del programma.
Ciao,
Cecco

 L'errore stà proprio quì: si esce dal while se elem == 0, ma quando
Sorry, non mi ero accorto che, come ti ha segnalato Mox, non ci sono le
graffe; comunque anche se le metti quello che ti ho detto vale sempre.
Cecco

        strcpy( elem->info, app );
Oltre a  quanto detto dagli  altri, aggiungerei che leggendo  la stringa
con scanf non hai la possibilita`  di controllarne la lunghezza e rischi
quindi un overflow. Molto meglio:
fgets(elem->info, MAX, stdin);
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Windows /win'dohz/ n. : thirty-two  bit extension and graphical shell to
a sixteen  bit patch to an  eight bit operating system  originally coded
for a  four bit microprocessor  which was  written by a  two-bit company
that can't stand a bit of competition.
Newsgroup: it.comp.lang.c
Titolo: Aiuto scrittura in strutture

Ho la necessità di scrivere in un vettore di strutture nella prima posizione
"utile". Il prog legge un file txt con varie righe che rappresentano i dati
di una persona (nome, cognome, tel...) ed immagazzina i dati della riga in
una struttura. Una volta effettata la scansione dal file di testo, devo
aggiungere una riga al vettore di strutture che ho in memoria, nella prima
posizione vuota. Considerate che la funzione che esegue questo compito è del
tipo void nome_f (void), per cui non può accettare in ingresso un contatore
delle righe del file txt..
Avevo pensato ad una cosa del genere:
for (i = 0; i < MAX; i++)
{
   if (strcmp(vett[i].nome, NULL) == 0)
    printf ...
    scanf ...
}
... ma non funziona. Come faccio a dirgli di iniziare a fare le assegnazioni
nel vettore di strutture a partire dalla posizione i_(valida) + 1?
Grazie
Daniele

 nel vettore di strutture a partire dalla posizione i_(valida) + 1?
NULL non e' una stringa. Viene interpretato come un puntatore
che punta alla stringa, ma essendo il puntatore nullo credo
che possa causare parecchi problemi.
SE (e sottolineo SE) le stringhe vett[i].nome sono
state preliminarmente inizializzate alla stringa nulla,
allora basta controllare se il primo carattere
e' uguale a 0.
if (vett[i].nome[0]==0)
{
}
Naturalmente, se hai 20 milioni di record e riempi il vettore 
sequenzialmente senza mai creare buchi cancellando,
invece di cercare ogni volta quello successivo
libero ti potrebbe convenire usare una variabile globale
che indica quanti record sono stati riempiti.
ciao.
g.

 g.
Perfetto. Usando una variabile globale funziona a meraviglia.
Grazie mille
Daniele

Newsgroup: it.comp.lang.c
Titolo: Sempre sui numeri casuali

Grazie per le risposte all'altro post, sono riuscito a capire il problema.
Ora mi chiedo questo: se dovessi generare una serie, sempre di numeri 
casuali, con media e varianza note, compresi tra due estremi (diciamo 0 
e 2, comunque sempre positivi), ma senza fare alcuna ipotesi sul tipo di 
distribuzione del campione, come potrei procedere?
E' solo un consiglio perchè non riesco ad "immaginarmi" il 
problema...oggi sono un pò stanco.
Grazie ancora.

 Tue, 21 Sep 2004 20:05:50 +0200 
=== Posted with Qusnetsoft NewsReader 2.2.0.8 

 winter
Ciao.

 Tue, 21 Sep 2004 21:07:04 +0200 


| media e varianza non ti definiscono una distribuzione, a meno di non fare
| ulteriori ipotesi... infatti una distribuzione è definita in teoria da
| infiniti "momenti": media e varianza sono solo i primi due momenti di una
| distribuzione.
|
| se non sai (o non decidi) da quale distribuzione generare numeri, non puoi
| scrivere un algoritmo!!!
ok..c'ero arrivato (finalmente) anch'io .
Grazie di tutto,
ciao.
Luca
Newsgroup: it.comp.lang.c
Titolo: Come accedere ai files?

  Ho un problema cercando di scrivere uno dei miei primi programmi in C,
mi serve qualche info per cercare di andare avanti nello sviluppo da solo...
Ho un file (scritto con notepad) del tipo:
0000;25
0001;23
0002;18
0003;26
ecc...
Il dato a sx e' il tempo mentre il dato a dx e' la temperatura, come 
faccio a
leggere un punto di un file e assegnare quel valore ad una variabile?
Dopo aver letto i valori con gli opportuni comandi devo elaborarli e 
scrivere
i risultati in un file simile a quello di input... come faccio a far leggere
e scrivere i valori nei punti del file che voglio io?
Ciao e grazie a tutti.
by Ferro

 Salutoni Dave.
Ciao anche a te e grazie davvero.
Bye.

 ma con queste riesci a fare già parecchie cose... Salutoni Dave.
Si, lo sono tutte... ma non sono le sole.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

Marcello Ferrari wrote:

Su google, su un buon libro di C, sulle man page di unix (ne trovi alcune in 
formato html sul web).
Come gia' accennato piu' sopra nel thread, non sono le uniche.
In particolare per leggere questa sequenza di caratteri:
0000;25
0001;23
0002;18
0003;26
Io farei prima una fgets() sulla linea (che ritorna NULL quando arriva a EOF 
tra le altre cose), poi te la parsifichi con calma dopo. Dopo di che hai 
una normale stringa che parsifichi come meglio credi.
char buffer[1024];
FILE *f;
if ((f=fopen("input.txt", "r")) == NULL)
    return EXIT_FAILURE;
while (fgets(buffer, 1024, f))
    printf("La stringa letta e' \"%s\"\n", buffer);


 Salutoni a tutti Dave.
Beh, allora adesso mi metto al lavoro, grazie a te ed a Mox per la 
disponibilita', se mai mi faccio sentire ancora :-)
Ciao e buona serata.
by Ferro
Newsgroup: it.comp.lang.c
Titolo: cattura output

Salve a tutti.
Devo creare un programma che gestisca l'output di un altro programma
mentre quest'ultimo e' in runtime.
In poche parole:
il programma1 gestisce un termometro e ogni tot di tempo stampa la
temperatura.
il programma2 che devo creare cattura ogni singola temp. del primo, vi
applica alcune formule
e stampa il nuovo output finche' programma1 non viene killato
brutalmente.
avete qualche consiglio su che funzioni utilizzare?
ps1: il programma dovrebbe poter girare sia su linux che su dos, se cio'
fosse impossibile
    preferirei l'utilizzo di funzioni del linux gcc.
ps2:il programma1 non puo' essere modificato.
grazie in anticipo a chi sapra' aiutarmi.
--
   LUNIVERSONONEUSERFRIENDLY
+-----------------------------+
|  
pugg...@labinf2.unica.it
  |
|     
kill...@yahoo.it
      |
|    
kill...@supereva.it
     |
+-----------------------------+

 --
La soluzione più semplice è probabilmente quella di usare le pipe.
Il programma2 può usare stdin per leggere l'input, ci pensa
poi l'O.S a ridirezionare il tutto.
Ad esempio  dir | more
l'output di dir diventa l'input di more.
Manlio Perillo

 avete qualche consiglio su che funzioni utilizzare?
Se conosci il formato con cui il programma1 produce il suo output, ti
basta metterlo in pipe con il programma2 e leggere le temperature come
faresti da stdin. Poi fai quello che devi fare e stampi i risultati.
--
 Ciao, Bianco.
 Reply to 
luca....@tiscalinet.it

 Manlio Perillo
Ti ringrazio ma purtroppo penso non sia applicabile al mio problema
poiche' il mio programma dovra' dipendere da una GUI (realizzata con le gtk) che gli
passa un bel po di parametri
e che gestisce il programma1 con un pulsante [start\stop].
Quindi premendo il pulsante [start] vegono catturati i parametri dalle varie entry,
passati al mio programma nel quale c'e' un system(programma1)
a questo punto dovrei catturare l'output,elaborarlo e restituirlo all' interfaccia
grafica che lo stampa.
e tutto questo in C e possibilmente standard (il mio docente e' un pazzo :-)
ODIO I LAVORI DI GRUPPO :-(
Ti ringrazio ancora,
se hai qualche dritta fammi sapere.


 wrote :
| e tutto questo in C e possibilmente standard (il mio docente e' un pazzo
:-)
Se puoi usare popen(), sei a cavallo (tra l'altro su Win32 si chiama
_popen, percio' puo' anche essere semi-portabile, almeno la parte non GUI).
altrimenti usi un file temporaneo:
1 scrive alla fine, 2 legge dall'inizio.
Pero' hai tutti i problemi di locking.
Altre soluzioni(S.O. dependent):
memoria condivisa, socket
Newsgroup: it.comp.lang.c
Titolo: Domanda Banale sulle librerie

Ciao a tutti,
Non ricordo se questa domanda è stata già postata, ma vorrei togliermi 
una curiosità che ho da un po' di tempo sul come compilare le librerie in C.
Il mio problema è che non ho trovato il modo di compilare le librerie 
separate dall'eseguibile.
Cioè: se io ho un file sorgente, FILE.C, che verrà compilato come 
eseguibile, e altri due file sorgenti, LIB1.C e LIB2.C, come faccio a 
linkare i due LIB*.C a FILE.C, e poi compilare il tutto come tre file 
diversi (FILE.EXE, LIB1.DLL e LIB2.DLL), e non come un sigolo file 
(FILE.EXE)?
Dipende dal linguaggio, o dal compilatore?
Grazie
Ciao

 vedere il sorgente.
Quindi nel sorgente dell'eseguibile, linko il file object con il solito 
#include?
Poi, un'altra cosa: il file header č necessario? Cioč, una volta 
compilato il file object, il file header non viene compilato insieme 
allo stesso?
Scusate l'ignorantaggine, ma fino ad adesso ho sempre scritto 
programmini monolitici, senza mai preoccuparmi di dovelo suddividere in 
pezzi... ora mi piacerebbe provare a fare alcuni programmini suddivisi 
in piů di un file. :)
Grazie
Ciao
Francesco

 sull'argomento.
Hai qualche idea a riguardo?
Grazie
Ciao
Francesco

Newsgroup: it.comp.lang.c
Titolo: Avviare applicazione, tutto ok ma...

Salve a tutti,
sto scrivendo un semplice software in C che ascolta quali tasti vengono 
premuti e in risposta alla pressione di alcuni tasti lancia delle 
applicazioni.
Ad esempio se l'utente preme una 'a' viene lanciato un filmato a tutto 
schermo.
Per fare questo uso la chiamata system.
Il problema č che in seguito all'esecuzione del programma che visualizza 
il filmato l'applicazione in c che ascolta i tasti perde il fuoco e 
quindi non sente piů quali tasti vengono premuti.
Qualcuno sa darmi una mano su come risolvere questo apparentemente 
semplice problema??
Uso linux. Anche suggerimenti per altre soluzioni sono ben accette.
Grazie

 Uso linux. Anche suggerimenti per altre soluzioni sono ben accette.
Rivolgiti a it.comp.os.linux.development, il tuo problema esula dal
linguaggio e riguarda strettamente la piattaforma.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

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

sei un vg
Dark Angel (PS2, Xbox)
Ispirato all?omonima serie TV sceneggiata da James Cameron (tuttora
inedita in Italia), Dark Angel è un misto fra picchiaduro e azione con
visuale in terza persona, un approccio a la Final Fight con
un?ambientazione interattiva e una buone dose di devastanti combo
impreziosite da effetti al rallentatore in stile Matrix. Promettente,
anche se non esente da pecche, di cui la più grave è la mancanza di una
modalità multiplayer. L?uscita è prevista per fine anno.
-- 
ZeD
Io, solo io, sempre io, anche io, nient' altro che io, proprio io

 ha scritto nel messaggio
news:pan.2002.09.10.08...@libero.it...

Newsgroup: it.comp.lang.c
Titolo: redirigere il flusso dei dati

Salve,
devo sviluppare un applicativo under linux in modalitą testo.
1)Ho la necessitą di redirigere lo stderr in una finestra di testo, come
fare??
2) sapete consigliarmi una buona libreria per la gestione delle finestre??
grazie.

 wrote:
[ snip ]
M>1)Ho la necessità di redirigere lo stderr in una finestra di testo, come
M>fare??
Non mi e' chiaro cosa intendi.
M>2) sapete consigliarmi una buona libreria per la gestione delle finestre??
Prova le ncurses.
Pero' it.comp.linux.development sarebbe un NG piu' adatto ;)
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 grazie.
Non c'č di che :^)
Ciao, Francesco
-- 
+-------*Le tre leggi del buon utente*-------+
|============================================|
+-1ų:Un utente non puo' nuocere al suo PC ne'|
|    tramite la sua colpevole inerzia permet-|
|    tere che il suo PC subisca un danno.    |
+-2ų:Un utente deve soddisfare le richieste  |
|    di sistema a meno che queste non contra-|
|    stino con la prima legge.               |
+-3ų:Un utente deve pensare ai suoi interessi|
|    installando il software di cui ha biso- |
|    gno a meno che questo non contrasti con |
|    la prima e la seconda legge.            |
|============================================|
+-Legge Zero---------------------------------+
|Un utente non puo' installare Windows, o cau|
|sera' la fine del suo PC e la rovina dell'u-|
|manita' !!!! Cobra(
franc...@iol.it
)      |
|                  (
maraf...@xoommail.com
)|
|============================================|

Newsgroup: it.comp.lang.c
Titolo: risolto questo finito il progetto...

Ho il nome del file da aprire in un char nomefile[20]....
come glielo dico di aprire il file che sta nel char??
fp=fopen(&nomefile,"r"); ???


no, fp=fopen(nomefile,"r");
g.

non me lo trova...però se ci metto io il nome funziona....

 non me lo trova...però se ci metto io il nome funziona....
allora vuol dire che dentro nomefile c'e la roba sbagliata.
Stampatelo a video come printf("<%s>\n",nomefile);
per controllare ci siano tutti i carattere che ci vogliono.
Per esempio, non e' che ti sei dimenticato un '\n' (che ovviamente
non ci deve essere) in fondo a nomefile ?
ciao,
g.

hiihihih....avevi ragione....ti ringrazio per tutto....ora faccio un po di
prove per vedere se funziona....
grazie ancora
Giosv@

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

Ho visita il sito
www.delorie.com/djgpp/
ma come faccio a scaricare il programma?
Rispondetemi al mio indirizzo. GRAZIE
ROSY

 ma come faccio a scaricare il programma?
Da qualche parte, se non ricordo male, c'e' un link che si chiama "zip
picker" : e' utilissimo, devi solo compilare un modulo e ti dice lui
cosa scaricare.
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it
Newsgroup: it.comp.lang.c
Titolo: Contenuto di  una static library

Ciao a tutti.
Avrei il seguente problema.
Devo compilare un programma in ambiente Microsoft Viasual Studio per mezzo di un file .lib che ho tirato giu` da internet,
 
Quando compilo pero` il compilatore mi dice che una funziona manca nel file .lib.
 
La domada allora e' la seguente:
 
E' possibile poter avere una lista delle funzioni presenti in un file .lib generato da visual studio?
Grazie

 
 
La butto lì: con DUMPBIN? (dovrebbe essere l'equivalente dell'amico objdump su
*nix, per cui dovrebbe fare al caso tuo)
 
Ciao!

 Ciao!
 
Ci provo subito.
Grazie.

Newsgroup: it.comp.lang.c
Titolo: Mascherare inserimento della Passwod

Salve,
dovrei mascherare l'inserimento della password, evitando che si visualizzino
i caratteri inseriti.
Da che parte comincio?
Grazie
Giuliano

you wrote :
#dovrei mascherare l'inserimento della password, evitando che si visualizzino
#i caratteri inseriti.
#
#Da che parte comincio?
Dallo specificare che compilatore e che sistema operativo usi ...
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

 Da che parte comincio?
Se parli di DOS allora prova la funzione non standard getch() mentre se
parli di Windows c'è un'apposito stile (ES_PASSWORD) nei controlli EDIT.
EMG

Scusate la Zucconita' che mi contraddistingue:
OS = Linux/Unix
COMP = gcc (obviusly)
Grazie.
Giuliano

 
man 3 gettpass
- Free -

man (naggia che era semplice...) THANKS
Gillo
Newsgroup: it.comp.lang.c
Titolo: var globale

Ciao, ho scritto un programma C veramente stupido costituito
da un main
e da una funzione, in due file distinti.
Il main l'ho chiamato main.c,
la funzione l'ho chiamata modifica.c
eppoi ho scritto l'header della funzione,
in un file distinto dai precedenti due e l'ho chiamato modifica.h. Poi
(uso dev C++) ho fatto un progetto con i tre files.
Dunque riassumendo il mio programma consta di tre file distinti,
(1) main.c
(2) modifica.c
(3) modifica.h
Prima del main ho definito una variabile globale intera a: int a;
Questa variabile l'ho utilizzata anche nella funzione modifica.c.
Il mio dubbio consiste nel fatto di scrivere extern int a prima o dopo
della testata della funzione modifica.c.
In altri termini, quale delle seguenti due soluzioni è corretta?
Soluzione 1:
http://i36.tinypic.com/29x4xs.jpg
-------------------------------------------------------
Soluzione 2:
http://i36.tinypic.com/2lxf2x3.jpg
Grazie

 dopo della testata della funzione modifica.c.
Se la dichiarazione è all'interno della funzione sarà visibile solo 
nel corpo della funzione stessa. Se invece è all'inizio sarà visibile 
in tutto il file.
Negli esempi che hai linkato non fa alcuna differenza. Vanno bene 
entrambi i modi. Ma se veramente vuoi fare le cose in un modo pulito 
ti consiglio di mettere quella dichiarazione nel file .h  Io in genere 
suggerisco, se il progetto non è troppo grosso di usare un unico file 
.h (p.e. globale.h) per tutto il progetto.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 in tutto il file.
Grazie per la risposta.
Ho un'obiezione: scusa, ma non è vero che in generale (se faccio
programmi con funzioni tutte in file distinti, come nel caso del
programma che ho postato) il corpo della funzione coincide con
l'intero file? Quindi che differenza fa?
Ciao e grazie


 fa?
Mettere una sola funzione per file è un caso particolare che io ho 
usato solo nel caso di costruzione di librerie.  Nei progetti 
multi-file difficilmente si usa questo metodo.  Quasi sempre si 
mettono nello stesso file le funzioni che sono correlate, come la 
gestione di un oggetto, di un file, della configurazione ecc..
In ogni caso nel caso di file con una unica funzione nnn ha alcuna 
importanza dove metti la dichiarazione, a meno che non sia una 
definizione di tipo usato anche nella definizione della funzione.
Ma ribadisco quello che ho scritto nel post precedente.  Le 
dichiarazioni esterne in un progetto io le metterei sempre negli 
header files.

Newsgroup: it.comp.lang.c
Titolo: file di help C

Esiste un sito dove poter scaricare un file dell'help in linea in cui
vengono spiegate in italiano le funzioni del C??
Tipo la guida in linea del Delphi.

 Tipo la guida in linea del Delphi.
Rinnovo la richiesta perchè forse non sono stato chiaro.
La guida in linea del Borland delphi include una lista con la
sintassi, l'uso e la descrizione di tutte le funzioni e le procedure
supportate dal linguaggio ed incluse nelle librerie (write, readln
ecc....)
Esiste qualcosa del genere anche per il C?

 Esiste qualcosa del genere anche per il C?
Non free su Internet. Ogni compilatore (che conosco) viene accompagnato
da un help on line che descrive le funzioni messe a disposizione.
Se il tuo non te ne mette a disposizione uno, puoi dare un'occhiata
al K&R o a un qualsiasi altro manuale decente del "C" o acquistare
da 
www.iso.ch
 lo standard del "C".
Come estrema razio puoi dare un'occhiata a
http://www.gnu.org/software/libc/manual/
o a
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_api_start_page.asp
dove vengono descritte tutte le funzioni standard del "C" e una marea
di altre funzioni che con lo standard non hanno niente a che vedere.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

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

Vorrei sapere dove posso trovare informazioni in merito.
Grazie


E' un po' OT, comunque:
www.stardust.com
.
Ciao
Newsgroup: it.comp.lang.c
Titolo: Bug in gcc o nella mia testa

Salve a tutti.
Ho questo semplice programmino:
#include <stdlib.h>
unsigned long get_sp()
{
    __asm__("movl  %esp,%eax);
}
void main()
{
unsigned long addr;
addr=get_sp();
printf("GET_SP %x\n",get_sp());
printf("ADDR %x\n",addr);
}
N.B. get_sp()  restituisce lo stack pointer;
Mi aspetto che le due printf stampino valori uguali, visto che si tratta di
VARIABILI UGUALI e dello STESSO TIPO.
Invece, compilando con gcc 3.2 (Linux Mandrake)
si ottiene
GET_SP=bfffff7c
ADDR=bfffff8c
mentre con gcc 2.95 (Linux Debian)
GET_SP=bffff9c4
ADDR=bffff9cc
In nessun caso le due variabili SEMBRANO uguali, eppure se faccio un test
del tipo:
addr=get_sp();
if (addr==get_sp()) printf("sono uguali\n");
le due variabili RISULTANO uguali.
Qualcuno saprebbe spiegarmi dov'è il problema?
Grazie
G.

 Qualcuno saprebbe spiegarmi dov'è il problema?
il problema sta nella printf ... facendo cosi' tu crei una variabile
temporanea nello stack in cui salvi il valore che ha lo stack in quella
chiamata, in piu' devi aggiungere che la chiamata alla printf ha gia'
pushato sullo stack l'indirizzo della stringa di formattazione + il numero
di argomenti ecc ... ed ecco perche' alla chiamata della tua funzione lo sp
e' cambiato ...
forse riusciresti ad ottenere lo stesso valore facendo:
 #include <stdlib.h>
 unsigned long get_sp()
 {
     __asm__("movl  %esp,%eax);
 }
 void main()
 {
 unsigned long addr;
 unsigned long addr2;
 addr=get_sp();
 addr2=get_sp();
 printf("ADDR %x\n",addr);
 printf("ADDR2 %x\n",addr2);
 }
altro problema ... chi ti dice che il valore di ritorno della funzione
get_sp venga preso nei registri e non dallo stack ??? non e' meglio che
riscrivi la funzione usando delle variabili in asm cosi da fare il return
certo della variabile che vuoi ... perche' il gcc ha varie ottimizzazioni
dei ritorni ed in fase di compilazione puoi scegliere se usare registri o
stack ecc ... quindi non sapendo come compili quella parte mi sa un po' di
pesca farlocca in memoria ...
ciao


Grazie e a buon rendere.

Newsgroup: it.comp.lang.c
Titolo: ### HELP: ESISTE UN METODO per sapere quali file ha aperto una Applicazione in WIN95 ? ###

Vorrei Sapere quali file ha Aperto/Modificato un applicazione durante l'esecuzione.
Esistono API tools ecc.. che permettono di vedere cio' ?
Grazie Flavio

...


Newsgroup: it.comp.lang.c
Titolo: La funzione Fork() in Windows.

Ciao a tutti,
volevo sapere se esiste un compilatore C per Windows/Dos che permetta di
usare la funzione Fork() e
Signal() presenti nel compilatore Linux.
Grazie
Nicola
-----------------------------------------------------------
E-Mail    : 
nic...@nsoft.it
URL       : 
http://Geocities.com/SunsetStrip/Street/1306/
ICQ       : 26032113
-----------------------------------------------------------

...


 Signal() presenti nel compilatore Linux.
Esiste un porting dell'ambiente GNU per Win32 fatto dalla
Cygnus, compreso il compilatore gcc con tutte le piů importanti funzioni di
tipo unix-like (fork(), select(), signal() ecc.). Per maggiori dettagli:
http://sourceware.cygnus.com/cygwin/
Raffaele.
Newsgroup: it.comp.lang.c
Titolo: Comunicazioni Seriali (infrarossa)

Devo fare una comunizazione via seriale (infrarossa) tra 2 pc
ma non riesco a farla funzionare.
Mon riesco a far comunicare due PC via Seriale (INFRAROSSA)
Per aprire la porta ho usato (da Visual C++)
l'api CreateFile
e per scrivere WriteFile (per leggere ReadFile)
ma non funziona!
Devo settare qualche cosa in particolare ?
Altra domanda: posso impostare il bit di Stop, i Baud, parita ecc.. cioè
impostare la porta ? Come ?
Grazie

:

Se è gestita come una normale seriale, non dovresti avere problemi, 
utilizzando le funzioni nel modo giusto...
Quale funzione ti torna errore?
Che errore ti torna?
Puoi postare dieci righe di esempio?
P.S. se ti è possibile, dovresti spostare anche questo tipo di domande su 
it.comp.programmazione.win32
-- 
Valter Minute - 
min...@fortech.it
 (the reply address of this message is 
invalid)
--
Are you looking for a good freeware ScreenSaver? Try FOYD!
http://hotfiles.zdnet.com/cgi-
bin/texis/swlib/hotfiles/getit.bin?fcode=000PZ0
if you want, I can send you the (free) C++ source code.

Newsgroup: it.comp.lang.c
Titolo: Cerco esercizi su liste

Cerco esercizi su liste, pile, alberi e roba del genere.

>roba del genere
Strutture dati si chiamano!
-- 
Posted from 
c000-h010.c000.muc.cp.net
 [209.228.29.34] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Newsgroup: it.comp.lang.c
Titolo: la funzione pow

la funzione pow
Salve,
ho il dev c++ e win98.
Ho scritto il programmino che segua. il suo scopo č inizializzare il vettore
v[N] con gli
opportuni valori.
////////////////////////////////////////////////////////////////////////////
/////////////
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
main()
{
int N=32,i;
double z,base;
double v[N];
base=(5/6);
v[0]=-9;
v[1]=0;
for(i=2; i<N; i++)
{
z=N-i;
v[i]=9*pow(base,(N-i));
printf("v[i]=%f\n", v[i]); getchar();
}
}
////////////////////////////////////////////////////////////////////////////
///////////
Esso non funziona. Infatti mi stampa a video di continuo, per ogni valore di
"i", il valore:
 v[i]= 0.0000000.
invece, se al posto di:
double base;
base=5/6;
si ponga, nel codice precedente:
double base;
base=0.83333 (che grosso modo č pari a 5/6)
allora il problema scompare.
Perchč?
Che c'č di errato con base=5/6?
L'errore permane anche se io scriva:
double base;
base=(double) (5/6);
grazie,
adriano

5 e 6 sono numeri interi, non a virgola mobile (in intero, 5/6=0 resto 5).
Prova a mettere "base = 5.0/6.0".
Pleg
Newsgroup: it.comp.lang.c
Titolo: Fwrite al contrario. Perchè?

Salve a tutti, avrei il seguente problema: dovrei stampare su file, in
modalità binaria, il dato contenuto in una variabile unsigned int; ad es.,
unsigned int buffer = 0xABCD;
Quando stampo a video la variabile nel modo seguente:
printf("%X", buffer);
ottengo la stampa che mi aspettavo, (ABCD);se, invece, uso fwrite per
stampare la stessa variabile nel file binario, e poi lo edito con, se non
sbaglio, Hex workshop, ottengo
CDAB ....
Come mai c'è quest'inversione nei byte della parola?
Vi ringrazio in ogni caso,
Giuseppe

 ha scritto nel messaggio
news:a5qhdq$4n2$1...@pegasus.tiscalinet.it...

Perche' viene salvata in modo BigEndian (o little? :-))
In pratica nel modo Intel viene prima salvato il byte basso e poi quello
alto.
Ciao
Giuseppe

 Come mai c'è quest'inversione nei byte della parola?
Perché in ordine inverso si trovano nella RAM, prima il byte meno
significativo poi quello più significativo.
Prova a verificare così:
    int x = 0xabcd;
    int *px = &x;
    char *pc = (char *)px;
   printf("%x\n", x);
   printf("%x\n", *pc++);
   printf("%x\n", *pc);
Maurizio.

 Come mai c'č quest'inversione nei byte della parola?


 Mi potete dare qualche suggerimento per scriverne una?
Puoi fare una cosa del genere, che funziona per qualunque tipo di dato:
int swab(void *p, size_t size) {
	unsigned char tmp[size];
	int i;
	for (i = 0; i < size; i++)
		tmp[i] = ((unsigned char *)p)[size - i - 1];
	return memcpy(p, tmp, size);
}
La puoi chiamare cosi`:
int a = 0xabcd;
long b = 0xabcdef12;
swab(&a, sizeof(a));
swab(&b, sizeof(b));
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"L'ottimista pensa che questo sia il migliore dei mondi possibili. 
 Il pessimista sa che e` vero" -- J. Robert Oppenheimer
Newsgroup: it.comp.lang.c
Titolo: piccolo aiuto su un paio di interrupt

Sempre sul "tema" del precedente post.
Ci sono quattro funzioni abbastanza interessanti, ma di cui non ho ben
capito un "cavillino" sui valori da passare.
INT 13 - DISK - GET STATUS OF LAST OPERATION
 AH = 01h
 DL = drive (bit 7 set for hard disk)
INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)
 AH = 08h
 DL = drive (bit 7 set for hard disk)
INT 13 - DISK - GET DISK TYPE (XT 1/10/86 or later,XT286,AT,PS)
 AH = 15h
 DL = drive number (bit 7 set for hard disk)
Return: CF clear if successful
     AH = type code
  00h no such drive
  01h floppy without change-line support
  02h floppy (or other removable drive) with change-line support
  03h hard disk
      CX:DX = number of 512-byte sectors
 CF set on error
     AH = status (see #00234 at AH=01h)
INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1/10/86 or later,XT286,AT,PS)
 AH = 16h
 DL = drive number (00h-7Fh)
Qual è il significato del valore in DL? Che significa quel "bit t set for
hard disk" nelle prime tre? Se non si tratta di un hard disk, ma del floppy,
che valore si mette?
E nella quarta, perché il "drive number" non è indicato con 1, 2, 3, ecc.,
ma con un numero che addirittura va da 0 a 127??!!
E infine, nella funzione Get Disk Type, che cosa è un floppy con o senza il
"change-line support"? di che si tratta?
Grazie in anticipo per aver chiarito tutti questi dubbi low-level.
MarioH

"change-line support"? di che si tratta?
Alcuni lettori potrebbero essere in grado di accorgersi se si sta
cambiando floppy. Ma non credo che esistano, per PC.
-- 
Saluti,
    Mardy
Newsgroup: it.comp.lang.c
Titolo: printf e spazi prima della scrittura

se io scrivo printf("%20s", "prova");
mi mette una spazio di 20 blank davanti alla parola "prova"
il problema che io dovrei aumentare lo spazio in modo crescente
utilizzando un ciclo di printf;
ovvero al la prima printf lo spazio davanti alla stringa deve essere di
zero spazi, alla seconda di 20, alla terza di 40...
l'ideale sarebbe dichiarare un int ed incrementarlo di 20 ad ogni ciclo,
perň se metto questa variabile davanti a s il compilatore mi da errore
(uso il gcc ma credo che l'errore sia indipendente dl compilatore)
come posso fare?
void grafica::stampa_funzioni(char **szprima_funzione,int num_funzioni)
{
   int space=0;
   while(space <= 100)
   {
       printf("%space c",'|');
       printf(" %s ",*szprima_funzione);
       szprima_funzione++;
       space +=20;
   }
}
cosě mi da errore!!!
ciao e grazie in anticipo

utilizzando un ciclo di printf;
sprintf( formatstr, "%ss", width ) ;
printf( formatstr, "prova" ) ;
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 printf( formatstr, "prova" ) ;
l'idea e' buona ma....
se  >>> int width;
allora > sprintf( formatstr, "%%%ds", width ) ;
ciao
donCiccio

 mi mette una spazio di 20 blank davanti alla parola "prova"
no.
cosi' fai in modo che cio' che stampi sia minimo 20 caratteri riempito di
spazi a sinistra, quindi 15 spazi poi "prova"
ciao
donCiccio

allora > sprintf( formatstr, "%%%ds", width ) ;
Gia', grazie della correzione ;)


wrote:

Io di solito uso questo sistema...
  #include <stdio.h>
  int main()
  {
    int n;
    for (n=0; n<20; i++)
    {
      printf("%*s%s",n,"","Hello, world\n");
    }
    return 0;
  }
In pratica con "%*s" dico che voglio stampare una stringa
che occupi un numero di caratteri indicato dal parametro
"n" e come valore passo la stringa vuota... questo si traduce
in una sequenza di esattamente n spazi.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff
Newsgroup: it.comp.lang.c
Titolo: Che fa questo programmino?

#include <stdio.h>
#include <stdlib.h>
int array[0];
int i, j;
int main(void)
{
     for(i = 0; i < 9; i++){
         printf("Dammi l'elemento %d dell'array: ", i);
         scanf("%d", &array[i]);
     }
     for(j = 0; j < i; j++)
         printf("%d  ", array[j]);
     printf("\n\n");
     system("PAUSE");
     return 0;
}
Questo programmino dovrebbe andare ad occupare della memoria non 
assegnata all'array, giusto?
Comunque, ho provato e mi ha dato diversi output:
Dammi l'elemento 0 dell'array: 1
Dammi l'elemento 1 dell'array: 2
Dammi l'elemento 3 dell'array: 3
Dammi l'elemento 4 dell'array: 4
Dammi l'elemento 5 dell'array: 5
Dammi l'elemento 6 dell'array: 6
Dammi l'elemento 7 dell'array: 7
Dammi l'elemento 8 dell'array: 8
1  9  2  3  4  5  6  7  8
Perché si è infiltrato quel 9?
Oppure:
Dammi l'elemento 0 dell'array: 1
Dammi l'elemento 1 dell'array: 1
Dammi l'elemento 2 dell'array: 1
Dammi l'elemento 3 dell'array: 1
Dammi l'elemento 4 dell'array: 1
Dammi l'elemento 5 dell'array: 1
Dammi l'elemento 6 dell'array: 1
Dammi l'elemento 7 dell'array: 1
Dammi l'elemento 8 dell'array: 1
1  9  2  1  1  1  1  1  1
E' la scanf che fa casino, al dilà del fatto che si va a lavorare con 
memoria estranea all'array?
Grazie

 memoria estranea all'array?
No, e' il programmatore che fa casino!
A che pro questi test?
E.

 assegnata all'array, giusto?
No, serve a generare un buffer overflow.
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 ???
(mancava un pezzo di post)
ISO/IEC 9899:1999 (E)
6.7.5.2 Array declarators
Constraints
1   In addition to optional type qualifiers and
     the keyword static, the [ and ] may delimit
     an expression or *. If they delimit an
     expression (which specifies the size of an
     array), the expression shall have an integer
     type. If the expression is a constant expression,
==> it shall have a value greater than zero.
     The element type shall not be an incomplete or
     function type. The optional type qualifiers and
     the keyword static shall appear only in a
     declaration of a function parameter with an
     array type, and then only in the outermost
     array type derivation.


Newsgroup: it.comp.lang.c
Titolo: GCC3.1 : quanti MB sono da scaricare?

-- Salve a tutti , ho letto da qualche parte che
il GCC3.1 e stato rilasciato.
Mi sapete dire quanti MB sono da scaricare?
Lo trovo sul sito 
delorie.com
? integrato a Rhide?
Una curiosità: ma Rhide ha l'auto indentazione?
Grazie a tutti
Ciao

 Mi sapete dire quanti MB sono da scaricare? Lo trovo sul sito
[CUT]
Fai prima ad andare su 
ftp.gnu.org
-- 
#eno
Newsgroup: it.comp.lang.c
Titolo: Stringhe

Esiste in C una funzione che operi come la MID$(a$, m, n) del BASIC, che
restituisce i primi n caratteri in a$ a partire dalla posizione n?
Immagino che il problema si possa risolvere con un puntatore ad a$,
incrementando il suo valore etc., ma devo solo modificare un programmino
di dieci righe di codice e sono un medico... Aiutatemi, vi prego.
Roberto.

restituisce i primi n caratteri in a$ a partire dalla posizione n?
strncpy() 
b$ = MID(a$, 3, 5) 
equivale a
strncpy( b, (a+3), 5) ;

 restituisce i primi n caratteri in a$ a partire dalla posizione n?
Prova con qualcosa del genere:
#include <stdio.h>
#include <string.h>
int main()
{
    char s[] = "Prova di stringa";
    char t[ 80 ] = "";
    strncpy( t, s + 6, 2 );
    printf( "%s\n", t );
    return 0;
}
EMG

strncpy( t, s + 6, 2 );
L'help del Turbo C dice che la stringa di destinazione (nell'esempio
t) puo' non terminare con l'ascii zero se la lunghezza della stringa
d'origine (s) e' uguale o maggiore alla quantita' di caratteri copiati
e che quindi bisogna sempre mettere l'ascii 0.
strncpy(t, s + 6, 2);
t[2]= '\0';
ciao

e che quindi bisogna sempre mettere l'ascii 0.
*sempre* nel caso in cui si voglia trattare la stringa di destinazione
come *stringa*.
Lo standard prevede che strncpy() aggiunga '\0' ?

 Lo standard prevede che strncpy() aggiunga '\0' ?
No. Solo se la lunghezza specificata supera quella della stringa origine
allora la stringa destinazione viene completata di '\0' fino a quella
lunghezza.
EMG
Newsgroup: it.comp.lang.c
Titolo: Messaggi d'errore in italiano.

Qualcuno ha tradotto in italiano i messaggi d'errore e warnings dell' 
ansi C? Saluti.
-- 
Qui si usa Linux
<b>
http://www.puppylinux.org
</b>
<b>
http://www.italianpuppy.org
</b>

 ansi C? Saluti.
 
Perché mai dovrebbero? Forse per agevolare te e mettere in difficoltà 
tutti gli altri?
 

 ansi C? Saluti.
 
Messaggi di "Warnings" del *compilatore* casomai.
 
Nel caso di GCC potresti iniziare ad orientarti con questo ottimo
testo[1], che peraltro è stato anche tradotto[2], il che presumo
non ti dispiaccia.
 
[1] 
http://www.network-theory.co.uk/gcc/intro/
 
[1] 
http://codex.altervista.org/introgcc1_0/introgcc1_0.pdf
 


In effetti scritta così, la risposta che ti ho dato, ha un'aria quasi 
minacciosa e c'è un motivo. Non posso sapere se quella che stai 
percorrendo, nella programmazione, sia una breve avventura oppure sia la 
strada che intendi intraprendere però una cosa è sicura: il C era un 
linguaggio composto di 18 keyword e, forse/probabilmente, il giorno 
d'oggi ne avrà qualcuna in più, quindi accontentare il compilatore non è 
poi così difficile; ti assicuro che insistendo nel suo utilizzo gli 
errori e gli avvisi saranno l'ultimo dei tuoi problemi (purtroppo). 
Anzi, ti arrabbierai per il silenzio del compilatore e non sarà 
importante in quale lingua tacerà. Un aiuto, però, te lo voglio dare 
dandoti la possibilità, in anteprima, di guardare bene in faccia i tuoi 
due principali nemici. Eccoli: ";=". Il primo lo troverai nei tuoi 
codici in contesti tipo questo:
 
     for(i = 0; i < max; i++);
     {
         ...
     }
 
mentre l'altro in questi:
 
     while(not_found = TRUE)
     {
         ...
     }
 
ps:
non lasciarti impressionare dagli 'scan resume' ;-)

 Messaggi di "Warnings" del *compilatore* casomai.
 
A quel punto "warning" dato che le parole straniere non devono essere 
flesse in italiano.
Però avremmo anche dovuto dire messaggi di "error".


certo, ma il mio messaggio in realta' era focalizzato sul fatto che
"warning messages" ed "error messages" sono gestiti dal compilatore e
non dal linguaggio - come da domanda -, infatti e' compilatore ad
essere evidenziato :-)
 
comunque, sottigliezze.
 
 


Buono, viceversa, a sapersi. Credo allora che, non solo i messaggi 
d'errore e quelli di avviso siano stati già da tempo abbondantemente
tradotti, ma che l'anglicismo da me sottolineato derivi da "Puppy
Linux", il quale come è noto non abbaia che in inglese australiano.
Il problema quindi consiste nel cercare e trovare uno "spaghetti C++
o uno "spaghetti CC". Vado a vedere i link con curiosità e speranza. 

Newsgroup: it.comp.lang.c
Titolo: Domanda deallocazione memoria

considerate questo codice:
 
__interface MyInterface
{
    // qualche metodo  
}
 
class MyClass : public MyInterface
{
   // alloca qualcosa molto grande
 
   // implementa i methodi di MyInterface
   // implementa costruttore e distruttore
}
 
// da qualche parte alloca l'array 
// MyClass** myClassArray = new MyClass*[1024]
// e lo passa a questa funzione:
 
void MyFunction( MyInterface** myInterfaceArray, uint intemCount )
{
   // fa qualcosa con myInterface
 
   // ciclo for che esegue la delete su ogni elemento di 
myInterfaceArray
 
   delete[] myInterface;
}
 
la delete cancellerà solo lo spazio di MyInterface o quello della classe 
derivata MyClass?
 


Premetto:
__interface - non è standard ma di visual c++ e non ho un visual c++ per 
eventualmente provare
 
Suppongo che tu ti riferisca a questa delete:
delete[] myInterface;
 
Poichè myInterface è un array di puntatori la delete[] libera solo lo 
spazio dell' array
Giustamente tu prima fai un ciclo sull' array per liberare ogni elemento 
e cosi non hai memory leak
 
L' unico disappunto, ma è solo di tipo di design, è che domandi ad una 
funzione (MyFunction) di fare prima qualcosa (// fa qualcosa con 
myInterface) e poi di fare qualche altra cosa che non dovrebbe essere di 
sua competenza e cioè di liberare lo spazio allocato in quanto non è 
MyFunction che crea l' array
 
E' meglio fare cosi:
 
// alloco l' array
// chiamo MyFunction che fa quello che è di sua competenza
// libero l' array
 
Domanda:
Ma la chiamata MyInterface(myClassArray,10) non dà errore in compilazione ?
 
 
 
 
 
 
 
 
 
 


Dimenticavo una cosa:
 
qui è it.comp.lang.c
il newsgroup  corretto è it.comp.lang.c++
 
 

 il newsgroup  corretto è it.comp.lang.c++
 
 
con mynewsgate ho sottoscritto iclc++ ma mi manda qui, non me n'ero accorto! 
 

 Ma la chiamata MyFunction(myClassArray,10) non dà errore in 
compilazione ?
 
No, funziona perché l'array arriva da una factory che può restiure oggetti 
diversi che derivano da MyInterface, usa il polimorfismo
 
 
 


 
 
Non so che versione di visual c++ hai, ma le cose non stanno cosi
 
B** b
A** a=b
 
con B deriva da A, non significa che un array di B* sia assegnabile ad 
array di A*
 
Per scrupolo ho provato questo piccolo programma sotto g++ 4.6.3:
 
<---------
class A {};
class B : public A {};
 
void f( A** a, size_t n ) {}
 
int main() {
	B** b = new B*[1024];
	f(b,10);
	return 0;
}
 
---->
 
new.cpp: In function ‘int main()’:
new.cpp:18:8: error: invalid conversion from ‘B**’ to ‘A**’ [-fpermissive]
new.cpp:14:6: error:   initialising argument 1 of ‘void f(A**, size_t)’ 
[-fpermissive]
 
 
 
 
Per usare il poliformismo, come dici tu, occorre scrivere cosi:
 
MyInterface** myClassArray=new MyInterface*[1024];
 
e poi assegno ogni MyClass* voluto ad una cella dell' array MyClassArray