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

Ciao,
io ho un array di 62 elementi (0...61) che contiene i seguenti
valori in ordine: (0...9, a...z, A...Z)... Io ho bisogno di una
funzione che mi estrapoli, passata una certa lettera, la
corripondente posizione nell'array.
Ad esempio, se io le passo 'c', mi restituirà 13....
Avevo pensato ad una ricerca binaria, per evitare di dover scorrere
ogni volta tutto l'array... oppure esiste una soluzione più veloce
rispetto all'array? A me serve solo una corrispondenza univoca di
un numero ad ogni lettera, nello stesso ordine che vi ho citato
prima...
Grazie

 corripondente posizione nell'array.
(come fai una ricerca ordinata binaria, visto che vale 'A' < 'a' ?-)
date le caratteristiche dell'array, lo puoi fare in tempo costante, con 
tre if...
int pos_in_array(unsigned char c){
    if ((c >= '0') && ( c <= '9')) {
         return (int)(c - '0');
    } else
    if ((c >= 'a') && ( c <= 'z')) {
         return 10 + (int)(c - 'a');
    } else
    if ((c >= 'A') && ( c <= 'Z')) {
         return 36 + (int)(c - 'A');
    } 
    /* non trovato */
    return -1;
}
se usi invece mainframe IBM con codifica EBCDIC, dovresti guardarti la 
tabella caratteri e scomporre in piu' segmenti i check.

 ha scritto nel messaggio
news:10559286....@tin.it...
cut...

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

Dove trovo dei sorgenti di drivers di periferiche USB sotto Visual C!
grazie anticipatamente...

 
Nel DDK di windows 2000. Lo trovi sul sito 
www.microsoft.com/ddk
Ciao
-- 
Pietro F. Maggi                             pietromaggi AT libero DOT it
http://pietromaggi.50megs.com/
 
La pedina è il pezzo più importante degli scacchi...per la pedina
Newsgroup: it.comp.lang.c
Titolo: [SIOW - MAC]Pulisci la finestra

Salve chi mi da una mano x favore?
il mio problema:
all'uni. programmo in C su PC ed uso lcc come compilatore e quando devo
pulire la finestra del prog. basta chiamare clrscr() che e' nella
stdlib.h.. e fin qua tutt' ok! ma a casa faccio C con Mac ed uso il
compilatore Mrc che e' contenuto in MPW della Apple ... ma non sono
riuscito a trovare una funzione analoga in qke libreria x il Mac ..!
ma esiste? e se no come faccio ??
grazie a chiunque mi rispondera' :)
alex

 ma esiste? e se no come faccio ??
   Il problema e` che clrscr() non appartiene alla libreria standard, 
sebbene tu possa aver trovato il suo prototipo in stdlib.h, sicche` non 
e` portabile altrove che sulla tua piattaforma, in questo caso lcc.
   Per il MacOS X, l'unico che abbia una shell testuale, tuttavia, e` 
disponibile la libreria NCurses, distribuita con il sistema operativo, 
che puo` darti molte soddisfazioni. Prova a dare il comando
	$ man curses
da shell e leggi bene cio` che ti dice.
-- 
Alla prossima,
Marco

Cioe' mi vuoi dire ke dato ke ho OS 8.1 non posso far nulla ?!... ma nn
capisco una cosa la Shell di MPW che ho io e' testuale e anche i prog.
compilati mi danno una finestra testuale (dato che li compilo come SIOW
(simpleInputOutputSystem)..!? 
mi sembra quasi impossibile che non esista una funzione che mi pulisca
la finestra dell'applicazione testuale?!?! (non Importa se non e'
compatibile con l' lcc)
 grazie lo stesso :)


 compatibile con l' lcc)
 
http://cscene.org/CS5/CS5-04.html
-- 
Alla prossima,
Marco

compatibile con l' lcc)
Se hai la shell certamente esiste un modo per lavorare a basso livello
sul terminale, quindi tanto per fare alcuni esempi:
- posizionare il cursore in una posizione a piacere
- "cancellare" lo schermo.
Il problema e' che non e' assolutamente portabile o standard, devi
guardare cosa e' previsto dal Mac OS per fare quello che vuoi (dal X
in poi hai direttamente le (n)curses).
Se il terminale e' standard ANSI puoi usare le sequenza ANSI per
ottenere l'effetto voluto, altrimenti devi cercare qualche libreria
per Mac che ti fornisca un'astrazione per la gestione del terminale.
-- 
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."

On Sun, 7 Jul 2002 13:38:08 +0100, 
Chu...@kakatamail.com
 (Alex) wrote:
c'č una funzione ANSI [system(char *)] che ti permette di richiamare
le funzioni del sistema operativo.
Dovresti vedere se nella shell c'č un comando per ripulire lo
schermo..
Prova cls o clrscr....
Se c'č usalo con system()..
NM
Newsgroup: it.comp.lang.c
Titolo: Calcolare espressione con numero a 64 bit

Ciao a tutti,
qualcuno ha una vaga idea di come possa fare per calcolare la seguente
espressione in C?
    x^3 = ((2^64)-1)
        ovvero
    x = RadiceCubicaDi((2^64)-1)
io ho un normale PC a 32 bit e uso GNU/Linux.
So che la mia architettura non consente di lavorare su numeri a 64 bit, ma
mi è stato consigliato di provare a usare i "long long". Per la radice
cubica ho usato la funzione "cbrt()" della libreria "math.h", ma alla fine
l'unico risultato che ottengo è sempre e solo 0 (anzi, se uso proprio
"2^64" il compilatore mi comunica che si è presentato un overflow).
Come faccio a calcolarlo?
Ho provato anche a calcolarlo a mente ma mi sono arenato... :-(
E inoltre, qualcuno potrebbe gentilmente scrivermi il risultato se riesce
a calcolarlo?
Sono comunque intenzionato a capire come si fa! :-)
Grazie e un saluto a tutti!
-- 
      ______________
