mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Compilatori free ed IDE

Vorrei sapere una cosa: il compilatore gcc3.X č uno dei migliori?
Sto studiando il C e non vorrei mummificarmi su un compilatore
proprietario.....Per questo vorrei sapere se č possibile usare con il Dev
C++ (4.01) il gcc3.X invece che il mingw 2.95.2-1 che se non erro č una
versione del gcc. Ecco io vorrei usare di volta in volta il gcc piů
aggiornato. Come faccio?
Se scarico Emacs č possibile integrarlo con il gcc?
Grazie mille e scusate le mille domande
Buon lavoro.

 Se scarico Emacs è possibile integrarlo con il gcc?
Si`, e molto bene anche.  Emacs ha supporto per gcc, gdb (debugger) e
tante altre cose (lo uso per la posta elettronica e news, per
esempio:-).
-- 
David N. Welton
   Consulting: 
http://www.dedasys.com/
Free Software: 
http://people.debian.org/~davidw/
   Apache Tcl: 
http://tcl.apache.org/
     Personal: 
http://www.efn.org/~davidw/

 Se scarico Emacs è possibile integrarlo con il gcc? risposta: non lo so .
usi rhide e forse ti trovi anche il gcc + aggiornato.  
www.delorie.com


 Buon lavoro.
anche a te.
--
Lello Mele
--
HOMEPAGE: 
http://www.lellomele.it
eMAIL   : 
v...@libero.it

compilatori.
Si', il C99 e' stato gia' approvato.
--
Andrea Laforgia - walkietalkie(at)
libero.it
http://www.geocities.com/AndreaLaforgia

Newsgroup: it.comp.lang.c
Titolo: AIUTO compilatore GNU

Salve a tutti ho appena installato la beta 18 del compilatore gnu su Win
95 ed avrei alcune cose dai chiedervi.
La prima cosa e' che ho cercato di compilare il classico programmino
"Ciao a tutti" (versione DOS naturalmente), operazione che e' riuscita
correttamente; poi ho eseguito il file .EXE e tutto e' andato bene. Poi
riacceso il PC ho provato ad eseguirlo di nuova e mi segnalava la
mancanza della DLL Cygwin o qualcosa del genere: questo vuol dire che il
prg per essere eseguito avra' sempre bisongo di questa DLL. Non c'e' un
modo per ottenere seguibili indipendenti come facevo col mio un po'
vecchiotto ma glorioso Turbo C++ ?
La seconda domanda che volevo farvi e' se non esisteva un ambiente
integrato o se l'unico modo ee' di scrivere il codice col notepad e poi
compilarlo dalla riga di comando del DOS ?
Mi rendo conto che sono domande molto banali alle quali probabilmente si
sara' gia' data risposta ma sono nuovo del newsgroup ...
Grazie a tutti ...
Stefano
--
Posted from 
plutone.young-it.com
 [194.184.48.40]
via Mailgate.ORG Server - 
http://www.mailgate.org

compilarlo dalla riga di comando del DOS ?
NTEmacs : 
http://www.cs.washington.edu/homes/voelker/ntemacs.html
oppure
pcGrasp : 
http://www.eng.auburn.edu/grasp
ed impara ad usare i makefiles, sono uno strumento molto potente.
Dai un'occhiata a questo tutorial, oltre al manuale originale
di GNU che puoi trovare anche sul sito di Delorie :
http://www.ccs.neu.edu/home/cloder/cscene/CS2/CS2-10.html
-- 
Roberto Gerola
Email: 
roge...@tin.it
WWW: 
http://space.tin.it/computer/rgerola
Newsgroup: it.comp.lang.c
Titolo: input da mouse

Salve, vorrei farvi una breve domanda, (sempre se possibile) come
posso fare per catturare l' input dal clicc del mouse ? c' è se io ho
un campo del genere:
_______
| 1  | 2 |
|_3 |_4 |
volessi catturare se ad esempio qualcuno clicca su 2 ?  è possibile
farlo ?  se si come potrei ?
grazie . . .


Devi intercettare gli interrupt del mouse, leggere le coordinate del
mouse, sapere cosa c'e' a tali coordinate ed agire di conseguenza.
comincia da qui
http://www.brackeen.com/vga/mouse.html


ok grazie . . .

Newsgroup: it.comp.lang.c
Titolo: copiare un file

salve vorrei sapere come si fa in C a copiare un file da una cartella
specifica esempio.
io ho sul mio hd C:\prova.txt se io voglio copiare questo file su C:\tmp
come devo fare?
grazie in anticipo


wrote:

int CopyFile(char *src, char *dst)
{
	FILE *fr=fopen(src, "rb");
	FILE *fw=fopen(dst, "wb");
	unsigned char byte;
	while(true) {
		byte=fgetc(fr);
		if (!feof(fr) {
			fputc(byte, fw);	
		} else break;
	}
	fclose(fr);
	fclose(fw);
}
questo é molto lento... e inoltre richiede come dst il percorso
completo
Antonio
Newsgroup: it.comp.lang.c
Titolo: Timer...?!

Come posso fare per temporizzare l'esecuzione di programmini, per
determinare magari la più veloce tra diverse versioni e imparare a
ottimizzare il codice (non conosco affatto l'assembly, quindi...)?
--
Marco Iannaccone
ICQ: 18748121
IRC: Tolkien
e-mail: 
captai...@ussvoyager.com

Ops, dimenticavo, mi serve su PC Microsoft...


Ops, dimenticavo, mi serve su PC Microsoft...
Forse vuoi dire su PC con Windows.
Esprimo il mio parere personale : so che stai iniziando a programmare
da poco.
Lascia perdere le ottimizzazioni e concentrati maggiormente sulle
tecniche di programmazione.
Diceva Nicklaus Wirth che si diventa prima programmatori e poi dei
*buoni* programmatori ;)
Vedrai che col tempo sarai tu stesso, senza l'ausilio di un timer, ad
individuare quale algoritmo sia piu' veloce dell'altro.
In ogni caso, se proprio ci tieni, esiste la libreria standard time.h
che contiene tutto cio' che ti serve.

Grazie, comunque, più o meno programma dai tempi del commodore 16, ma da
poco ho iniziato a farlo seriamente, col C (l'anno prossimo faro informatica
all'università...).
Con PC Microsoft intendevo sia DOS che WIN...


 Ops, dimenticavo, mi serve su PC Microsoft...
La misura del tempo, pur essendo definita nello standard C
con la funzione clock(), e' altamente dipendente, per risoluzione
e precisione offerta, dal sistema operativo.
Infatti, il tempo speso dal tuo processo pou' essere "apparente",
se nel frattempo il sistema operativo ha mandato in esecuzione altri
task.
Sotto NT esistono: QueryPerformanceCounter()/QueryPerformanceFrequency()
GetProcessTimes()/GetThreadTimes() che dicono anche quanto tempo
il processo ha speso in modo kernel e in modo utente.
Non sono diponibili su Win95
--== Sent via Deja.com 
http://www.deja.com/
 ==--
---Share what you know. Learn what you don't.---
Newsgroup: it.comp.lang.c
Titolo: Allocazione runtime di un array

Ho questo semplice codice:
<CODE>
#include <stdio.h>
#include <stdlib.h>
struct node {
  int val;
  struct node *next;
};
typedef struct node NODE;
typedef NODE *NODEPTR;
int main() {
  int numnodi, temp;
  NODEPTR vett;
  scanf("%d", &numnodi);
  vett = calloc(numnodi, sizeof(NODEPTR));
  if (vett == NULL) exit(EXIT_FAILURE);
  scanf("%d", &temp);
  if (temp >= 0 && temp < numnodi) {
    vett[temp] = malloc(sizeof(NODE));
    if (vett[temp] == NULL) exit(EXIT_FAILURE);
  }
  return 0;
}
</CODE>
gcc (2.95) non me lo compila:
utente@host:~$ gcc prova.c
prova.c: In function `main':
prova.c:22: incompatible types in assignment
prova.c:23: invalid operands to binary ==
utente@host:~$
Non capisco perche` mi da` "incompatible types" quando
assegno il puntatore restituito da malloc(sizeof(NODE));
vett e` un array (allocato dinamicamente) di puntatori,
quindi non capisco perche` i tipi siano incompatibili.
Dove sbaglio?
Grazie in anticipo per l'aiuto.

 vett e` un array (allocato dinamicamente) di puntatori,
Errore: vett e' un array allocato dinamicamente di *strutture node*. Per 
farlo un array di puntatori, dovresti avere (cito il tuo codice con le 
modifiche):
 > typedef NODE *NODEPTR;
typedef NODE **NODEPTR;
 >   vett = calloc(numnodi, sizeof(NODEPTR));
    vett = calloc(numnodi, sizeof(NODEPTR*));
Altrimenti, pensaci un attimo su:
- tipo di vett: struct node *
quindi:
- tipo di vett[qualcosa]: struct node
e quindi non posso assegnarci un puntatore, no?
Prendi tutto con le molle, non ho testato.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 vett e` un array (allocato dinamicamente) di puntatori,
array e` un puntatore a NODE,  che puo` essere usato come fosse un'array
di NODE. Tu  vuoi un  puntatore a  NODEPTR che  possa essere  usato come
array di NODEPTR. Ti manca un livello di indirezione ;)
Luca
-- 
Home: 
http://kronoz.cjb.net
Il coraggio non mi manca.
E` la paura che mi frega...

   NODEPTR vett;
NODEPTR *vett;
-- 
error: can't find .signature file 'a_punto_foco_presso_virgilio_punto_it'

Newsgroup: it.comp.lang.c
Titolo: Visual C - Modeless Dialog

Salve.
Visualizzo all'interno di una owner window, una modeless dialog con
CreateDialog, dunque creata con un dialog box template resource, e
posizionata con SetWindowPos in una data posizione. Fin qui tutto
ok. Vorrei pero' che questa dialog non potesse essere spostata
dall'utente, e dunque resti in quella posizione. Qualcuno sa dirmi
come ottenere questa impostazione ?
Grazie
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 come ottenere questa impostazione ?
Mi dispiace ma questa e' una domanda di programmazione windows (win32
API) e non di C.
Il fatto che tu stia chiamando le API in C non rende affatto il post in
topic.
Riposta la domanda sul ng di programmazione win32.
Tommaso
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: perchè mai non funziona???

Ci sono stata mezza giornata ... ho fatto le prove sulla carta e mi viene
dov'è che sbaglio?
Testo:
Lette in input due sequenze ordinate di numeri interi, memorizzarle in due
liste. Fondere le due liste in un'unica lista ordinata.
#include...
#include...
 struct nodo{
    int info;
    struct nodo *next;
};
struct nodo *leggi_lista(void) {
...... return(primo);
}
void stampa_lista(struct nodo *p) {
}
struct nodo *fusione(struct nodo *p, struct nodo *q) {
    struct nodo *r, *primo, *primo2=NULL;
    primo=p;
    while(p!=NULL && q!=NULL) {
        r=malloc(sizeof(struct nodo));
        if(p->info==q->info){
        r->info=p->info;
        p=p->next;
        q=q->next;
        }
        else{
        if(p->info<q->info) {
            r->info=p->info;
            p=p->next;
            }
        else {
            r->info =q->info;
            q=q->next;
            }
                }
        r->next=primo2;
        primo2=r;
    }
    p=primo;
    if(p==NULL) {
            while(q!=NULL){
            r->info=q->info;
            q=q->next;
            }
    primo2=r;
    }
    else{
            while(p!=NULL){
                r->info=p->info;
                p=p->next;
                }
            primo2=r;
            }
    return(primo2);
}
Newsgroup: it.comp.lang.c
Titolo: Assembly: Perché sostituirà C++/Java

L'informatica è un campo in rapida evoluzione. Quello che ieri era
all'avanguardia oggi è completamente obsoleto. Tecnologie sempre più
efficienti vengono sviluppate. Il floppy da 8 pollici ha aperto la
strata ad floppy da 3,5'' che è stato sostituito dal CD-R. Il modem
acustico eventualmente è stato sostituito dal modem DSL. Unix è stato
superato da Windows XP. E così via.
La stessa tecnologia si applica anche ai linguaggi di programmazione.
Il C ha aperto la strada al C++ che è stato superato dal C#. Comunque,
è venuto il tempo di un completo cambio di paradigma nella
programmazione. Propongo una migrazione di fatto verso un linguaggio
relativamente recente ma promettente, conosciuto come assembly.
La maggior parte di voi non è probabilmente familiare con questo
linguaggio. Io stesso mi sono imbattuto per caso in questo linguaggio
completando il mio MCSE. Allora consentitemi di dirvi qualcosa di più
su questo linguaggio.
C++ e Java non consentono al programmatore di accedere direttamente
all'hardware. Invece, compilano un "bytecode" che viene poi
interpretato da una macchina virtuale. Anche se molto portabili,
questo limita la velocità dei programmi C++ e Java.
L'Assembly, comunque, è stato progettato per consentire al
programmatore *l'accesso diretto* all'hardware! Questo consente
programmi *molto* più veloci.
Inoltre, l'assembly è lo stesso linguaggio "parlato" dai computers.
Per questo motivo, potreste vedere l'assembly riferito come "codice
macchina".
Temo che senza il supporto di una grande società (come Microsoft ha
spinto Java, o come Sun ha supportato C#) l'assembly rimarrà un
linguaggio di nicchia, come molti altri interessanti linguaggi (penso
a Python).
Perciò spero di iniziare un movimento di base per supportare
l'assembly. Mi piacerebbe vedere la FSF rilasciare un compilatore
assembly basato su GNU (anche se possono risparmiarsi i bugs che hanno
infestato la release 3.0 di gcc costringendo molti utenti a passare a
Visual Studio per la loro programmazione Linux).
Mi piacerebbe esporvi la superiorità dell'assembly sul C++/Java ma
sono in ritardo per la mia classe "Introduzione al TCP/IP". Quelli di
voi familiari con l'assembly, per favore educate i tanti utenti
ignoranti C/C++/Java sulla gloria di questo superiore linguaggio.

AHAHAHAHAHAHA... sei un grande, ti voglio bene...
Pero', dai, la potevi fare meglio, ti sei fatto scoprire quasi subito ;)
Newsgroup: it.comp.lang.c
Titolo: strano modo di comportarsi

Salve a tutti...
sono novizio di C e appena ho scritto questo programmino... succedono
cose strane. Mi spiego meglio:
Innanzi tutto uso Borland Turbo C 2.0 su WINXP Pro SP1.
Ho scritto il seguente programma:
#include <stdio.h>
#define pile 2
#define dischi 3
int sackh[dischi][pile]; /* stack */
int psack[pile];         /* puntatore nello stack della pila */
int xsack;               /* puntatore alla pila */
void printstack(void) {
   int i, j;
   for (i=dischi; i>=0; i--) {
      printf("%d)  ",i);
      for (j=0; j<=pile; j++) {
         printf("--%d--",sackh[i][j]);
      }
      printf("\n");
   }
}
main() {
   int i, j;
   sackh[2][0]=5;
   printstack();
}
quando viene eseguito provoca un risultato del genere:
3)  --0----0----0--
2)  --5----0----0--
1)  --0----0----5--
0)  --0----0----0--
nella matrice sackh ho modificato solo il valore contenuto nella
colonna 0 (prrima) riga 2. perchè mi ha modificato anche la colonna 2
riga 1? e se scrivo
   sackh[1][2]=4;
il risultato è che trovo il 4 al posto dei 5 contenuti nella
matrice...
sono pazzo io? che succede?
ho provato a non invocare la funzione printstack che mi sono creato e
a stampare con un semplice printf il contenuto degli elementi della
matrice sackh ma il risultato è uguale...
aiuto....
ho pensato perfino che il compilatore fosse troppo vecchio per girare
su win xp... possibile? trovatemi un compilatore free di pari portata
(ANSI C) che possa fare al caso mio.
Grazie a tutti.

...

Non vorrei sbagliare, ma a me sembra che tu abbia fatto un errore di
"imprecisione a 1" nella matrice sackh... se la matrice sackh è
definita come
int sackh[2][3] tu non puoi dare un valore 5 all'elemento sackh[2][0]
in quanto, visto che la dimensione delle righe è 2 tu puoi dare un
valore solo agli elementi sackh[0][*] e sackh[1][*]...  per lo stesso
motivo nei cicli for non puoi includere tutti i valori dallo 0 a
dischi: non rientrano della matrice!
Se ho scritto delle stupidaggini vi prego di essere corretto... anche
io sono alle prime esperienze con il C....
Ciao!

chiedo perdono... ho confuso le pile con i dischi.... ;-)
provo a trovare un'altra soluzione... ciao!


L'ubico errore che vedo è negli indici; tu definisci pile pari a 2 e dischi
pari a 3, pertanto la matrice sackh avrà 3 righe con indice di riga compreso
tra 0 e 2 e 2 colonne con indice di colonna compreso tra 0 e 1; pertanto
scrivendo i = dischi e j <= pile vai al di fuori della memoria riservata
alla matrice ed il programma, anzichè piantarsoi ti stampa un valore casuale
presente al momento in memoria.
Correggi gli indici estremi, inserendo
i = (dischi-1) e
j < pile
e vedrai che funzionerà. Ciao

no...no... hai ragione. Indipendentemente da pile e dischi ho
sbagliato gli indici e questo è l'unico errore.   Grazie 1000 per la
disposta.
ciao.


E' vero: ho cannato gli indici.
Grazie 1000.
Ciao

Newsgroup: it.comp.lang.c
Titolo: Funzioni e inizializzazione Variabili


 *  
http://www.jkcal.org/simon
 */
h/2+1&&h%g!=0;g++);if(g==h/2+1)printf("%i\n",h);}return 0;}


meglio la versione 3:
int miafunzione(int a, int b)
{
   static char str[] = "mia stringa";
   // funzione che utilizza la var str
}
allochi solo lo spazio necessario staticamente, niente memoria in piu' per
il pointer, niente ricopia dell'array, puoi usare sizeof( str ) per sapere
quanto e' lunga.
le versioni con i pointer assolutamente da scartare se vuoi ottimizzare la
velocita', visto che per l'uso obbliga ad un accesso indiretto in piu'.
(prima deve leggere il valore del pointer per sapere dov'e' la stringa)
ciao
donCiccio

}
Se non la devi piu' toccare io aggiungerei un const: cosi' permetti al
compilatore di ottimizzare ulteriormente.
Mox :)

Newsgroup: it.comp.lang.c
Titolo: Arrotondamento di un double

Dovrei arrotondare una variabile double che una cgi mi restituisce
il problema è che non so a priori se dovrò arrotondarla per eccesso o per
difetto, cioè se la variabile è 123.45 allora sarà 123
se la variabile è 123.56 allora sarà 124
La libreria Math.h contiene le funzioni Floor e Ceil ma non fanno questa
valutazione in automatico; non esiste una funzione che lo faccia in
automatico???
Ciao e grazie

 124
  La funzione rint() fa al caso tuo. Alternativamente, dato che non e`