(*)--[::::::::::::::]--(*)
(*)--[>::d1s4st3r::<]--(*)
(*)--[::::::::::::::]--(*)
(*)--[::wonder'ing::]--(*)
(*)--[::what's::::::]--(*)
(*)--[::^happening::]--(*)
(*)--[::|^::::::::::]--(*)
(*)--[__||__________]--(*)
 |......................|
http://xoomer.virgilio.it/
 +------> mental_insomnia/
(*) <-------------------+

 "2^64" il compilatore mi comunica che si è presentato un overflow).
L'overflow ovviamente te lo da sugli interi. In che modo
hai "inserito" nel programma il numero 2^64 ??
Per rappresentare esattamente 2^64 ovviamente hai bisogno di 65 bit...
non puoi farlo con i long long che ne tengono max 64 (quando sono 
unsigned...) e quindi possono rappresentare al massimo 2^64-1.
Se vuoi calcolare la radice basta che usi i double e un minimo
di matematica.
Radice cubica di 2^64 = (2^64)^(1/3) = 2^(64/3) = pow(2,64/3.0)
(pow e' una funzione in math.h che calcola le potenze con base ed 
esponente double. Nota anche che scrivere 64/3.0 invece
di 64/3 non e' un mio sfizio: in C se scrivo 64/3 ottengo 21 come
risultato, mentre se scrivo 64/3.0 ottengo 21.333333333333...)
alternativamente, avresti potuto
anche osservare che 2^64 = 2^63*2.
Quindi la radice cuba di 2^64 e' uguale a alla radice cuba di 2^63,
ovvero 2^21 = 2097152 moltiplicata per la radice cuba di 2,
che vale circa 1.25992104989487316476721061,
quindi (1<<21)*pow(2,1/3.0)
Concludendo la radice di 2^64 vale circa
2642245.949629133047237885259474751141855104
ciao,
g.

Newsgroup: it.comp.lang.c
Titolo: [REQ] Come gestisco l'input da tastiera in C?

Come da oggetto, quali funzioni
mi servono (e quali librerie) per gestire
l'input da tastiera in un programma C?
grazie
--
--
,Blob{..DX21..}
visitate il mio sito:
http://xoomer.virgilio.it/blob.dx21/
----
"The voice is still clear in my head;
it's the last word in monologue....
close-up, interior, night."
Peter Hammill - Incoherence [2004]

 ha scritto nel messaggio 
news:446b256a$0$36924$4faf...@reader3.news.tin.it...

Ciao,
le funzioni sono diverse, secondo quello che devi leggere, qualche esempio:
scanf, getc, gets...
ciao
Brunix 

 l'input da tastiera in un programma C?
stdio.h penso sia sufficiente
Newsgroup: it.comp.lang.c
Titolo: leggere l'ultima cifra da un intero

Salve,
sono un newbie in C....
avendo una variabile int, come posso
leggere la cifra meno significativa del numero ?
(Es. da 5653 vorrei catturare il 3 (scusate l'esempio)).
Grazie infinite.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 (Es. da 5653 vorrei catturare il 3 (scusate l'esempio)).
ultima_cifra_decimal        = numero%10;
penultima_cifra_decimal     = numero/10%10;
antepenultima_cifra_decimal = numero/100%10;
-- 
Horst

 (Es. da 5653 vorrei catturare il 3 (scusate l'esempio)).
Forse e' un metodo stupido e poco elegante pero' potrebbe funzionare:
Trasformi l'intero in stringa e prendi l'ultimo carattere in questo modo non
importa il numero di cifre.
-- 
~~~~Slaine Mc Roth~~~~
**Linux User# 312607**
"Ho preso cosi' tante medicine, che ogni volta che tossisco guarisco
qualcuno."
                -- Da it.hobby.umorismo

Newsgroup: it.comp.lang.c
Titolo: esame fra 15 giorni arrrggggghhhhhh!!!!!!!!!!!! che cazzo fare?????

cosa mi consigliate'????
che cosa chiedono di solito all'esame....?(al poli di milano..)
libri , ne ho un pacco, ma esiste un BIGINO come si deve????
Help: puntatori in generale..., liste ,code ,alberi.... chi + ne ha + ne
metta, ah , ah ,ah...
chiedo un disperato aiuto!!!!!!!!!!!
bye
Luke

chiedo un disperato aiuto!!!!!!!!!!!
Lascia perdere e riprova al prossimo semestre (scusa se sono brusco,
ma non ce la puoi fare, a meno che non sia l'unico esame che devi
preparare).
--
(o-  T | Unix is simple and coherent , but it takes a genius  to understand
//\  U | and appreciate  its simplicity .
V_/_ X |                                    Dennis Ritchie .
email: r.salmaso (at) 
flashnet.it
 | salmaso.raffaele (at) 
iname.com
Newsgroup: it.comp.lang.c
Titolo: Catteristiche compilatori

Ciao a tutti!
Innanzitutto grazie a coloro che mi hanno delucidato sulla questione del
"game developing" :)
Ho dato uno sguardo sul web sui vari documenti  a riguardo e aimč ho dovuto
constatare che la strada da fare e lunghissima!!!
....in attesa delle FAQ (se serve, posso aiutare nella traduzione) ecco
alcune domande da principiante:
1) Essendo un programmatore in erba sto provando alcuni compilatori per
vedere quale risponde meglio alle mie necessitą. In particolare MS Visual
c++ , Borland c++ Builder e DJGPP. Sono sorti alcuni problemi. Come č
possibile utilizzare le funzioni dei file include di borland sul compilatore
M$? per esempio nel file <conio.h> di borland ci sono alcune funzioni come
clrscr(), textcolor().... che mancano nello stesso file del visual c++.
Esiste un modo per usare quelle funzioni ne Visual c++??
2) Compilando nel borland un semplice programma di questo tipo:
#include <stdio.h>
void main(void) {
 printf("Ciao ");
    func();
}
    func() {
 printf("ciao!\n");
}
esso viene compilato ma durante l'esecuzione i comandi all'intero della
funzione chiamata non vengono eseguiti. Questo non succede nel visual c++.
Che bisogna fare per chiamare correttamente le funzioni col borland?
Grazie in anticipo -- Federico Colla
------------------------------------------------------------------
You Can Also Contact Me On ICQ:  (UIN) 13999745

Che bisogna fare per chiamare correttamente le funzioni col borland?
Partendo dal principio che "void main()" non e' corretto (inoltre non
e' standard) anche se il BC++ lo compila, sei sicuro di non aver
chiamato la funzione come "func;" e non "func();" ?
Prova a dichiarare la funzione prima del main con un prototipo del
tipo :
void func ( void ) ;
Il DJGPP, comunque, compila il codice senza problemi.

> Il DJGPP, comunque, compila il codice senza problemi.
Grazie dei consigli. Ho lasciato perdere sia M$ che Borland e sto usando
solo il DJGPP che si è dimostrato molto affidabile.
Ciao
Federico
Newsgroup: it.comp.lang.c
Titolo: progetto di sicurezza in c

Salve a tutti, volevo sapere dove trovare della documentazione
(possibilmente in italiano ma non č indispensabile) di c su i seguenti
argomenti: NIDS (libnids o altre se ci sono), demone syslog,
filesystem.
Forse non sono stato chiaro nelle richieste ma il fatto č che devo
scegliere un argomento non troppo difficile (ma neanche troppo facile)
per un esame di sicurezza informatica senza avere una lista di
progetti dalla quare prenderne uno.
Le cose che ho scritto sopra sono il frutto di una mail di un mio
collega piů competente, mentre io sono solo a livello teorico.

 filesystem.
http://www.ibiblio.org/pub/Linux/docs/HOWTO/Filesystems-HOWTO
In ogni caso su "Appunti di informatica libera" trovi informazioni
di ogni genere sparsi su oltre 4300 pagine tutte in italiano.
ftp://a2.swlibero.org/a2/
Sono 26 mega di pdf. Spero tu abbia una linea molto veloce.
C:\>iao Angelo
P.S. In ogni caso qui sei OT
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Newsgroup: it.comp.lang.c
Titolo: oltre la "programmazione automatica"

Ho bisogno di un aiuto da chi ci capisce qualcosa in piu' di me (ci vuole
poco !!!).
Ho un programma tipo "Cool Edit" e ho bisogno di farlo partire in automatico
con la registrazione.
Con la sola "esecuzione automatica" di windows, questa mi apre l' eseguibile
ma poi si ferma li',invece ho bisogno che sempre in automatico mi faccia una
serie di operazioni tipo ALT F + ALT N + RETURN.
Se fosse stato un programma tipo Word potevo fare una macro ma con questo
programma penso che non lo possa fare.
C'e' qualche sistema tipo (tiro a caso ...) un programmino in C oppure
qualche programma gia' bell'e fatto?
Premetto che pero' sulla programmazione so a malapena qualcosa di basic
(piccoli programmi ai tempi del C 64).
Ringrazio fin d' ora a chi mi da' una mano o mi dia una qualche informazione
utile.



 (piccoli programmi ai tempi del C 64).
E tu volevi fare un Macro?
------------------------------------------------
IL RAZZIATORE
EMAIL: 
razzi...@usa.net
WEB:   
http://www.geocities.com/il_razziatore/
ICQ:   67552596
--------------------------------------------------
Newsgroup: it.comp.lang.c
Titolo: Come usare i socket per comunicare con POST a pagine PHP?

Ciao a tutti.
Ho la necessità di inviare dati ad una pagina PHP pronta a ricevere dati 
tramite POST scrivendo un software in C.
 
Il software in questione dovrebbe:
1) Autenticare l'utente (invio di user e password tramite POST e inizio di 	
		una sessione)
2) Inviare dati testuali ad una pagina PHP
3) Inviare dati binari ad una pagina PHP
 
Come posso procedere per lo sviluppo?
 
Ho letto che bisogna utilizzare i socket, ma non ho trovato una guida online 
che soddisfi bene tutti i miei dubbi, principalmente di come impostare il 
programma client (in C).
Premetto che sono ai primi passi con C, al momento il programma più avanzato 
sviluppato in C è un semplice risolutore guidato di problemi di geometria 
piana!
 
Grazie mille ;-)
-- 
GNU/Linux & Free Software.
 
http://matrobriva.altervista.org
 

 risolutore guidato di problemi di geometria piana!
 
 
non ho capito se sei ai primi passi col C ma sui sockets
sei un manico oppure se sei all'inizio in tutto. In questo
secondo caso, posso spedirti il mio primo esercizietto sui
sockets che permette a un server di ascoltare e rispondere
ai vari client. A quel punto, capito il meccanismo,
proseguire e adattare dovrebbe essere ragionevolmente
semplice.
 
ciao
 
Apx.
 


Con il C ho principalmente conoscenze al volo: mi serviva gestire un 
database fatto di file di testo, ed ho imparato a farlo. Mi serviva di 
imparare ad usare gli "switch" ed ho imparato ad usarli: se mi chiedete di 
scrivere un software in C senza adattare codice preso in giro mi trovo nel 
pallone, ma da piccole basi sono riuscito ad adattarle per creare software 
più complessi.
 
Per questo, se vuoi mandarmi i tuoi primi sorgenti fallo pure, probabilmente 
riuscirò a capire un buon 70% di quel codice ed il restante sarà da 
apprendere, ma forse riesco già a soddisfare le mie esigenze (in fondo mi 
servono poche caratteristiche)...


Il 08/01/2012 19:38, matrobriva ha scritto:
 
inviati...
 
-- 
Computer multitasking: oggetto che
può essere messo fuori uso da più
persone contemporaneamente.
 

 Ho letto che bisogna utilizzare i socket
 
Devi usare i socket ma devi usare anche HTTP, sono a livelli diversi.
Suggerisco anche io di usare una libreria già pronta come libcurl.
 
Se vuoi usare un linguaggio di scripting per essere più veloce puoi 
provare Lua e luasocket che nonostante il nome offer anche il supporto 
ad HTTP.
Vedi [1], le parti in grigio sono il codice di esempio, -- inizia una 
riga di commento.
 
 
[1] 
http://w3.impa.br/~diego/software/luasocket/http.html
 

 piana!
 
Non perdere tempo con socket ed altro. La via più semplice e completa 
per comunicare con un server WEB è usare curl.
Veloce semplice e rocking solid [
http://curl.haxx.se/
]
 
Buon lavoro
Newsgroup: it.comp.lang.c
Titolo: udp server

Ciao a tutti,
Ho realizzato un server udp che attende l'arrivo di
pacchetti su una determinata porta.
Quando un client invia questi pacchetti il server li
legge ed effettua delle operazioni.
All'interno del server, come è possibile sapere l'indirizzo
ip del client che ha inviato il pacchetto?
Ciao e grazie
Stefano
.

Sono anche io agli inizi ma prova con gethostbyname() o funzioni simili.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Il C++ standard non sa nulla a proposito di socket e similari - prova a 
chiedere su newsgroup specifici del sistema operativo su cui sviluppi 
(it.comp.programmare.win32, o it.comp.os.linux.development)
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Linux registered user 299762 @ Linux registered machine 213003

 ha scritto nel messaggio
news:ch9bgd$116$1...@newsfeed.cineca.it...

Che socket stai utilizzando per DOS o per Windows?
Se per dos posso "aiutarti" io
Ciao
Luther

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

qualcuno sa in che libreria è dichiarato u_long?
bye

qualcuno sa in che libreria è dichiarato u_long?
Ho bc31 x dos e lcc x win, l'unica libreria che ho trovato è winsock.h
in cui dice che è "taken from the BSD file sys/types.h."
comunque
#ifndef u_long
 typedef unsigned long   u_long;
#endif

Conta che sotto Windows quel typedef si vede poco... si usa molto di più
ULONG. Sotto linux non so.
ULONG mi pare sia in windef.h
Dome
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
PC Brain Official Web Site
http://digilander.iol.it/pcbrain
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

 ULONG mi pare sia in windef.h
y era in typedef.h infatti...
il primo in cui dovevo guardare...
 si č un ulong ma mi dava problemi coi casting nelle function che lavoravano sui socket e non capivo perché.
ciao
Newsgroup: it.comp.lang.c
Titolo: Problemi di avviamento!!

Salve ho scaricato il compilatore c\c++ della borland ma non riesco ad
avviarlo, nel senso che non sò come si faccia ad aprire l'interfaccia
grafica del compilatore, potreste aiutarmi?
Devo inserire comandi nell' autoexec?
P.S. non c'è il file readme.

 Devo inserire comandi nell' autoexec?