detto che questa funzione sia presente nella tua libreria, puoi usare il
seguente metodo:
	double my_round(double a) { return floor(a+0.5) }
	Alla prossima,
		Marco

>double my_round(double a) { return floor(a+0.5) ;}
non sarebbe meglio
int my_round(double a){ return a+0.5;} ?

 int my_round(double a){ return a+0.5;} ?
Solo se a > -0.5. In caso contrario il risultato non sarà corretto.
Se non vuoi utilizzare floor() ed affidarti al troncamento per la
conversione da float a int, devi fare distinzione tra numero
positivo e negativo:
int my_round (double n)
{
 double k = (n >= 0) ? 0.5 : -0.5;
 return (int)(k + n);
}
    Aldo.

 ha scritto nel messaggio
news:efeW5.79564$DG3.1...@news2.giganews.com...

ok ma devi restituire int non double

Newsgroup: it.comp.lang.c
Titolo: Audio e ANSI C (OT?)

Ciao a tutti,
avrei la necessità di suonare un file audio (.wav) in un programma scritto
in C. Dal momento che la cosa sembra essere fortemente dipendente
dall'architettura del calcolatore, ho paura che non ci sia nessuna
funzione/libreria standard che mi possa aiutare. E' vero?
Se è così vi chiedo scusa per l'OT e... sapete mica a chi mi posso rivolgere
(NB. x DOS)?
Grazie Mille
Marco Coppo
University Of Sheffield

 funzione/libreria standard che mi possa aiutare. E' vero?