Se ti riferisci alla versione 5.5 del compilatore
Borland, non c'e' alcuna interfaccia grafica.
E' un compilatore a riga di comando.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
b9d1aac629568f690a8...@mygate.mailgate.org...


 wrote in message
t%A%7.3813$sW5.1...@news2.tin.it...


 Della Borland non esiste qualcosa del genere versione free?
Leggi le FAQ del C sul sito 
www.programmazione.it


wrote:

ai tempi c'erano i ng accessibili dal sito della borland leggendo i
quali (in inglese) ho risolto tutto

 >P.S. non c'č il file readme.


rendere pubbliche le tue acquisizioni?
ai tempi (giugno luglio) ho scaricato Borland 5.51 bcc32 e il TDebuger
dalla borland, 
ho scaricato Vide 1.22 come interfaccia grafica (consigliata da detti
ng) da 
http://www.objectcentral.com/vide.htm
ho letto l'help di vide che aveva una sezione su come settare il
compilatore a linea di comando oltre che il readme del compilatore
(cioč creare dei file nella directory ove si trova bcc32: ilink32.cfg
che contiene: 
-L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\psdk"
ed il file bcc32.cfg che contiene:
-w
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\psdk"
-DWINVER=0x0400
-D_WIN32_WINNT=0x0400
inoltre non bisognava dimenticare che
a. Add "c:\Borland\Bcc55" 
      to the existing path
in + in Vide nell'opzione tools --> setup tools 
in tool 2 ho scritto: COMPILA= %* %_ bcc32.exe %F  %>
che mi permette di compilare la finestra selezionata (premendo il
pulsante 2) senza utilizzare il makefile generato.

Newsgroup: it.comp.lang.c
Titolo: leggere e creare file con estensioni varie?

è possibile reperire da qualche parte come si fa a leggere e come si
fa a scrivere dei file utilizzabili dai più comuni programmi windows?
Esempio file con estensione BMP, JPG, GIF, AVI, DOC, XLS, WAV, MP3,
MID, eccetera. E' una operazione fattibile senza essere degli hacker
che spendono 20 ore al giorno sul computer?


www.wotsit.org

 che spendono 20 ore al giorno sul computer?
Il sito che ti č stato consigliato (wotsit) č una miniera di informazioni.
La tua domanda, comunque, č off-topic in questo gruppo (anche se ciň che
vuoi fare lo vuoi fare in C), rivolgiti a it.comp.programmare.win32.  
-- 
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: compilazione con piu' file sorgente

Scusate, ma non riesco proprio a capire una cosa sulla compilazione con piu'
file sorgenti.
Mettiamo il caso che io abbia piu' file divisi in questo modo:
main.c il quale include stdio.h, math.h, "calc.h"
calc.h che contiene la definizione di tutte le funzioni
getop.c include stdio.h, ctype.h, "calc.h"
stack.c include stdio.h, "calc.h"
getch.c include stdio.h
La domanda e' nel file main.c devo includere anche i tre file
getop.c,stack.c getch.c, oppure non serve(sul libro
W.Kernigan M.Ritchie non vengono inclusi), pero purtroppo non funziona mi da
:
[Linker Error] Unresolved external '_push' referenced from
G:\PROGRAMMI\BORLAND\CBUILDER6\PROJECTS\CALCOLATRICE\MAIN.OBJ
[Linker Error] Unresolved external '_pop' referenced from
G:\PROGRAMMI\BORLAND\CBUILDER6\PROJECTS\CALCOLATRICE\MAIN.OBJ
[Linker Error] Unresolved external '_getop' referenced from
G:\PROGRAMMI\BORLAND\CBUILDER6\PROJECTS\CALCOLATRICE\MAIN.OBJ
le funz pop e push si trovano in stack.c .
Ho fatto una prova includendo questi file nel main e pare funzionare, pero'
non penso che il ibro sia sbagliato.
Vorrei un consiglio, grazie a tutti.
                                                              SALUTI

 Vorrei un consiglio, grazie a tutti.
Il problema e' di linking. In qualche modo devi dire al tuo sistema di
linkare assieme main.obj, stack.obj, getopt.obj e getch.obj
Come fare dipende dal tuo sistema (e io il borland C non l'ho mai usato,
sorry)
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

getop.c,stack.c getch.c, oppure non serve
Non serve, ovviamente.
La compilazione è un'operazione per la quale non è indispensabile che
tutti i "pezzi" invocati dal tuo codice esistano realmente o siano
presenti al momento.
Il compilatore produce un codice oggetto in cui, ad un certo punto,
segna (se non la trova durante la compilazione) "qui si chiama una
certa funzione pippo()" (questo si chiama "external reference" o
"riferimento esterno", nel senso che è un riferimento a un elemento
esterno).  
Sarà poi il linker (che è quel programma che crea il file eseguibile)
a cercare di "risolvere" tutti i riferimenti esterni, assicurandosi di
agganciare tutti i pezzi, in modo da costituire un unico, monolitico,
eseguibile.
Cioè, per fare un esempio, io potrei avere il seguente modulo .C:
<CODE>
/* pippo.c */
#include "pippo.h"
int pippo(double r)
{
    if (pluto(r) > 0)    
      return 1;
    else
      return 0;  
}
int main()
{
    int a = pippo(3.2);
}
</CODE>
e il suo header file:
<CODE>
/* pippo.h */
int pippo(double);
</CODE>
Così come posso avere il modulo .C:
<CODE>
/* pluto.c */
#include "pluto.h"
double pluto(double r)
{
    return (r * FACTOR); 
}
</CODE>
e il suo header file:
<CODE>
/* pluto.h */
#define FACTOR 3.1415927
double pluto(double);
</CODE>
In questo caso, il compilatore non ha problemi nel compilare pippo.c,
pur non riuscendo a vedere se e dove è presente la funzione pluto().
-- 
Andrea Laforgia
#exclude <windows.h>
Newsgroup: it.comp.lang.c
Titolo: miglior manuale sul C...quale?

Mi trovo a dover acquistare un manuale sul C (Standard Ansi) possibilmente
in Italiano...Avete qualche consiglio ?
grazie Christian

o il deitel o il kernighan, ma cerca un po'.. è un argomento molto trattato.

io mi sono comprato "programmare in c, guida completa" di peter aitken e
bradley l.ones...soltanto che costa sui 35 ?
"FRaNCeSCo" <?@?.?> ha scritto nel messaggio
news:hE1Ab.160188$hV.58...@news2.tin.it...


 in Italiano...Avete qualche consiglio ?
Il libro della Deitel&Deitel e' molto buono, c'e' solo ANSI C e mi sembra
qualche accenno a Unix. Il Kerninghan & Ritchie e' la bibbia, ma trovo che
sia piu' un testo di riferimento che per imparare (anche a detta del mio
prof.)
-- 
= active @ oldskool.actisystem =
=   Linux Gentoo Base System   =
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GIT d- s:+>: a-- C+++ UL++++ P+ L+++ E--- W+ N+ o? !K w-- O-- M- V? PS+(++) 
PE Y+>++ PGP++ !t 5? X++(+) R(+) tv+(++) b+>++ !DI D+ G e h! r++ x*
------END GEEK CODE BLOCK------

 
		di niente, rz.
Newsgroup: it.comp.lang.c
Titolo: Fine stringa Scanf

La scanf usa \n o \0 come indicatore di fine stringa?
Cioč se digito ''Hello!'' in memoria trovo ''Hello!\n'' o ''Hello!\0''?
Ho qualche indizio che mi porta allo /n ma non capisco perchč lo si č 
preferito allo \0 che č l'indicatore standard di fine stringa.
Grazie, Ciao. 

 Cioč se digito ''Hello!'' in memoria trovo ''Hello!\n'' o ''Hello!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

> Cioč se digito ''Hello!'' in memoria trovo ''Hello!\n'' o ''Hello!
Grazie! Questo perň mi crea qualche problema.
Vogliono che traduciamo in Assembly del DLX la seguente funzione scritta in 
C:
int InputUnsigned(char *PrintfPar)
{
char ReadPar[80];
int i, n;
char c;
printf("%s", PrintfPar);
scanf("%s", ReadPar);
i = 0;
n = 0;
while (ReadPar[i] != '\n') {
c = ReadPar[i] - 48;
n = (n * 10) + c;
i++
}return n;
}
La funzione ha in ingresso l'indirizzo di una stringa da stampare (tipo 
''Inserisci numero: '') e acquisice un carattere Ascii numerico e lo 
trasforma in un numero. Ovviamente ciň si potrebbe fare molto meglio in C ma 
con l'Assembly č tutta un'altra storia.
Il problema č che se si prende come carattere di fine stringa lo \n come 
viene fatto nel codice C  [while (ReadPar[i] != '\n') il programma non 
dovrebbe funzionare. Eppure il codice Assembly va perfettamente in 
esecuzione (?????) nonostante che anche in DLX Assembly tutte le stringhe 
vadano terminate da 0\.
Non sono in grado di provare la versione C quindi mi piacerebbe sapere 
funziona e come fa visto che non usa come riferimento lo \0.
Il codice Assembly lo trovate qua:
http://www.diit.unict.it/users/mpalesi/COURSES/CE_04-05/DOWNLOAD/18_dlx_isa.pdf
Grazie, ciao.

 >> La scanf usa n o 
-- 


> >> La scanf usa n o
?????? 

 ??????
Boh... È Newsland che fa le bizze. Già mi aveva tagliato due terzi della
prima risposta, e ora tutta la seconda.
Non ricordo cos'avevo scritto, comunque il codice che hai postato non ha
molto senso in standard C, per almeno due motivi: 1) quel "while" su "\n"
non funzionerebbe, 2) il codice è assurdamente complicato (leggere una
stringa e poi decodificarne "a mano" il numero!?), e potrebbe essere
riscritta in tre righe:
   int InputUnsigned (char * prompt)
   {
      int n;
      puts(prompt);
      scanf("%d", &n);
      return n;
   }
Quindi, o non hai riprodotto fedelmente il codice che ti dà problemi (es.,
sicuro che l'input avvenga con una scanf e non con una fgets? La fgets
ritorna effettivamente anche il "\n" di fine riga), oppure quella
implementazione della scanf è completamente fuori standard.
Nel secondo caso, c'è poco che possiamo dirti qui, basandoci sul
comportamento standard: devi far riferimento al manuale del compilatore per
cui è stato scritto il codice.
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/
Newsgroup: it.comp.lang.c
Titolo: [MS] - Informatica - PROGRAMMATORI C/C++

Stiamo selezionando programmatori da inserire stabilmente nel
nostro organico nella sede di Marina di Carrara (MS).
Le figure professionali che cerchiamo hanno esperienza come programmatori in
almeno uno di questi campi
C/C++, VB, MFC, VC++, DAO, DBRMS, WIN32, firmware, driver Windows.
Gli interessati possono mandare il loro CV a 
mcol...@c-map.it
Marco Colonna

 nostro organico nella sede di Marina di Carrara (MS).
  In questo newsgroup si discute a proposito del linguaggio C cosi` come
definito dagli standard ISO ed ANSI. Occasionalmente sono accettati
messaggi riguardanti specifiche implementazioni del linguaggio i quali
non possono trovare risposta in altri newsgroup della gerarchia
italiana.
  Detto questo, appare evidente che le offerte di lavoro non rientrano
nel /topic/ di questa area. Annunci di questo tipo sono, invece, ben
accetti in
	news:it.lavoro.offerte.
  Esistono regole ben precise per l'utilizzo di UseNet, non rispettarle
non pone in una buona luce: perche` dovrebbe risultare affidabile un
datore di lavoro che dimostra di non sapere o di non volere rispettare
le norme?
  Tra l'altro, chi segue questo gruppo non e` detto che sia interessato
alle vostre offerte, mentre e` sicuro che, pur non essendo tutti
specialisti dei linguaggi di programmazione, gli utenti del gruppo
succitato sono alla ricerca di lavoro.
  Usare UseNet in maniera corretta e` indice di civilta`: UseNet e` un
bene comune e disponibile liberamente, non distruggiamolo.
  Una copia del tuo messaggio verra` inviata al PostMaster di
Interbusiness come segnalazione di /spam/.
	Alla prossima,
		Marco
Newsgroup: it.comp.lang.c
Titolo: thread o non thread...

sto` lavorando ad un demone che accetta ed elabora connessioni
socket tramite i threads, il tutto funziona ma nella lista dei processi
me ne risulta uno per ogni thread, non mi aspettavo una cosa del genere.
Ho scelto di usare i thread al posto delle fork() proprio per non
generare un nuovo processo e risparmiare risorse.
Qualcuno sa dirmi perche si formano nuovo processi?!?!?!
grazie, ciao.

 Qualcuno sa dirmi perche si formano nuovo processi?!?!?!
su linux (che suppongo tu stia usando), i thread sono implementati come 
light processes (e anche i processi) 
la differenza tra le due cose e' minima, anche perche' un processo e' 
di suo molto leggero

 ha
scritto:


OT, cmq la differenza principale (ai fini pratici, eh. Non so come girino in
realtà le 2 cose) è che tutti i thread condividono la stessa memoria
(mallocando si può accedere ai dati da tutti i threads), mentre per i
processi non è così: se malloco da uno, gli altri non possono condividere la
memoria allocata (in realtà c'è il sistema per allocare memoria condivisa,
credo).
Lanugo

Cmq la libreria pthreads usa la clone.
man clone :)
-- 
"Everything should be as simple as possible, 
   but no simpler" - Albert Einstein
--

 allocare memoria condivisa, credo).
come no, con shm
Newsgroup: it.comp.lang.c
Titolo: QUESITO