Proprio standard no, ma in rete non dovresti faticare a trovare librerie
varie. Il fatto che sia per DOS non aiuta, ma una volta con la SB venivano
anche forniti dei programmini che suonavano il file. A questo punto
basterebbe richiamarli da programma. C'era anche un kit di sviluppo, sempre
per SB, ma era a pagamento.
Ciao
--
Alessandro Monti

(NB. x DOS)?
Forse su it.comp.programmare.win32 ti sapranno dare una mano.
--
Andrea Laforgia
andrea_...@bigfoot.com

 (NB. x DOS)?
Non esiste un newsgroup per il DOS?
EMG



Newsgroup: it.comp.lang.c
Titolo: cerco funzioni per gestire la rete!!!

ciao a tutti!!!!
forse prima mi sono espresso male!!!io volevo sapere alcune funzioni del
c da studiare per gestire e dunque manipolare la rete!!!!se mi fate un
accenno di quali sono me le studio!!!!grazie della pazienza!!!!
magari se sapete anche qualche sito interessante su ste funzioni o roba
simile ve ne sarei grato se me lo passasse!!!
ciao e grazie ancora!!!!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 forse prima mi sono espresso male!!!
Forse non hai letto bene la risposta di Mox.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Dicono che  il cane sia  il miglior  amico dell'uomo. Secondo me  non e`
vero. Quanti dei vostri amici avete fatto castrare, recentemente?

Newsgroup: it.comp.lang.c
Titolo: Funzioni HASH

Salve c'è qualcuno che ha dei link da passarmi per scaricare materiale
relativo alle funzioni di HASH su tabelle e nn solo??
Grazie mille
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Salve c'č qualcuno che puo passarmi dei link dove posso trovare da
scaricare materiale sulle funzioni di HASH??
graziez


scusaet avete qualche link per scaricare materiale sulle funzioni di
HASH??
grazie


 grazie
www.google.com
 con parole chiave "hash function"
Risultato " ... circa 459,000. Durata della ricerca: 0.23 secondi"
Il terzo documento restituito e' "What is a hash function?", non e' troppo
difficile.
HTH
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

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

Qualcuno di voi mi sa dire se esiste un manuale in italiano il + completo 
possibile sul debugger GCC?
Grassie!
Andrea

 possibile sul debugger GCC?
Credo che non esista un manuale del genere per gdb...però google è tuo
amico :)
-- 
Rhymes (rhy...@NOSPAMmyself.com)
linux registered user #219707
linux registered machine #172395

 
ho cercato su google, e , a parte il manuale completo sul sito del GCC, non 
ho trovato niente di equivalente in italiano.
MI dovrò adattare alla versione in inglese .....
Ciao
Andrea
Newsgroup: it.comp.lang.c
Titolo: Compatibilita???Una parodia!!!

sono uno studente al primo anno di ingegneria e come area di progetto da 
presentare a gennaio ho da realizzare un programma per la gestione di uno 
studio medico, bene ho realizzato il progetto in windows xp con dev-c++ e 
con visual c/c++ 5.0, ora il problema è il seguente, il programma compialato 
in windows funziona benissimo, in linux compilato con kdevelop errori a non 
finire mi da errori anche sul metodo gets ho pensato che avevo sbagliato 
qualcosa è o compilato in linux con gcc stessi errori, in windows gcc nessun 
problema. da cosa può dipendere?!?!

 windows gcc nessun problema. da cosa può dipendere?!?!
sei nel ng sbagliato, quello giusto è it.comp.os.linux.development.
Comunque non dovresti mai usare gets:
"Never  use gets().  Because it is impossible to tell without knowing the
data in advance how many characters gets() will read, and because gets()
will continue to store  characters  past  the  end  of  the buffer,  it  is 
extremely dangerous to use.  It has been used to break computer security. 
Use fgets() instead."
Ciao
-- 
none

 ha scritto nel messaggio 
news:hNBBd.612043$35.25...@news4.tin.it...



con cosi' scarse informazioni e' difficile saperti dire dov'e' il 
problema :/
-- 
Mat/tia Belletti              - Graduate student @ 
cs.unibo.it
ICQ: 33292311                 - email: 
mbel...@cs.unibo.it
IRC: RedGlow                  - site(s): 
http://mbellett.web.cs.unibo.it/
Red...@jabber.linux.it/Gaim
  - Linux registered user 299762 @ machine 
213003
Newsgroup: it.comp.lang.c
Titolo: Come passare ad una funzione il puntatore di una matrice di N interi?

Come da oggetto. Mi serve solo sapere come scrivere correttamente la
corretta sintassi di questo tipo specifico di argomento passato ad una
funzione.
Ad esempio, ignorando completamente cosa viene scritto nel main(), la
seguente intestazione generica di una funzione può essere corretta?
void matrix (int *M)    <---- intestazione nel main: ometto
completamente le parentesi quadre
....
...*M[i][j]......... <---- uso di un puntatore alla matrice all'interno
del corpo di una funzione: qui metto le parentesi quadre ed all'interno
di esse uso delle variabili per l'offset.
Vorrei solo sapere se la sintassi è corretta, dato che non ho mai
incontrato un caso del genere.
Grazie.

 funzione.
http://c-faq.com/aryptr/ary2dfunc3.html
Ciao.

cane ha scritto:

Grazie per il link ma sono un neofita del linguaggio C e non ho ben
capito cosa leggere in maniera specifica della pagina che mi hai
consigliato. Mi basterebbe sapere se quello che ho scritto nel primo
post risulti valido sintatticamente per la scrittura. Sui siti dedicati
al c questa cosa non viene analizzata in maniera molto chiara.
Inoltre vi vorrei chiedere per curiosità se questa istruzione del c++
sia in qualche modo valida anche per il c (è ovviamente una parte di
codice di un programma di esempio trovato su un libro a scopo
didattico) e sapere per quale motivo non potrebbe essere un errore di
codice:
variabile_intera=matrice[riga][colonna];
Mi sembra strano che una variabile intera possa assumere il valore di
una matrice. Intende forse il valore complessivo di questa che si
ottiene moltiplicando riga x colonna (risultato 6)? o ricevere la
dimensione della matrice (che sarebbe 2)?

 dimensione della matrice (che sarebbe 2)?