CIAO A TUTTI VORREI UN AIUTO. ORA VI SCRIVO IL CODICE DA ME SCRITTO E
VI SPIEGO QUAL'E' IL PROBLEMA.
IO CON QUESTO CODICE APRO UN IFLE ESISTENTE IN MODALITA' DI LETTURA.
IO OLTRE CHE FARE QUESTO VORREI MODIFICARE QUESTO FILE E SALVARLO
NELLO STESSO FORMATO COME POSSO FARE?
#include <stdio.h>
#include <stdlib.h>
#define leggo "leggofile.txt"
#define scrivo "scrivofile.txt"
main (){
     char datifile;
     FILE *leggoilfile,*scrivoilfile;
leggoilfile = fopen(leggo,"r");
scrivoilfile = fopen(scrivo,"w");
while (!feof(leggoilfile)){
fscanf(leggoilfile,"%c",&datifile);
printf ("%c",datifile);
fprintf (scrivoilfile,"%c",datifile);}
fclose(leggoilfile);
fclose(scrivoilfile);
system("pause");
}

 NELLO STESSO FORMATO COME POSSO FARE?
1) non gridare.
2) leggi come funziona fopen (i parametri)
Ciao Jack
-- 
Eroi non si nasce, ti incastrano
- Jim Belushi

si ho visto come funziona   ma non so come porla all'interno di questo
codice purtroppo

 system("pause");
"pause" è qualcosa relativa a windows? usa getchar() per "fermare" il
programma, almeno è portabile...
Comunque cio che devi fare è qualcosa di simile:
int main(void)
{
    FILE* stream;
    char  buf[MAXLEN], *p;
    stream = fopen(leggo,"r+");
    if (!stream) {
        perror(leggo);
        return 1;
    }
    /* salvi il contenuto del file nel buffer */
    fgets(buf, sizeof(buf),
stream);
    /* stupido esempio di manipolazione del testo... */
    for (p=buf; *p; ++p) {
        if (islower(*p))
            *p = toupper(*p);
        else
            *p = tolower(*p);
    }
    /* riversi il buffer modificato nel file: */
    fseek(stream, 0L, SEEK_SET);
    fputs(buf, stream);
    fflush(stream);
    fclose(stream);
    getchar();
    return 0;
}
Nota che è semplicemente un esempio... per semplificare do per
scontato che il file contenga una sola riga (!) la quali entri
tranquillamente nel buffer.


GRAZIE TANTE PER LA RISPOSTA CIAO

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

Ho un problema, vorrei poter stampare con la printf del testo colorato 
e poter inserire del testo multimediale. Mi chiedevo se questo era 
possibile.
Se qualcuno ha una soluzione a ciò prego di contattarmi in email.
Ringrazio anticipatamente.

Ciao,
su linux, se mandi l'output del tuo programma su un terminale che
supporta i colori (xterm ad es.)
puoi usare le sequenze di escape qui sotto....
#define TERM_COLOR_BLACK        "\033[1;30m"
#define TERM_COLOR_RED          "\033[1;31m"
#define TERM_COLOR_GREEN        "\033[1;32m"
#define TERM_COLOR_YELLOW       "\033[1;33m"
#define TERM_COLOR_BLUE         "\033[1;34m"
#define TERM_COLOR_VIOLET       "\033[1;35m"
#define TERM_COLOR_CYAN         "\033[1;36m"
printf("%s thread_scoda() %s \n", TERM_COLOR_BLUE, TERM_COLOR_BLACK);
Tieni conto che da quando applichi la sequenza di escape cambi colore
fino a quando non ne applichi una nuova. L'esempio di printf fa proprio
questo, stampa una stringa in blu e poi riporta il colore al nero di
default.
CiaoCiao
Sergio "33%"
Newsgroup: it.comp.lang.c
Titolo: long double ?

Sono a livello zero e non capisco come il TC ++ 1.01, su un 386 senza cop. ,
produca questa stampa:
-2.713329e-167
-0.000000
-2.71333e-167
-2.713329e-167
-0.000000
-2.71333e-167
quando esegue questo "progr.":
#include <stdio.h>
main()
{
long double i=314.7;
printf("%e\n",i);
printf("%f\n",i);
printf("%g\n",i);
printf("%le\n",i);
printf("%lf\n",i);
printf("%lg\n",i);
}
Grazie, Gianmaria.

Emulazione del coprocessore matematico

Azz.. non ho visto bene l'output pero... un emulatore non dovrebbe ritornare
0.00000000 per i float. senno che emu č?
Dome

 0.00000000 per i float. senno che emu è?