Non è prerogativa esclusiva del c++, ed è semplicemente l'assegnamento 
del valore presente ad una data riga e ad una data colonna della matrice 
alla variabile intera.
Ciao.

cane ha scritto:

Grazie ancora cane per avermi risposto. Ora credo di aver capito tutto.
Sempre per quanto riguarda l'esempio che hai fatto sulla matrice
passata come puntatore ad una funzione ti vorrei fare adesso questa
domanda: nel caso non tutti gli elementi della matrice fossero stati
inizializzati nel main o, cioè, tutti gli "spazi" non fossero stati
riempiti, per N numeri si intende sempre il numero complessivo di
numeri "immessi" nella matrice o gli elementi totali che questa può
contenere?

 contenere?
Non saprei, quell'"N numeri" non ha un contesto definito.
Ciao.

Newsgroup: it.comp.lang.c
Titolo: _popen(..)

Qualcuno sa dirmi perchè una chiamata della funzione _popen(..) mi
restituisce sempre NULL??? (!!In un'applicazione a form x Win9x!!  ==>
altrimenti funziona!)
GRAZIE!
Steo

 altrimenti funziona!)
Mah.  L'ho usata tante volte con successo... che parametri gli passi?
Alex
Newsgroup: it.comp.lang.c
Titolo: loop infiniti e polling dell'input

Ho scritto un programma console che esegue un loop infinito:
for(;;)
{
...
}
come faccio ad interromperlo per sapere se l'utente ha inserito dell'input
da tastiera?
Non vorrei usare multithreading o cose simili; ho visto che esiste una
funzione kbhit() come utilizzarla allo scopo?
Grazie in anticipo
Pietro



puoi usare una select() controllando lo stdin
Ciao
matic

 ha scritto nel messaggio
news:pan.2002.09.02.13....@hotmail.com...

Cioč? Cosa č la select()?
Pietro

 Pietro
La documentazione dice
The select function determines the status of one or more sockets, waiting
if necessary, to perform synchronous I/O.
int select(
  int nfds,
  fd_set* readfds,
  fd_set* writefds,
  fd_set* exceptfds,
  const struct timeval* timeout
);
Sinceramente la select l'ho sempre vista abbinata alle socket e non ho idea
se la cosa funzioni anche per i file "normali".
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

"Nicola Rizzuti" <n.ri...@NOSPAMtin.it> ha scritto nel messaggio
news:3d726...@news.dada.it...

Ciao...
allora fai un loop del tipo
#define true 1
while( true )
{
....
// se preme il pulsante 'q' (ad esempio)
true = 0;
}

...

é semplice: kbhit è diversa da 0 quando è stato premuto un tasto 
for(;;)
{
   ..
   if(kbhit())
   {
      //qui controlli il valore con getch() e fai quello che devi fare
      if(getch()== QuelloCheVuoi)
         break;
      else
        continue;
 
   }
}
non mi ricordo quale .h vuole (mi sembra conio.h)
ciaociao
laura

 
io l'ho usata una volta per ovviare allo stesso problema di pietro (avevo
fatto una chat testuale)
Per rispondere a pietro:
<CODE>
..
fd_set rfds;
struct timeval tv;
int ret;
..
</CODE>
e all'interno del tuo ciclo infinito metti questo
<CODE>
..
FD_ZERO(&rfds);
FD_SET(fileno(stdin), &rfds);
tv.tv_sec = 0;
tv.tv_usec = 1000;
ret = select( 1, &rfds, NULL, NULL, &tv);
..
</CODE>
a questo punto, se ret > 0, significa che qualcuno ha premuto invio e ci
sono dati in input che puoi leggere semplicemente così
<CODE>
..
if( ret)
  scanf( "%^[\n]", mia_stringa_lunga_abbastanza);
</CODE>
Ciao
Matic



forse voleva sapere come captare il segnale "se preme il pulsante 'q'"

 forse voleva sapere come captare il segnale "se preme il pulsante 'q'"
credevo come fare il loop infinito e come uscire dal loop, pardon

 fatto una chat testuale)
Io ho provato (di pacca o quasi) il tuo codice sotto Windows: select
restituisce -1 e questo indica un errore. Sotto Windows il codice sembra
non funzionare.
<CODE>
char stdinInput[100];
fd_set rfds;
struct timeval tv;
int ret, lastErr;
while(1)
{
FD_ZERO(&rfds);
FD_SET(fileno(stdin), &rfds);
tv.tv_sec = 0;
tv.tv_usec = 1000;
ret = select( 1, &rfds, NULL, NULL, &tv);
if(ret < 0)
   lastErr = WSAGetLastError(); 
else
   scanf( "%^[\n]", stdinInput);
}
</CODE>
Se ho sbagliato qualcosa, sarei grato di sapere dove.

Newsgroup: it.comp.lang.c
Titolo: N-sima domanda basilare sul C

Salve a tutti,
sono un programmatore (o finto tale) di ANSI C. Utilizzo con molta
soddisfazione il MinGW come compilatore e ora vi spiego anche il perché.
La mia attività principale è scrivere plugin per LightWave e, tra i vari
compilatori utilizzabili, il MingW è risultato essere il più veloce ed
affidabile per i vari settaggi e il link con l'SDK di LightWave. Fino ad ora
ho scritto ben cinque plugin grazie all'aiuto proveniente da utenti sparsi
nel mondo tramite mIRC e tramite newsgroup su Yahoo.
Detto questo, passiamo alla domanda:
ho voglia di comprare un buon libro sul C a costo anche di donare quattro
litri di sangue (di mia nonna, ovviamente) !
Quale prendere ?
Cerco un libro che devo completare la mia (misera) conoscenza del
linguaggio, un libro che mi spieghi le varie istruzioni, i loro argomenti,
come ottimizzare il codice,... magari la possibilità di scrivere un codice
per piattaforma Win32... magari accedere ad un database... l'importante che
sia così esaustivo che non devo più rompere l'anima agli utenti come voi !!!
Ringrazio chiunque abbia letto questa preghiera e, soprattutto, ringrazio
chiunque mi responderà.
Buona programmazione,
Mkè

 per piattaforma Win32... magari accedere ad un database...
per le funzioni avanzate che vuoi fare tu meglio un linguaggio ad oggetti
tipo il c++ o il java
Ciao

 tipo il c++ o il java
Guarda, forse ho commesso un errore di quelli grossi, ma leggendo
velocemente un file in lingua inglese circa il C, si parlava di creare una
finestra sotto Windows. Ora sottolineo che l'ho letto molto velocemente, e,
anche se il titolo fosse "C ... e qualcosa", l'autore avrà saltato il ++,
comunque leggerò meglio e ti farò sapere. Poi per quello che concerne
applicazioni sotot Windows, utilizzo già Delphi ! In realtà, la mia
necessità era quella di creare finestra onfly che mi riportassero lo stato
delle variabili e della mia plugin in un punto specifico dell'esecuzione. Mi
è stato da poco riferito che LightWave mette a disposizione alcune
istruzioni per il trattamento delle finestre, testerò questo quanto prima,
prima di spaccarmi la testa testando la resistenza del monitor !
Ciao e ancora grazie,
Mkè

 ha scritto nel messaggio
news:1dcF9.1274$fa.5...@news1.tin.it...

Newsgroup: it.comp.lang.c
Titolo: [BASI DEL C] Dubbio...sul for...

Una domanda banalissima:
for (; i>0; i++) cosa significa??
Ciò che non mi convince è l'uso di quel punto e virgola singolo all'inizio.
Scusate la banalità....
Ciao a tutti e grazie. 

 Scusate la banalità....
Significa che non inizializza i, esegue il codice del ciclo SE i>0, e 
incrementa i.
Praticamente se i<=0 prima del ciclo, il ciclo non viene eseguito; 
altrimenti lo esegue finchè non diventa falsa la condizione "i>0". Ma 
credo che alla fine si verifichi un overflow...
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.


Si comporta praticamente come un ciclo While? Cioè la condizione è in testa.
Per non farlo andare in overflow quindi, dovrebbe diminuire i invece di 
incrementare in modo tale che prima o poi diventa minore di uno?
Sbaglio oppure ho capito?? 

 Si comporta praticamente come un ciclo While? 
Il for, in C, _鑏 un ciclo while.
for (<1>; <2>; <3>)
{
...
}
equivale a:
<1>
while (<2>) 
{
....
<3>
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

tranky wrote:

non e' detto che se non diminuisce debba andare in overflow.
per assurdo,
for(; i < 0; i++)
  i--;

  i--;
Questo codice, per i >= 0, crea un loop infinito :)
Saluti,
Marco

Marco Pallante wrote:

era un esempio, se il corpo del for modifica il valore di 'i' allora il
codice e' valido.
Newsgroup: it.comp.lang.c
Titolo: DIV GAME STUDIO

Ciao,
sto cercando programmatori con Div,per progetto di gioco RPG,che sto
gia' sviluppando da solo.
Se sei interessato....
Grazie1000,a tutti coloro che mi risponderanno.
--
----
CIAO.
----
            - May your jorney be safe -
                        ,,,
                       (0 0)
   +-------------oOO----(_)-------------------+
   |                  NICCOLO'                |
   |                    ~ø~                   |
   |                
nic...@sis.it
            |
   +-------------------------oOO--------------+
                       || ||
                      ooO Ooo

Ciao..io ho comprato il pacchetto DIV, ma per quanto riguarda la grafica
sono una schiappa.
In compenso so usare il codice.
Fammi sapere. 
Ciao
--
         _____________________________________________
        |\                               Int17 PC    /|
        | \-----------------------------------------/ | 
        | | Per ogni passo strisciato, stanco       | |
        | | e nel frattempo tutto il resto          | |
        | | e' fretta, e la scelta e' o resti       | |
        | | o corri per davvero.                    | |
        | | C'e' chi corre e chi fa correre         | |
        | | e c'e' chi non lo sa                    | |
        | | io so solo che, io so solo che          | | 
        | | quando tocca a te, TOCCA A TE.          | | 
        | |                           (L. Ligabue)  | | 
        | /-----------------------------------------\ |
        |/___________________________________________\|
        /                                             \
       / #######################     ##     ######     \            
      / ########################   ######   #######     \---------E  
     /___________________________________________________\            
     |                                                   |
      ---------------------------------------------------

...

Salve, potete spiegarmi cosè sto pacchetto?
sono molto interessato alla creazione di giochi conosco il c/c++ .
Spero di ricevere tante infomazioni in merito grazie.
Newsgroup: it.comp.lang.c
Titolo: Problemino matrice...

Ciao a tutti,
scusate innanzitutto la banalità della domanda, ma sono abbastanza
bloccato...
Devo fare una matrice, con le relative operazioni di somma di colonne, o
sottrazione, o roba del genere...e questo non è un grande problema.
Il problema è che sono abiutato a definire le righe e le colonne con ad
esempio
#define rig 4
#define col 4
main....
Però vorrei che il programma, all'inizio, mi permettesse di scegliere le
dimensioni della matrice a mio piacimento, fissando una grandezza massima
per le righe e le colonne (ad esempio grandezza max 10x10, io ne scelgo una
4x5).
Ho provato in vari modi, ma forse modifico troppe cose. Mi potreste dire
come fare, giusto per capire il procedimento?.
Grazie per le risposte,
ciao!.

 ha scritto nel messaggio
news:4oeeb.142$Sf....@twister1.libero.it...

Dipende.
Hai due possiblità. La migliore è l'allocazione dinamica (cosa che credo
esuli dai tuoi scopi e dalla tue conoscenze attuali), oppure dichiari una
matrice sovrabbondante, poi chiedi il numero di righe e colonne e le
memorizzi in due variabili.

 una 4x5).
Il modo più semplice è usando l'allocazione dinamica.
Puoi usare due strade:
1) Questa è più lenta e meno efficente perchè richiede più volte
l'intervento del SO ma è più facile utilizzare la matrice dopo nei calcoli
es.:
   int **buffer;
   int n; //numero righe
   int m; //numero colonne
   //Acquisisci n e m
   *buffer = (int**)malloc(n*sizeof(int*));
   for(int i=0; i<m; i++)
      buffer[i] = (int *)malloc(m*sizeof(int));
   //Ecco la matrice pronta
2)E' più efficente in quanto chiede l'intervento del SO una sola volta ma il
codice diventa meno leggibile
es.:
   int *buffer;
   int n; //numero righe
   int m; //numero colonne
   //Acquisisci n e m
   buffer = (int)malloc((n*m)*sizeof(int));
   //Ecco la matrice pronta
   //Un elemento della matrice buffer(i,j) si referzia con buffer[(i*n)+j]

Ciao,
ti ringrazio molto, ma con l'allocazione dinamica non ce la faccio...
Mi potresti dire come fare allocando staticamente?.
Grazie anticipatamente,
ciao!.


Ho risolto,
grazie a tutti.
Newsgroup: it.comp.lang.c
Titolo: [OT?] Generatore di pseudocasuali: l'analisi