Non c'entra l'emulatore... il comportamento della printf è corretto. 
Infatti il formato "%f" si comporta così (dalla man page di Linux):
" The double argument is rounded and converted to  decimal  notation in  the style  [-]ddd.ddd ..."
I problemi sorgono nelle prime 3 printf, dove si chiede di stampare un 
argomento 'long double' in un formato 'double' ... il compilatore 
dovrebbe segnalarlo se attivi tutti i warning.
A proposito, sicuri che il prefisso 'l' (minuscola) vada bene per 
avere un long double? La stessa man page mi dice che serve solo per 
interi, puntatori e caratteri, mentre indica di usare 'L' ... 
segnalandolo come introdotto da C99 :(
Danilo

avere un long double?
No, bisogna usare "%Lf" se si vuol stampare un long-double.
In realta', con printf() c'e' una promozione di tipo da
float a double (perche' i parametri passati a printf() sono
in numero variabile e il loro valore viene passato comunque
come double, anche' se e' il valore di una variabile float).
Questo vuol dire che "%f" vale sia per double che per float
(bada che non e' cosi' per scanf() che ha bisogno di "%lf"
per poter leggere dei double). Con printf(), "%lf" e'
equivalente a "%f" e stampa, comunque, un double.
-- 
The Follet

produca questa stampa:
[slurp]
A parte il problema del %Lf (vedi post di The Follet), che io sappia
la printf() del TC usa gcvt() per la trasformazione float -> ASCII.
La gcvt() prende un double come argomento, e con i long double non va'
tanto bene...
ciao, acc.   
a...@libero.it

Infatti il formato "%f" si comporta cosě (dalla man page di Linux):
Avrei un Linux Slackware con kernel 2.0.36, in una dir del dos che e' senza
manuale. Come potrei trovarlo e inserirlo?
Grazie, Gianmaria.

No, bisogna usare "%Lf" se si vuol stampare un long-double.
Ok, grazie. Con %Lf stampa correttamente il long double, con %f la stampa
non assomiglia al numero long double. Avevo messo %lf perche' sugli appunti
che ho era scritto cosi' e forse andava interpretato.
Gms.
Newsgroup: it.comp.lang.c
Titolo: Mouse in DOS

Salve a tutti
qualcuno sa dirmi dove posso scaricarmi una libreria per gestire gli eventi del
mouse in un programma in C (in turbo c++ 3.0, per la precisione) utilizzando le
funzioni del driver dos?. Ne avevo un paio per il turbo pascal, ma le ho perse.
Mi basterebbe anche solo qualche indicazione... grazie.
Ciaoů
-- 
Gabriele Biffi
gbi...@usa.net
 - ICQ: 5169491
http://www.rete039.it/civis/gbiffi/
"Il Pensiero genera l'Eresia; l'Eresia genera il Castigo." - WarHammer

 
Ciao ti mando il codice di quattro funzioni per la gestione del muose che 
utilizzano gli interrupt software del dos. prova se funzionano, poi puoi 
modificarle come vuoi a seconda dell'uso.
 
#include <dos.h>                    /* questa č la libreria da includere 
per accedere agli interrupt*/
 
 
/*   ChecMouse : Controlla la presenza del mose nel sistema. */
int ChecMouse(void) {
    union REGS inregs;
    union REGS outregs;
 
 
inregs.x.ax
 = 0x00;
    int86(0x33, &inregs, &outregs);
    return(
outregs.x.ax
);
}
 
/* CursoreOn : Visualizza il cursore grafico sul video */
void CursoreOn(void) {
    union REGS inregs;
    union REGS outregs;
 
 
inregs.x.ax
 = 0x04;
 
inregs.x.cx
 = 30;    
    inregs.x.dx = 30;
    int86(0x33, &inregs, &outregs);        /* Setta la posizione iniziale 
del cursore del mouse */
 
inregs.x.ax
 = 0x01;
    int86(0x33, &inregs, &outregs);        /* Visualizza il cursore */
    return;
}
 
/* CursoreOff : Spegne il cursore grafico del mouse */
void CursoreOff(void) {
    union REGS inregs;
    union REGS outregs;
 
 
inregs.x.ax
 = 0x02;
    int86(0x33, &inregs, &outregs);
    return;
}
 
/* Mouse : aspetta il "click" da parte dell'utente e restituisce la 
posizione del cursore (attraverso due variabili globali xm e ym). 
*/
void Mouse(void) {
    union REGS inregs;
    union REGS outregs;
    int click = 0;
 
    while(!click) {                                        /* Aspetta la 
pressione del tasto (mi pare il sinistro) del mouse */
 
inregs.x.ax
 = 0x03;
        int86(0x33, &inregs, &outregs);        /* Restituisce la 
posizione del cursore e lo stato dei pulsanti */
        xm = 
outregs.x.cx
;
        ym = outregs.x.dx;
        click = (outregs. x.bx);
    }
    return;
}
 
SE NON FUNZIONA, POSTAMI ANCORA INDICANDO QUALI PROBLEMI HAI AVUTO.
 
Ciao 

 modificarle come vuoi a seconda dell'uso.
Hanno funzionato benissimo, anche meglio di quello che pensavo, grazie!
Adesso (domani, vah) faccio delle belle funzioni per gestire il click.
Ciao e grazie ancora!


 
Di niente sono contento di esserti stato utile.
Ciao
			Pevar...
Newsgroup: it.comp.lang.c
Titolo: problema di compilazione

mi sono scaricato il codice del CIrclemud e ho provato a compilarlo nel
mio pc e sorpresa : non riesco a compilarlo per bene,mi da' un sacco di
errori che si riconducono ad un file header;provato poi a compilare sul pc
dell'universita' tutto fila liscio.
da cosa puo' dipendere???
a casa ho istallato la debian 2.0.r5 su amd-k6 3dNow! da 300Mhz,qui
all'universita' invece credo che ci sia il nuovo kernel 2.2.0 su pentium
liscio da 166Mhz
puo' essere un problema di librerie??
per compilare uso il GCC e lascio andare il make 
la riga incriminata e' la seguente:
#define CRYPT(a,b) ((char *) crypt((a),(b)))
se per capire il problema vi servono altre informazioni per favore
mailatemi
grazie e ciao
--
Posted from 
ro...@stud.fisica.unipg.it
 [141.250.2.211]
via Mailgate.ORG Server - 
http://www.mailgate.org

#define CRYPT(a,b) ((char *) crypt((a),(b)))
... quello che manca e' la definizione di "crypt()" che puo' essere una funzione
di libreria (e quindi ti serve il file di libreria) o una macro definita in un
file header (e quindi ti serve il file header).
Andrea Laforgia
-------------------------------------
(grattatio pallarum omnia mala fugit)
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]


Posted from 
ro...@stud.fisica.unipg.it
 [141.250.2.211]


danno problemi (circle di sicuro e forse mudpassword).
Anche il ROM, almeno nella versione 2.3, nel caso questa informazione
possa essere utile a chi vuole utilizzare questo codice.
Log
_Andrea Donati - Logan _________________________________________
__Mail: 
a.do...@bo.nettuno.it
 __________________________________
___LudItalia - www: 
http://luditalia.students.cs.unibo.it
 ________
____LudItalia - mail: 
ludi...@students.cs.unibo.it
 ______________
_____TS2 - MUD: 
http://www.sfbologna.roxybar.it/mud
 ________________

Devi aggiungere -lcrypt nel makefile, in corrispondenza dei programmi che ti

Newsgroup: it.comp.lang.c
Titolo: Aiuto: Linguaggio C!!!!

Ho un problema con il C. Sono ormai passati 5 anni dall'ultima volta che
ho
programmato in ....e sono molto arruginito ..soprattutto sui dettagli
come questo:
Come si fa dopo aver letto una stringa da file(dopo la quale non c'è un
caratere di new line, ma altro testo!),
a legger numeri sullariga successiva? E ancora ....
Dopo aver letto i numeri, leggere ancora una stringa, sulla riga
successiva?
devo leggere qualcosa del tipo:
Io leggo *NODE e subito dopo voglio cominciare a leggere i numeri.....
dopo aver letto tutti i numeri voglio cominciare a leggere * ELEMENT
sulla sua riga, non su quella degli ultimi numeri
*NODE, NSET=GLOBAL
10,     1.2,    1.4,     1.7
......
.....
100,    5.1,    2.6,    4.9
*ELEMENT, ELSET=.....
 
 

successiva?
usa fscanf() con gli specificatori di formato corretti...

 fscanf(pf,"%*s%......".....)


Io lo uso e funziona

Io lo uso e funziona
Non va bene *nel caso specifico*.

 Io lo uso e funziona
Buona fortuna!
Ma cosa succede se la stringa che fscanf legge dal file (o meglio dallo
stream)
è più "lunga" del buffer passato a fscanf?
    NullPtr.
void main(){} /* The RIGHT way */


Orc....avevo interpretato male il post iniziale....chiedo a scusa a tutti
per l'equivoco!

Newsgroup: it.comp.lang.c
Titolo: OT- Assembly

Scusate, ma non ho trovato un NG piu' adatto di questo per la mia domanda.
devo scrivere una funzione in Assembler che permetta di distinguere se
mi trovo su un 486 o su un Pentium.
Come fare???
Mi piacerebbe avere anche l'equivalente in C.
Ciao e grazie mille!!!
Ale.

 mi trovo su un 486 o su un Pentium.