Se ho un generatore di pseudo casuale di cui voler fare un'analisi anche
approssimativa che ampiezza deve avere il campione?
Mi spiego meglio, se ci riesco.
Ho un generatore che genera (:-)) pseudocasuali tra 1 e 2^31. Volendo fare
una analisi su come sono distribuiti i numeri generati, quanto deve essere
ampio il campione per essere statisticamente valido? 100, 1000. 10000
numeri?
Grazie
Inoltre, la sequenza di pseudocasuale dipende ovviamente da un seed
iniziale. Devo lanciare più sequenza con seed diversi o si può dedurre
qualcosa di utile con un solo "lancio" del generatore?
Se devo fare più di un "lancio", quanti ne devo fare? Come scelgo i seed?
Infine, avuta la sequenza di numeri generati in excel si può fare uno studio
statistico come la distribuzione? Avete qualche link da cui posso leggere
qualcosa?
Grazie

Non è difficile ciò che chiedi ma è proprio il posto sbagliato... prova su 
it.qualcosa.stat o it.qualcosa.prob o it.qualcosa.math... ciao 

 anche approssimativa che ampiezza deve avere il campione?
Continuiamo su it.comp.sicurezza.crittografia.
Cristiano


	di niente, rz
-- 
http://mrzac.altervista.org
Newsgroup: it.comp.lang.c
Titolo: Dev-C++

Salve a tutti.
Ho installato Dev-C++ e ho scritto una DLL per Win.
Ora... prima di usare Dev-C++ usavo MSVC++ e lo stesso identico codice 
per mia fortuna ha funzionato correttamente su entrambi i compilatori, 
fatta eccezione per gli extern "C" che usavo sul MSVC++.
Ora... c'è un problema riguardo la dimensione dei file compilati.
La dll venuta fuori da Dev-C++ è di 91 e passa kb, quella fatta da 
MSVC++ era di 28k.
Come mai questo incremento?
Ho letto qualcosa qui:
http://www.ecomstation.it/pido2/home/mircomir/gcc3.html
nella sezione "Suggerimenti tecnici" a fondo pagina, dato che si parla 
di GCC.
Ho applicato i parametri della riga di comando alle opzioni del mio 
progetto, sia nella sezione del compilatore che in quella del linker 
(ovviamente una per volta, non insieme) ma l'output è sempre di 91,9 kb.
Cosa posso fare? E' normale?
Thx in anticipo e scusate se dovessi essere stato OT.
-- 
Nella vita una sola cosa è certa: se la storia ci ha insegnato qualcosa, 
è che si può uccidere chiunque.
(Michael Corleone)
Posted from X-Privat Free NNTP server - 
www.x-privat.org

 Cosa posso fare? E' normale?
Cosa ti interessa se la dll e' 28k o 91 o anche 250 ?!?
Stai programmando per windows, quindi suppongi sia un computer diciamo con
almeno 32MB e ... 10G di h-disk....
allora cosa cambia 28k o 91k ?
Io fossi in te mi preocuperei solo delle prestazioni e non delle dimensioni.
Detto questo ad esempio con il VC++ puoi settare l'optimiser per preferire
il codice veloce o il codice piccolo.... immagino la stessa cosa sia
possibile anche con altri compilatori...
Ok, ovviamente vc++, gcc, dev, dll, windows etc... sono tutte cose OT,
meglio che tu ti rivolga ad un NG di programmazione per win32.
Tommy
P.S. spero di essere stato comprensibile, sono stanco e ragiono poco....

 Cosa posso fare? E' normale?
per ridurre le dimensioni prova a togliere tutte le informazioni di 
debug e fai qualche prova con i vari livelli di ottimizzazione: se usi 
gcc i vari flag f (unroll-loops, omit-frame-pointer ecc.) possono 
cambiare i risultati

Newsgroup: it.comp.lang.c
Titolo: Descrizione funzioni

Ciao, sono nuovo del C e vorrei sapere dove posso trovare un riferimento
online alle funzioni come scanf, printf, getchar, putchar ... etc. etc.

 wrote in message
news:lF7r6.50340$lj4.1...@news6.giganews.com...


Server Galactica del cazzo scusa riposti la risposta ??


Puoi trovare delle informazioni su:
http://www.delorie.com/djgpp/doc/libc-2.02/
trovi le descrizioni di tutte le funzioni standard e anche quelle delle
librerie non standard del DJGPP
Newsgroup: it.comp.lang.c
Titolo: Lettura da file.

Salve a tutto il NSG.
Mi servirebbe una piccola mano, per la lettura di un file di txt, che
contiene dei valori interi. Dopo averlo aperto in modalita' lettura, come
faccio a far posizionare il puntatore riga per riga, partendo dalla prima?
Esempio:
Ammettiamo che il puntatore sia:
{
FILE *Pointer_file;
int *valori;
   if((Pointer_file=fopen("nome file.ext","r"))==NULL){
   fprintf(stderr,"Errore in lettura"); exit(-1); }
/* Alloco valori */
fscanf(Pointer_file,"%d",valori);  /* legge solo una riga!  e le altre?*/
fclose(Pointer_file); free(valori);
}
Grazie


Per leggere l'intero file occorre inserire fscanf in un ciclo che si
arresta
a fine file (EOF restituito da fscanf);.
Nel tuo programma non è definita la variabile che riceve di dati, ma
solo il
suo puntatore _NON INIZIALIZZATO_ cosa che può produrre risultati
imprevedibili.
Prova il codice seguente:
#include <stdio.h>   /* per fopen, fscanf,fprintf */
#include <stdlib.h>  /* per exit */
int main()
{
FILE *Pointer_file;
int cont;                  /* contatore records input */
int input;                 /* variabile che riceve i dati input */
int *valori = &input;      /* puntatore alla variabile input */
   if((Pointer_file=fopen("interi.txt","r"))==NULL){
   fprintf(stderr,"Errore in lettura"); exit(-1); }
/* Alloco valori */
for (cont=0; ;++cont) /* Ciclo di lettura senza fine */
{
   if (fscanf(Pointer_file,"%d",valori) == EOF) break;
   else fprintf(stderr,"Record: %5d - Valore %5d\n",cont,input);
}
fprintf(stderr,"\nFine Lettura - records input: %5d\n",cont);
fclose(Pointer_file); free(valori);
return(0);
}
Spero ti sia di aiuto.
gfb

 free(valori);
Questo è sbagliato e inutile.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)
Newsgroup: it.comp.lang.c
Titolo: Aiuto!!!...

Salve, qualcuno cortesemente, può aiutarmi a risolvere
questo problemino?(per me grande).Sono alle prime armi
e spero d'imparare qualcosa....
Ho un file di testo cosi' composto:
  typedef struct
  {
    char dati[100];        /*50 numeri di due caratteri*/
    char num_rec[4];    /*contatore di record*/
    char fine_rec[2];     /* 0D,0A*/
   } OLD_ARCHIVIO;