Guarda su 
www.intel.it
, e in particolare se trovi particolari
sull'istruzione CPUID.
Sul sito trovi il sorgente (in assembler. mi pare), che tra le altre cose
può distinguere anche processori che questa istruzione non ce l'hanno (mi
pare introdotta col Pentium).
Ciao
--
Alessandro Monti

 wrote in message
vjf74.23933$m62.2...@news.infostrada.it...

Newsgroup: it.comp.lang.c
Titolo: assegnamento a struct

struct test {
    struct {
        int a, b;
    } c;
};
int main() {
    struct test ok = { { 4, 2 } };
    struct test no;
    no.c = { 2, 4 };
    struct test workaround;
    workaround.c.a = 2;
    workaround.c.b = 4;
}
$ gcc -W -Wall -std=c99 -pedantic prova.c
prova.c: In function ‘main’:
prova.c:11: error: expected expression before ‘{’ token
prova.c:9: warning: unused variable ‘ok’
$
non capisco per quale motivo è permesso di assegnare "al volo" i valori a ok
e non a no.c... 
chiariamo, posso sempre cavarmela come ho fatto in workaround, solo che è
brutto ^^
-- 
By ZeD

 e non a no.c... 
Perchè la prima è una inizializzazione, la seconda una copia.
E.

 e non a no.c... 
Hai sbattuto contro la sottile differenza tra assegnazione ed
inizializzazione.
Una struct puo' essere inizializzata nel momento in cui viene
dichiarata, ed e' quello che fai alla variabile "ok"
In C non e' pero' possibile generare "al volo" valori di tipo
struct ed ecco perche' non riesci ad assegnare un valore a "no.c"
Come ulteriore prova, puoi verificare che questo non va:
...
   struct test ok;
   ok = { { 4, 2 } };
..
Mentre questo si:
..
   no.c = ok.c;
...
perche' non assegna un "valore struct" ma fa un'assegnazione tra variabili.
ciao
Giacomo

 }
Primo, scusate il mio male italiano. Forse questo workaround ti va
meglio: 
        struct test {
          struct foo {
               int a, b;
            } c;
        };
        [...]
        no.c = (struct foo) {2,4};
Per il "compound literal" serve C99 (-std=C99). 
 
cc

Newsgroup: it.comp.lang.c
Titolo: secondo voi e' giusta questa funzione?

Ho un albero binario allocato di cui conosco ad esempio il puntatore alla
radice p.
Per deallocarlo posso utilizzare la seguente funzione ricorsiva?
invocandola cosi'
liberamemoria(p);
void liberamemoria(expr *p)
{
 if (p)
 {
  liberamemoria(p->left);
  liberamemoria(p->right);
  free(p);
 }
}

Mi sembra corretto!

> Mi sembra corretto!
A me sembra l'unica cosa possibile, visto che le procedure di
attraversamento anticipato e simmetrico eseguirebbero la deallocazione
di elementi interno ai rami, mentre in questo modo si è sicuri che
vengono deallocate per prime le foglie (dico bene oppure erro?)

Infatti... l'ordine corretto è proprio questo!
Newsgroup: it.comp.lang.c
Titolo: Inizializzazione con puntatori esterni

Ho due file C:
--- file1.c ---
unsigned char myvar1;
unsigned char *ptrmyvar1 = &myvar1;
---
--- file2.c ---
extern unsigned char *ptrmyvar1;
unsigned char *ptrs[] = { ptrmyvar1, ..., NULL };
---
Compilando file2.c c'è un messaggio d'errore: nell'inizializzazione
bisogna
usare soltanto espressioni costanti, come se ptrmyvar1 non è costante.
Immagino che il problema derivi dal fatto che ptrmyvar1 è esterna a
file2.c e
durante la compilazione di file1.c il compilatore non sa quanto vale
(lo saprà
solo al momento del linking), però sempre di costante si tratta (è il
puntatore
di una variabile, non può cambiare).
C'è una soluzione al problema? M'è comodo dichiarare puntatori in
diversi
file .c e inizializzare un array di puntatori in un altro modulo.

 file .c e inizializzare un array di puntatori in un altro modulo.
Mm no non è vero, i puntatori non sono costanti, ma puoi dichiararli
come tali...

 wrote:

--- file2.c ---
extern unsigned char *const ptrmyvar1;
unsigned char *ptrs[] = { ptrmyvar1, ..., NULL };
---
Anche così non funziona... solito errore.

 Anche cos� non funziona... solito errore.
Quello � un puntatore a costante, non un puntatore costante. Per 
dichiarare un puntatore costante consiglierei di usare un typedef.
E.

 dichiarare un puntatore costante consiglierei di usare un typedef.
Dalle FAQ del newsgroup comp.lang.c:
---
11.9:	What's the difference between "const char *p" and
	"char * const p"?
A:	"const char *p" (which can also be written "char const *p")
	declares a pointer to a constant character (you can't change any
	pointed-to characters); "char * const p" declares a constant
	pointer to a (variable) character (i.e. you can't change the
	pointer).
	Read these "inside out" to understand them; see also question
	1.21.
	References: ISO Sec. 6.5.4.1; Rationale Sec. 3.5.4.1; H&S
	Sec. 4.4.4 p. 81.
---

 	pointer).
E' vero hai ragione. Allora pu� darsi che un puntatore costante non vada 
bene come "costante" nelle inizializzazioni. Fossi in te cercherei di 
ridurre il problema all'osso e posterei il codice (nel caso qualcuno 
voglia verificarlo). Inoltre proverei se lo stesso accade con i nomi 
degli array.
E.
Newsgroup: it.comp.lang.c
Titolo: Ansi C e Controllore Z-World

Salve a tutti premetto subito che non so se l'argomento è OT cmq lo posto
ugualmente: da poco tempo mi sono avvicinato al linguaggio C (per motivi
universitari conoscevo solo il Pascal......... :| )
Allora quello che voglio chiedervi è semplicemente questo qualcuno di voi si
è mai trovato a programmare i microcontrollori della z-world (in particolare
il Rabbit)?
Ve lo chiedo poichè questi dispositivi utilizzano come codice di
programmazione l'Ansi C ovviamente adattato.
Quindi volevo chiedere evetuali impresioni etc etc.
Chi volesse meglio conoscere questo gioiellino può andare su
http://www.zworld.com/

 
Mi e' arrivata qualche giorno fa la Coyote BL2500 e sto cominciando a fare
delle prove. A parte l'attenzione maggiore che si deve riporre nell'uso
della memoria, nella gestione del multitasking e di qualche altro
particolare accorgimento, mi pare che l'implementazione del linguaggio sia
di buon livello, sebbene non completamente Ansi C
-- 
Ciao,
Stefano
Home page: 
http://www.lazyclan.com
ICQ#:      24140153