esempio: 1225269000151808..............1
               0710596578874554........6789
Vorrei trasformare OLD_ARCHIVIO in un file cosi composto:
typedef struct
  {
    char dati[50];          /*50 caratteri ascii*/
    char num_rec[4];    /*contatore di record*/
    char fine_rec[2];     /* 0D,0A*/
   } NEW_ARCHIVIO;
esempio:  /2civc-{(<DJ\ax}é............4582
Praticamente leggendo da OLD_ARCHIVIO.dati deve
scrivere nel nuovo file , per ogni numero di due caratteri,
il carattere ascii corrispondente + 40
esempio: 00 == (  ALT40
     "        01 == )  ALT41
              90 == é ALT130
Creato il nuovo file NEW_ARCHIVIO, devo confrontarlo con un
altro file con la stessa struttura,al fine di verificare se ci sono
diversità nei dati.
Qualora il programma incontrasse delle diversità, dovrebbe
scrivere in un file, ad esempio differenze.txt
-numero record
-posizione del carattere
-valore del carattere nel primo file
-valore del carattere nel file confrontato
Spero di essere stato chiaro....
Ringrazio anticipatamente chi volesse aiutarmi,
inviandomi un listato adatto allo scopo.
Sinceri saluti
Giacinto

inviandomi un listato adatto allo scopo.
Ciao,
non posso inviarti un codice gia' scritto, altrimenti non ti darei
modo di imparare (eh eh).
In ogni caso se dai uno sguardo alla funzione "fscanf()" forse ne puoi
trarre qualche vantaggio.
Andrea Laforgia

...


il carattere ascii corrispondente + 40
una soluzione potrebbe essere:
#include <stdlib.h>
char converti(const char* due_cifre) {
   // due_cifre punta al primo di due char consecutivi
   // non necessariamente terminati da \0
   char buf[3] = {due_cifre[0], due_cifre[1], 0};
   return atoi(buf)+40;
}
il resto è normale routine di lettura / scrittura di files
TobiX

...

Newsgroup: it.comp.lang.c
Titolo: Concatenare #define

Salve,
sto usando un compilatore ANSI C per microcontrollore. Vorrei definire
(mediante #define) la porta (da 0 a 7) e il bit della porta (da 0 a 7)
che hanno un certo scopo.
Per esempio (porta numero 3, bit della porta numero 4):
#define PORT 3
#define BIT  4
A questo punto mi serve il simbolo PDR3_P34, cioé vorrei creare
#define REGISTER PDR(PORT)_P(PORT)(BIT)
Ovviamente dovrei concatenare alcune stringhe fisse (PDR e _P) a simboli
già dichiarati con #define.
E' possibile?

 E' possibile?
si, si usa questa sintassi
#define REGISTER PDR##PORT_P##PORT##BIT

 #define REGISTER PDR##PORT_P##PORT##BIT
Non vengono espanse le macro PORT e BIT...
Una soluzione parziale e` questa:
#define REGISTER(port, bit) PRD ##port ##_P ##port ##bit
Occhio che  gli argomenti  *non* devono  essere macro,  altrimenti viene
concatenato  il  nome  senza   effettuare  l'espansione...  per  forzare
l'espansione  dovresti  usare  le  parentesi  e  anche  loro  verrebbero
concatenate.
Kronos
-- 
Home: 
http://kronoz.cjb.net
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani
Newsgroup: it.comp.lang.c
Titolo: utilizzo della scanf

vorrei un aiuto su come implementare la funzione scanf e quale file
header chiamare Grazie

 header chiamare Grazie
  La scanf legge i dati numerici inseriti da tastiera .
scanf("&d",&variabile numerica);
la puoi utilizzare anche con piu' input
scanf("%d","&f", &var1 , &var2);
Ciao

   La scanf legge i dati numerici inseriti da tastiera .
Legge anche stringhe e caratteri.
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it

 header chiamare
L'header da chiamare e quello standard (stdio.h).
La sintassi è scanf("%s",&var)..in questo caso l'input che si aspetta è un
array di caratteri che verrà posto nella var definita.
NoBoDy

 header chiamare Grazie
Sorry, ma non capisco bene.
Suppongo tu voglia dire che non sai come usare la scanf in un tuo
programma.
(L'ipotesi che tu voglia implementare la funzione di libreria mi sembra
meno probabile)
A parte che ti dovrei rispondere RTFM (=leggi la ... documentazione)
scanf fornisce input formattato, cioč:
scanf ("stringa_di_formato", argomenti in numero variabile)
legge da stdin quello che viene e vede di aggiustarlo negli argomenti
che le hai passato.
La stringa di formato č scritta come per printf
int n1, n2;
scanf (">>%d/t%d/n", n1, n2);
si aspetta di leggere prima i 2 caratteri >> poi subito un int e lo
mette in n1 poi un tabulatore e quindi un altro int eppoi il newline.
Se qualcosa va storto lo vedi dal valore di ritorno, che corrisponde al
numero di variabilil assegnate.
ciao, oops

 mette in n1 poi un tabulatore e quindi un altro int eppoi il newline.
Non proprio. Uno 'whitespace' nella stringa di formato fa sì che nella 
ricerca del match successivo sia letto e scartato qualsiasi 'whitespace' 
incontrato.
Nota che alcune specifiche di conversione, tra cui '%d', scartano già 
eventuali 'whitespace' incontrati prima della conversione.
Per cui il tutto si può scrivere come
     scanf(">>%d%d", &n1, &n2);
Ovviamente, se fosse inserita (p. es.) in un ciclo, bisognerebbe tenere
in considerazione eventuali 'whitespace' (come il '\n') che precedano i 
caratteri '>', e scrivere qualcosa tipo:
     scanf(" >>%d%d", &n1, &n2);
Ciao ciao,
Andrea 
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

La stringa di formato č scritta come per printf
Non esattamente.
Ci sono differenze sugli specificatori di formato nel caso dei
floating point.
Per i float e i double con printf() si puo' usare indifferentemente %f
(a causa delle promozioni sui tipi), mentre con scanf() e' necessario
usare %f per i float e %lf per i double.

Ringrazio per le puntuali precisazioni. Sicuramente non avrei mai avuto
la pazienza di fissarmele nella memoria, ma in questo modo credo che non
le dimenticherò.
ciao, oops.

 usare %f per i float e %lf per i double.
Sapevo che a dire che era come per printf mi avreste corretto, ho corso
il rischio perchè volevo dare una risposta semplice, facile da leggere.
Comunque grazie per la correzione, trovo che questo sia un metodo ottimo
per mandare le cose in memoria permanente.
ciao, oops.