mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: riferimenti e puntatori.

Salve vorrei chiedervi una cosa.
Perchè se scrivo una cosa del genere:
int y = 1;
int* pi = 0;
int* &x = pi; // E' ok
int* &z = &y; // No, vuole puntatore e oggetto puntato costante.
Ma se inizializzo un riferimento a puntatore con un puntatore o con
l'indirizzo di un intero, concettualmente non è la stessa cosa? Non sono
entrambi indirizzi di memoria?
Inoltre vorrei sapere se esistono puntatori riferimenti.
Grazie
Luigi

Inoltre vorrei sapere se esistono puntatori riferimenti.
credo che tu intenda dire "puntatori a riferimenti". La risposta è no 
perchè un riferimento è sempre inizializzato e immodificabile. Quindi
non ha senso un puntatore ad un riferimento, usa un puntatore
all'oggetto
riferito.
-- 
Posted from 
adsl-21-135.38-151.net24.it
 [151.38.135.21] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

OK, GRAZIE

 Inoltre vorrei sapere se esistono puntatori riferimenti.
Intendi "puntatori a riferimenti"? No, un riferimento non ha indirizzo.
EMG

 temporaneo.
Un modo per verificare cio' e' definire il z come reference a puntatore
costante, nel qual caso dovrebbe funzionare:
int* const &z = &y;
Ciao,
Nicola


In effetti non e' molto chiara la differenza tra
  int * const &z = &y
e
  int * const  z = &y
&y e' gia' un indirizzo e quindi che senso avrebbe prenderne
l'indirizzo ?
ho provato il seguente programma:
#include <iostream>
main()
{
    int           y = 1;
    int *         p = 0;
    int * &       x = p;
    int * const & z = &y;
    int * const   w = &y;
    std::cout << "int           y : " << &y << " " << y << std::endl ;
    std::cout << "int *         p : " << &p << " " << p << std::endl ;
    std::cout << "int * &       x : " << &x << " " << x << std::endl ;
    std::cout << "int * const & z : " << &z << " " << z << std::endl ;
    std::cout << "int * const   w : " << &w << " " << w << std::endl ;
}
l'output generato e' il seguente (g++ su SunOS 5.6)
int           y : 0xeffff47c 1
int *         p : 0xeffff478 0x0
int * &       x : 0xeffff478 0x0
int * const & z : 0xeffff470 0xeffff47c
int * const   w : 0xeffff468 0xeffff47c
mentre x prende effettivamente lo stesso indirizzo di p (quindi e'
propriamente un reference a un'altra variabile) sia z che w hanno un
proprio indirizzo.
/f
Sent via Deja.com
http://www.deja.com/

 proprio indirizzo.
Nel tuo output c'e' una cosa che non mi torna, ovvero mi sarei aspettato
che &w risultasse in 0xeffff464 e non 0xeffff468, perche' secondo me su
Sun puntatori ed interi sono di 4 byte. Ti faccio notare un'altra cosa:
nella sequenza di indirizzi c'e' un "buco" all'indirizzo 0xeffff474, che
con ogni probabilita' corrisponde proprio alla variabile senza nome alla
quale accennavo prima.
Ciao,
Nicola

    std::cout << "int * const   w : " << &w << " " << w << std::endl ;
"w" e' un puntatore non modificabile ad un intero. (int*const)
&w e' il suo indirizzo. (int*const*)
w e' il suo valore. (int*const)

Newsgroup: it.comp.lang.c++
Titolo: Codice ASCII di un carattere??

Ciao,
il mio problema è questo: ho una variabile char (char tmp;) dove salvo un
carattere letto da un file, vorrei salvare all'interno di una variabile int
il suo codice ascii, come faccio? in visual basic esiste il comando asc, in
c++ esiste qualcosa di simile?
Grazie e ciao

"PiNkU" <nob...@nowhere.xxx> wrote in message
news:adhnlq$1up$
1...@fe2.cs.interbusiness.it

In C/C++ il tipo "char" E' un intero. Basta usarlo dove occorre.
...
char c='a';
cout << c;       // stampa il carattere 'a';
cout << (int) c; // stampa il numero '65';
...
Potresti dire "non e' un intero, hai avuto bisogno di un cast!"; c'e'
voluto il cast perche' l'operatore "<<" e' overloaded, e quando trova un
"char" visualizza il carattere. Nelle espressioni puoi usare il char
come fosse un int.
In genere (qualcuno mi corregga se sbaglio) un char assume valori da
-127 a +128, mentre un "unsigned char" va da 0 a 255.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 -127 a +128, mentre un "unsigned char" va da 0 a 255.
Due precisazioni: in C++ "char", "unsigned char" e "signed char" sono
tipi diversi. char e' implementato come uno degli altri due, ma non e'
lo stesso tipo.
I range che hai indicato sono range *minimi* per signed char e unsigned
char: so di una piattaforma dove char ha 32 bit...
Ciao,
Nicola

-127 a +128, mentre un "unsigned char" va da 0 a 255.
Uhm... non proprio, si tratta di una cosa che dipende dalla
piattaforma.
Tale informazione la puoi ricavare utilizzando l'header <limits> e la
classe template std::numeric_limits
Per esempio, se vuoi sapere informazioni su tutti i tipi char nella
tua piattaforma ti basta fare
std::cout<<std::numeric_limits<char>.is_signed<<"\n";
std::cout<<std::numeric_limits<unsigned char>.is_signed<<"\n";
std::cout<<std::numeric_limits<signed char>.is_signed<<"\n";
Il Ghenio
---------
// TODO: Place your ass here

Newsgroup: it.comp.lang.c++
Titolo: CFileDialog Filter

Hi All,
Can anyone help to check whats wrong with the following code fragment.
OPENFILENAME openfilename;
 openfilename.lpstrFilter = "Text Files (*.txt)|*.txt | XML File XML
(*.xml)|*.xml | All Files (*.*)|*.* || ";
 CFileDialog dlgImport(TRUE, NULL, NULL, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,
openfilename.lpstrFilter );
 if(dlgImport.DoModal() == IDCANCEL)
   return FALSE;
 else
 {
  CString pathName = dlgImport.GetPathName();
 }
 return TRUE;
Since it is not display the filtering item in the list box
thanks very much

 Can anyone help to check whats wrong with the following code fragment.
... snip
You posted on the wrong NG. This NT is the italian discussion list on standard
C++. You are supposed to post in italian and to stay on topic with the C++
standard.
You'd better post on an english Win32 related group.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556
Newsgroup: it.comp.lang.c++
Titolo: Eseguibili compatti

Spero che qualcuno mi possa aiutare con il C++ Builder.
Quello che vorrei fare è molto semplice, ossia generare eseguibili
di dimensioni non esorbitanti. Non è possibile che una semplice
finestra con 3 tasti e un campo di testo compilata generi un eseguibile
di ben 255 Kb. Uso il C++ Builder e ho trovato nelle opzioni del progetto
due tasti, uno "Ful debug" e l'altro "Release".
Purtroppo la differenza è di 255 Kb con Full debug e 253 Kb con Release.
Ciao a tutti.
                                                                    Valerio

Devi compilare l'eseguibile con i package collegati dinamicamente. Evitando
il linking statico dei package riduci enormemente le dimensioni dell'exe ma
devi portarti appresso i files richiesti (sempre gli stessi però). Un pò
come fa la Microsoft con le gigantesche librerie MFC & C.
Inferno

devi portarti appresso i files richiesti (sempre gli stessi perņ). Un pņ


 ancora?
L'unico modo per ridurre ancora le dimensioni è lasciar perdere c++ builder e
scrivere la tua piccola applicazione direttamente con le api di win32.
Ciao
Terenzio

Devi cercare nel Win32SDK  e nei files .h di windows i #define che, se
dichiarati, eliminano parte del codice  dagli headers sia di win che della
VCL. Es. se definisci NO_OLE (o qualcosa di simile) allora quando verrà
incluso il file windows.h verranno eliminate dalla compilazione moltissime
righe relative alle dichiarazioni delle funzioni per la gestione dell'OLE.
Inferno

...



Newsgroup: it.comp.lang.c++
Titolo: Neofita - domanda sulle istanze in RAM degli oggetti

Ciao
ho da poco iniziato programmare in C++ e provengo da diversi anni di
programmazione in C su sistemi embedded. Sto cercando di capire una
cosa:
Ipotesi di lavoro
----------------------
1) Definisco la classe Prova (derivata da Object) con un metodo:
Stampa (void)
2) Dichiaro un array di 10 oggetti della classe Prova
3) Il compilatore genera il codice assembly per il metodo Stampa
(void)
Domanda
--------------
A Run time, i 10 oggetti hanno tutti la propria copia del codice
assembly del metodo?
Esiste la possibilita' che il compilatore, per ottimizzare il codice,
metta nell'eseguibile solo una volta il metodo Stampa () e poi lo
faccia condividere da tutti?
ciao e grazie,
Enrico

 Enrico
cerca istanze e virtual table.
Comunque il codice c'� una sola volta ci mancherebbe.

 Comunque il codice c'è una sola volta ci mancherebbe.
Ciao,
avrei ancora un paio di domande:
1) La Virtual Table e' creata dal compilatore ed inserita
nell'eseguibile?
2) Qual'e' l'istante esatto che viene consultata, quando il mio
programma effettua una chiamata ad un metodo che e' OVERRIDA un metodo
virtuale?
ciao e grazie ancora
Enrico

 virtuale?
http://www.learncpp.com/cpp-tutorial/125-the-virtual-table/
Qui trovi una bella spiegazione dettagliata di quello che avviene in 
memoria quando sei in runtime.
-- 
Morde

Ciao,
 effettivamente e' la miglior spiegazione che abbia mai trovato in
giro: semplice, corta, efficace
grazie
Enrico

 assembly del metodo?
Il compilatore genera  la funzione
Stampa(Prova* p)
Nel codice la chiamata a Stampa viene sostituita da questa funzione.
Ex --> codice tuo
Prova obj ;
obj.Stampa() ;
Il compilatore sostiutuisce con
Prova obj ;
Stampa(obj) ;
La funzione Stampa e' unica in memoria.
Le vtbale che ti hanno indicato vengono utilizzate per le chiamate a
funzioni
virtuali,
"Inside the C++ Object Model" e' un libro che spiega molto bene
cosa fa il compilatore con il tuo codice e come vengono rappresentate
in memoria le varie strutture dati.
Ciao.
d.

 in memoria le varie strutture dati.
Grazie per il suggerimento!
ciao,
Enrico


yes, vedi sopra.

Newsgroup: it.comp.lang.c++
Titolo: Elaborazione distribuita

Salve a tutti,
devo elaborare un algoritmo molto pesante che può anche girare in parallelo;
potrei distribuire vari suoi pezzi ognuno dei quali svolge una parte del
lavoro. Conoscete una soluzione che coinvolga la grande Rete?
Non è strettamente necessario che i vari pezzi dialoghino tra loro (anche se
sarebbe meglio). Io cercavo anche solo un pò di computer a disposizione su
cui far girare i pezzi, tipo il progetto SETI
GRAZIE.


cui far girare i pezzi, tipo il progetto SETI.
Grazie.
e-mail: 
marco....@tiscalinet.it
Newsgroup: it.comp.lang.c++
Titolo: funzione inseritore  se friend non funziona

Ciao,
La funzione che vedete sotto funzionava prima di rendere le variabili x,y,z
della classe tre_d private e l'inseritore friend.
Cosa c'è di sbagliato?
Inoltre mi dice che l'operatore "<<" è ambiguo  perciò credo che l'errore
sia nella dichiarazione della funzione overload <<.
Ciao
class tre_d{
 int x,y,z;
public:
 tre_d (int a, int b, int c) {x=a; y=b; z=c;}  //costruttore implementato
 friend ostream &operator<<(ostream &stream, tre_d obj);
};
ostream &operator<<(ostream &stream, tre_d obj)
{ 
 stream <<obj.x <<", ";
 stream <<obj.y <<", ";
 stream <<obj.z <<"\n";
 return stream; };
int main()
{ 
 tre_d a(1,2,3), b(4,5,6), c(6,7,8);
 cout << a << b << c;
 return 0;
}

 [CUT]
A me compila senza errori, anche con tutti i warning attivi, e funziona 
correttamente.
-- 
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/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003

 correttamente.
ma pure tu usi il visual c++ 6.0?
hai cambiato delle opzioni?
Ciao
Domenico


No, uso il gcc, ma dato che si parla di standard...


Newsgroup: it.comp.lang.c++
Titolo: Gestione dell'input in una shell di comandi

Salve a tutti,
sto realizzando una shell di comandi in C++.
Vorrei sapere in che modo è possibile realizzare un input interattivo
che permetta tramite il tasto freccia di scorrere nella history dei
comandi (anche dopo che sia stato editato qualcosa) o per esempio
introdurre meccanismi di autocompletamento tramite TAB. Insomma
funzionalità di input tipiche disponibili nella maggior parte delle
shell...
Genericamente la domanda è in che modo è possibile realizzare un input
più intelligente del classico modo sequenziale dammi una linea
(getline) e poi elaboro...
Grazie

 shell...
Non l'ho mai utilizzata ma la risposta dovrebbe essere "readline library"
E.

Ciao,
penso che il modo più semplice sia usare la libreria Readline[1] del
progetto GNU, se stai sviluppando software libero. Altrimenti devi
re-implementarne a mano le funzionalità, che è piuttosto noioso.
Idealmente si usano dei dizionari e hash di parole per
l'autocompletamento, magari con un Patricia Trie per velocizzare la
ricerca. Non ho letto il codice di readline, tuttavia...
[1] 
http://tiswww.case.edu/php/chet/readline/rltop.html
Ciao,
Matteo


Grazie mille,
valuterò se utilizzare la libreria che mi avete suggerito.
Saluti
Andrea
Newsgroup: it.comp.lang.c++
Titolo: Sono alle prime armi

Salve, 
sono alle prime armi con il c++, voglio leggere il contenuto di un
file .TXT e mostrarlo a video. Qualcuno mi dà indicazioni?
Grazie

 e mostrarlo a video.
std::cout
:-)
Ciao!

 e' una spamtrap.
Per scrivermi, usate zello <at> despammed <dot> com

Newsgroup: it.comp.lang.c++
Titolo: Realizzare una libreria c++

Gia' da un po' di tempo vorrei realizzare una libreria c++ da usare in 
generale per i miei lavori. Intendo una libreria c++ semplice e 
portabile (win/linux) che, partendo col definire i tipi base, possa 
arrivare a definire le classi di uso piu' comune (stringhe, time/date, 
filesystem, socket, ecc...).
Io non ho grosse pretese, sia chiaro ! Soltanto che non so bene come 
realizzare certe cose. La classe stringa, ad esempio, come la faccio ? 
Con l'unicode o senza unicode ? Con il copy-on-write o senza ?
La gestione dell'unicode e dei locale sono cose pazzescamente complesse 
(e non le conosco neanche bene) !!!!
Qualcuno mi puo' dare qualche suggerimento ?
Grazie.


Esiste già la classe string, che dovrebbe supportare anche unicode e che 
fa già tutto!
ciao!


Era anche un mio intento, ma per ora ho sospeso tutto.
Grossi problemi sono nella struttura del linguaggio c++.
Inoltre se la libreria deve essere portabile è necessario rinunciare a 
tutte le estensioni e comodità sintattiche di g++ e Visual C++
In ambito Windows deve poi essere portabile su Visual C++, Cygwin e 
Mingw32 ?
FreeBSD e QNX non si offenderanno a non essere presi in considerazione ?
E la portabilità futura (ma non troppo) a 64 bit ?
DJGPP per il vecchio DOS ?
Volendo accontentare tutti bisogna rinunciare a molte possibilità che 
ciascun sistema operativo offre.
Mi sono reso conto che veniva una cosa molto grande ingestibile e poco 
efficiente.
Inoltre una "cosa" quasi analoga esiste già fatta e funziona abbastanza 
bene (circa un fattore 2 di perdita di prestazioni) : Java
E se vuoi un sistema efficiente lascia perdere la portabilità.
E se vuoi un sistema completo lascia perdere la portabilità.

 filesystem, socket, ecc...).
Utilizzare qualcosa di gia' fatto, multi-piattaforma (circa 20), open-source
e colludato da molti programmatori nel mondo ?
Oltre alla documentazione HTML e numerosi documenti PDF esistono attualmente
due libri su questa libreria e uno di prossima pubblicazione.
http://www.cs.wustl.edu/~schmidt/ACE.html
Ciao
Fabio

 ha scritto nel messaggio
news:4mMFa.125130$g92.2...@news2.tin.it...

A me sembra un lavoro assurdamente grosso, soprattutto se la vuoi rendere
portabile... hai voglia di dire che no hai grosse pretese.
Comunque, se è a fini didattici, ok, ma se è per utilità, allora ti
consiglio di desistere e di dare un'occhiata a 
www.boost.org
 .
Ciao
Newsgroup: it.comp.lang.c++
Titolo: Archivio con descrizione comandi.

Essendo abbastanza a digiuno di C++, vorrei sapere se esiste un sito o
un archivio scaricabile di tutti i principali comandi in C++ con
descrizione e sintassi.....possibilmente in italiano :-)
Per esempio ora come ora non so cosa facciano fout, ofstream, cerr....
Insomma qualcosa da controllare quando guardo codice di programmi,
ancora troppo complicati per le mie conoscenze :-)
Grazie mille....


Dal sito della Borland si possono scaricare dei files HLP abbastanza ben
fatti.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
Newsgroup: it.comp.lang.c++
Titolo: Template, .h e .cpp

Salve a tutti,
posso separare la dichiarazione di un template di classe e la definizione
delle funzioni membro, mettendole rispettivamente nel .h e nel .cpp?
Nel dubbio, per ora lascio tutto nel .h, ma mi pare di aver letto tempo fa
che non posso separarle. Chi mi aiuta?
TIA.
-- 
 Andrea Spadaccini a.k.a. Lupino
           - Catania -          
Now playing: The Doors - The End

non puoi separare la dichiarazione dal codice.. in quanto il compilatore li
crea li sul posto con quello che trova della classe template.. non va a
cercare il codice da nessun'altra parte
antonio

 che non posso separarle. Chi mi aiuta?
Di fatto non puoi. Quello che puoi fare e' mettere le definizioni
delle funzioni membro in un altro file che includerai in fondo al tuo
.h .
Ciao,
Nicola

 .h .
Ecco, a questo proposito vorrei capire se una certa prassi che ho adottato,
e che (di fatto) funziona con tutti  i compilatori che impiego, è legittima.
In sostanza, distribuisco dichiarazioni e definizioni di un template in due
file diversi, ma il file con le definizioni non viene automaticamente
incluso dall'altro.
Nell'ambito del progetto, determino quali instanziazioni mi servono e
anziché includere il file con le definizioni in ogni punto in cui uso il
template, lo includo in un'unica unità di compilazione ove instanzio
*esplicitamente* i tipi che mi interessano. Negli altri punti includo solo
le dichiarazioni. Questo abbassa i tempi di compilazione e riduce le
dipendenze (ovvero, non devo ricompilare tutto se cambio
un'implementazione).
Naturalmente perché ciò sia possibile devono sussistere alcune condizioni.
Ad esempio, un certo membro di una classe template potrebbe non essere
istanziabile per un certo tipo: fin quando quel membro non è usato, il
template è instanziabile in modo normale, ma non in modo esplicito, giacché
in questo caso tutti i membri vengono forzatametne instanziati.
Max

...

Perfettamente legittimo, anche se a volte tener traccia di tutte le
istanziazioni e' noioso, e forzando l'istanziazione completa aumenta
il codice generato.
Io uso una tecnica simile per esportare template da librerie
dinamiche.
Ciao,
Nicola

 funzioni membro in un altro file che includerai in fondo al tuo .h .
Grazie mille, questa è un'ottima idea, che credo applicherò non appena la
mia classe matrix inizierà a crescere! :)
-- 
          Andrea Spadaccini a.k.a. Lupino         
                    - Catania -                   
Linux Registered User #313388 - Mandrake Linux 9.1
Newsgroup: it.comp.lang.c++
Titolo: ioProgrammo [1/2 OT]

Buongiorno a tutti. 1/2 Ot perchè con la programmazione ha a che fare, ma
programmazione in generale.
Su un numero di IoProgrammo (so che è di luglio, ma non ricordo se 2000 o
2001) era uscito un articolo
che dava le prime basi per la grafica 3d, dimostrando come fosse possibile
passare da una rappresentazione
3d sui tre assi "xvz" alla 2d sullo schermo "uv". La mia domanda è semplice:
qualcuno ha quella rivista?
E' davvero importante.. su internet non sono riuscito a trovare nulla,
neanche sul sito di ioprogrammo, che
a quanto pare ha gravi problemi nel modulo per la ricerca (non funziona
mai...)
Grazie a tutti, Augusto

 programmazione in generale.
A me sembri del tutto OT. Questo non è it.comp.programmare ma
it.comp.lang.c++ e il tuo post con lo standard C++ proprio non c'entra
nulla.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

qualcuno ha quella rivista?
Se non ricordo male, non mi va di mettermi a fare calcoli:
Dati P3d(x3,y3,z) e P2d(x2,y2) si ha:
x2 = x3 * h / (h + z)
y2 = y3 * h / (h + z)
p.s.: al tuo 1/2 OT aggiungine un altro 1/2: questo problema
non c'entra nulla col C++.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it
Spostare "Windows" nel cestino ?

 ha scritto nel messaggio
news:a1i820$qsnej$1...@ID-94218.news.dfncis.de...


 Furboni.
Ok, torna al visual basic... 
-- 
Luc.

 Furboni.
Per poter esigere educazione, bisogna essere educati per primi.
Ciao,
Nicola

 Luc.

questo gruppo, in modo da evitare perseveranze diaboliche.
Aggiungo che questo ng in periodi di troppa tolleranza tende ad essere
velocemente sommerso dagli OT, molto di più di altri gruppi.
-- 
Marco Barisione (ICQ 84277092)

 GRAZIE A TUTTI, AUGUSTO.
guarda che ti si e' incastrato il dito nel caps lock
Follow-up appropriato
--
Gerolamo

 "Non si puo' essere un po' incinta".
ROTFL!
questa me la segno... :-)
--
Gerolamo

 Furboni.
Per esempio lo smiley e il "Furboni" gratuitamente ribadito sono segni
di grande scortesia.


 INVECE DI CRITICARE E BASTA
Tra parentesi, ti rendi conto che stai violando un'altra norma della
netiquette? Non si deve postare in maiuscolo. In ogni caso ti è già
stato detto. Vuoi un arretrato di una rivista? Rivolgiti alla redazione
della stessa.


 e nessuno, dico NESSUNO, ha protestato in alcun genere.
Troppo buoni, secondo le regole di Usenet, o forse troppo
stanchi.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

va bene.. avete ragione.
chiedo scusa al news, ma per favore basta dai..
mica volevo creare tutte queste discussioni..
scusate ancora, Augusto


Ahime', non l'ho inventata io. Io l'ho letta in origine su un libro di
Robert Heinlein.
Cheers,
Nicola Musatti

Newsgroup: it.comp.lang.c++
Titolo: Array flessibili.

Salve a tutti.
Vorrei sapere come si possono implementare gli array flessibili in C++.
Bisogna costruirsi un classe apposita oppure ne esiste gia una ?
Grazie in anticipo per le risposte.

 Bisogna costruirsi un classe apposita oppure ne esiste gia una ?
std::vector<>.
Max
Newsgroup: it.comp.lang.c++
Titolo: array variabile

Ciao a tutti,
vorrei creare una classe di questo tipo:
é una classe di imput output che legge da file sequenzialmente dei valori e
li memorizza in un array.
Ora io non so se questi dati siano double, float o int e vorrei creare un
array che a seconda del tipo di dato che riceve automaticamente diventa un
array di interi, o double o char insomma senza dover dichiarare una cosa di
questo tipo:
class I_O{
int buff[];
float Buff[];
char Buff[];
double Buff[];
.........
}
ma qualcosa del genere;
class I_O{
 Tipodato Buff[];
.......
}
vi posto la mia idea con un template ma credo sia una castroneria cmq al
limite mi becco degli insulti....che piů sono cattivi piů ti insegnano (ma
non spaziateci)
template <class TipoDato>  //sceglie il buffer da creare in relazione ai
dati che riceve
TipoDato* tipodato(TipoDato* tipodato){
 TipoDato *Buffer=tipodato;
 return Buffer;
}
class RWData{
private:
 int n;
 TipoDato Buffer[n];//crea un buffer di un det.tipo
public:
    RWData(const char *nomeFile, int n)
 void read_Data();
 void WriteData();
};
Sono scemate??? oppure sono vicino ad un qualcosa di sensato magari non
proprio cosě???? confido in voiii..
grazie mille spero un giorno a buon rendere..

 ha scritto nel messaggio
news:REUnc.11342$CP6....@tornado.fastwebnet.it...


 > li memorizza in un array.
Perchè vuoi creare qualcosa che esiste già e funziona bene? std::vector
Newsgroup: it.comp.lang.c++
Titolo: Libreria Dinamica

Salve,
cerco di rimanere nel generico per non finire OFF TOPIC...
Sto creando una classe che mi consente la gestione di protocollo HTTP 
per un'applicazione che deve essere multipiattaforma.
Ora, alidilà del fatto che potrei cercare una libreria già fatta, vorrei 
provvedere da solo.
Avrei pensato di creare una classe base con i determinati metodi 
virtuali puri ( es.: SetParameterInfo() ) da reimplementare nelle classi 
che implementano i socket necessari ( es.: UnixSocket - WinSocket ); fin 
qui tutto bene.
Il fatto è che vorrei che le due implementazioni siano rispettivamente 
in una libreria .so sotto linux ed in una dll per Windows, linkate 
dinamicamente ( cosa che farei da makefile ).
Il problema è il seguente: come faccio ad esportare delle CLASSI ???
In giro sul web riesco a trovare *soltanto* tutorial riguardanti 
l'esportazione di funzioni, mentre non ho trovato niente per esportare 
una classe.
Mi dareste qualche dritta =
Grazie,
j0k3r


Se vuoi creare una serie di classi exportabili questo puo' essere un modo:
//
// HTTP.h
//
#if defined(_WIN32)
   #ifdef MYLIBNAME_EXPORT
      #define MYLIBNAME_DECL __declspec(dllexport)
      #define MYLIBNAME_TEMPLATEINST
   #else
      #define MYLIBNAME_DECL __declspec(dllimport)
      #define MYLIBNAME_TEMPLATEINST extern
   #endif
   #pragma warning (disable : 4018)
#else
   #define MYLIBNAME_DECL
   #define MYLIBNAME_TEMPLATEINST
#endif
class MYLIBNAME_DECL HTTPClient
{
// ... implementation here !!!
};
class MYLIBNAME_DECL HTTPServer
{
// ... implementation here !!!
};
WIN32:
per creare la DLL e' necessario definire MYLIBNAME_EXPORT con la seguente
opzione di compilazione
/D "MYLIBNAME_EXPORT"
per usare la DLL basta includere il file .h (HTTP.h) e linkare lo stub file
generato .lib
LUNUX:
per creare la SO e' necessario compilare il sorgente .cpp o .cc utilizzando
con la seguente opzione di compilazione (-fpic)
gcc -fpic -c HTTPClient.cpp
gcc -fpic -c HTTPServer.cpp
e linkare con la seguente opzione (-shared)
gcc HTTPClient.o HTTPServer.o -shared -o libHTTP.so
SOLARIS:
per creare la SO e' necessario compilare il sorgente .cpp o .cc utilizzando
con la seguente opzione di compilazione (-Kpic)
CC -Kpic -c HTTPClient.cpp
CC -Kpic -c HTTPServer.cpp
e linkare con la seguente opzione (-G -Bdynamic)
CC HTTPClient.o HTTPServer.o -G -Bdynamic -o libHTTP.so
Se vuoi creare un'interfaccia (classe astratta pura) la cui implementazione
(classe concreta) e' caricata dinamicamente il procedimento e' diverso e
puoi trovare una traccia qui:
http://www.linuxjournal.com/article.php?sid=3687
Lo stesso principio e' portabile su WIN32
Ciao
Fabio
Newsgroup: it.comp.lang.c++
Titolo: Link ad un sito con Borland C++ Builder

Salve, vorrei sapere come faccio a rendere una normale label
in un oggetto che se ci clicco sopra mi si collega ad un sito!!!
Grazie!

Gestisci l'evento OnClick della label e chiami il metodo ShellExecute
passando come parametro l'indirizzo del sito.
--
Stefano Tempesta
TSoft - 
www.tempesta.org
in...@tempesta.org

 passando come parametro l'indirizzo del sito.
Non basta l'indirizzo del sito, la funzione vuole altri parametri ma non
capisco quali, nell'Help non ho trovato niente. Se vorrai aiutarmi sarň
felice.
Grazie

>nell'Help non ho trovato niente
Come sarebbe a dire non ho trovato niente!!!
ShellExecute è un' API di Windows... c'è un file hlp di decine di Mb a
riguardo!!!
Comunque:
void __fastcall TForm1::Label1Click(TObject *Sender)
{
    ShellExecute(Handle, "open", "
http://www.tempesta.org
", 0, 0,
W_SHOWNORMAL);

Newsgroup: it.comp.lang.c++
Titolo: Compilatore Borland C++ 5.5

Salve ,
ho scaricato dal sito di Borland il compilatore in oggetto .
Sul mio HD ho installato il 5.02 e il Builder 3 .
Suppongo che il 5.5 aggiorna solo il Builder 3 .
Come faccio per aggiornarli ? Copio semplicemente i file del 5.5 nelle
rispettive directory ?
grazie . 

Suppongo che il 5.5 aggiorna solo il Builder 3 .
Dubito che aggiorni il BCB3, poiché non supporta VCL...
Ciao.
DGP85

Newsgroup: it.comp.lang.c++
Titolo: [MS] - Informatica - PROGRAMMATORI

Stiamo urgentemente 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

Marco,
i tuoi messaggi di ricerca di personale sono off-topic in questo
newsgroup. Non ti ho risposto prima perche' possono comunque interessare
a qualcuno. Ti inviterei pero' ad evitare di ri-inviare lo stesso
messaggio tutti i giorni, visto che di norma i server news mantengono i
messaggi per almeno un paio di settimane.
Ciao,
Nicola

Newsgroup: it.comp.lang.c++
Titolo: Chiarimento su gestori di eccezioni

Ma un gestore di eccezione, cioè il corpo di catch() {...}, non è una 
funzione come tutte le altre ? Ve lo chiedo perchè mi sono accorto che può 
accedere alle variabili locali del main() !! Mi spiego meglio:
int main() {
  int variabile_locale(0);
  try {
    //...
  }
  catch(...) {
    variabile_locale=1;
  }
  //...
}
Questo codice compila senza alcun warning con g++ -Wall, e funziona 
perfettamente.
Mi date qualche chiarimento ? :)
-- 
LF

"LF" <l...@lf.invalid> ha scritto nel messaggio
news:bs943h$k9o$1...@lacerta.tiscalinet.it...

va bene infatti il catch è come un normale insieme di istruzioni racchiuso
fra { }, quindi può accedere alle variabili definite al suo interno, ma
anche a quelle definite nel blocco che lo contiene.
--
Pela

 accedere alle variabili locali del main() !! Mi spiego meglio:
E' ovvio...
La catch è una specie di funzione, ma non proprio;
è più che altro da vedersi come un blocco composto di istruzioni. In quanto
tale è normale che vede tutte le variabili nel blocco in cui è definito! (Il
main è da considerarsi come il blocco padre in cui è definito il catch o
un'altro blocco).
Viceversa, ciò che è dichiarato nel blocco catch, non è visibile all'esterno
del blocco padre (main in questo caso).
Ciao
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Grazie a tutti, mi avete chiarito le idee !! :)
-- 
LF
Newsgroup: it.comp.lang.c++
Titolo: Ovvieta' sui costruttori

Scusate se il problema e' estremamente banale.
class Star {
  public:
  Star() { }
  Star(int u) { }
  Star(Star& p) { }
  Star& operator=(Star& Y) { }
  };
int main() {
  Star myStar = Star(8);
  }
A me sembra corretto ma al compilatore non piace:
star.cpp: In function `int main()':
star.cpp:11: error: no matching function for call to `Star::Star(Star)'
star.cpp:5: error: candidates are: Star::Star(Star&)
star.cpp:4: error:                 Star::Star(int)
Non capisco perche' non chiami Star::Star(int) e poi, eventualmente,
il costruttore di copia. Qualcuno mi illumina?
Grazie.

 star.cpp:4: error:                 Star::Star(int)
Il costruttore di copia usa un *const* reference, quindi un costruttore 
di copia ben definito e' del tipo:
// Notare il *const*
Star::Star( const Start & )
Inoltre, io tendo a usare l'ottima keyword explicit [a meno che non hai 
motivi per non usarla; secondo me il "default" e' "usarla"], quindi:
explicit Star( int );
Spesso l'uso di explicit risolve parecchi problemi!
Ciao,
Dan

 Spesso l'uso di explicit risolve parecchi problemi!
Grazie per la risposta!
Newsgroup: it.comp.lang.c++
Titolo: I dubbi di un vecchio programmatore...

Per ragioni didattiche (e perchè sono un vecchio programmatore...)
sto cercando di utilizzate C++ Builder 3.0 a linea di comando,
separando la fase di compilazione da quella di linking
Dunque setto i path della finestre dos del mio windows98 (sic!) nella
seguente maniera:
SET
PATH=c:\util;D:\CBUILDER3\bin;D:\CBUILDER3\lib;d:\Cbuilder3\include;D:\Cbuilder3\lib\obj;d:\Cbuilder3\example\wintools
(essendo il cbuilder installato in C:\CBuilder3\)
poi mi metto in una mia directory di C:\
(verifico x sicurezza che i path siano ok)
e preparo il mio file (il mitico Hello, world) dal nome b.c
Al comando >bcc32 b.c
il compilatore compila, linka e genera il .obj e il .exe che funzione,
eventualmente con anche le mappe di link corrette
Al comando >bcc32 -c il compilatore comila e genera il .obj
Al comando >tlink32 b.obj il compilatore non trova il riferimento
esterno per _printf e non trova l'entry_point del programma (quindi
non riconosce la funzione _main)
Voi direte: setta i path delle librerie... ma sono già settati,
mannaggia...
Dopo molte prove sto per inkazzarmi ma mi chiedo: sono coglione io o
cosa succede?? 
Grazie in anticipo...


Lo sto facendo anch'io col BCB 4.0 Pro...
Hai setato i file bcc32.cfg e ilink32.cfg?
Qua ci sono i miei:
bcc32.cfg
-ID:\Programmi\CBuilder\Include;D:\Programmi\CBuilder\Include\vcl
-LD:\Programmi\CBuilder\Lib;D:\Programmi\CBuilder\Lib\obj
ilink32.cfg
-LD:\Programmi\CBuilder\Lib;D:\Programmi\CBuilder\Lib\obj
e la PATH ovviamente alla directory BIN. Ti consiglio un editor
esadecimale integrato, io uso UltraEdit che ha il DOS Prompt e cattura
l'output dei programmi (e non solo le ultime 24 righe....) e ti assicuro
che è leggero anche per un P60 (provare per credere...)
-- 
Ciao, gengisdave
http://digilander.iol.it/gengisdave
Linux Registered User    # 198292
Linux Registered Machine # 88280


Mi è arrivata un'ottima risposta su it.comp.programmare.win32 e
funziona..
Il thread si chiama sempre "I dubbi di un vecchio programmatore..."
Ciao
Fabio
Newsgroup: it.comp.lang.c++
Titolo: Newbie: <<endl

Scusate la domanda da newbie, ma in alcuni
sorgenti c'e' "<<endl" in altri no.
E' indispensabile? Di cosa si tratta?
Grazie
Ciao

"Ale55andro" <AleXander.NoSpa...@albacom.IT> wrote in message
news:is1g2v0fvefhgaqhb...@4ax.com...

E' il vecchio '\n' del C, con il flush.
In pratica viene chiamato manipolatore (scusate la traduzione) e quando
viene inserito in un output stream ( << endl;)
inserisce il carattere di new line e fa un flush del buffer.
Per questo a volte, se si fa una cout senza mettere l'endl alla fine non si
vedono le scritte a video.
Non essendoci ancora un flush, le scritte rimangono nel buffer.
Maurus

vedono le scritte a video.
Ora ho capito.
Infatti, ho devi vecchi appunti presi dalla rete nel '97
in cui leggo, per esempio:
cout << x << '\n';
Quindi credo che siano equivalenti,
Ciao e grazie

 Quindi credo che siano equivalenti,
Come ti ha appena detto Maurus......
<QUOTE>
E' il vecchio '\n' del C, con il flush.
[cut]
Per questo a volte, se si fa una cout senza mettere l'endl alla fine non si
vedono le scritte a video.
Non essendoci ancora un flush, le scritte rimangono nel buffer.
</QUOTE>
In pratica non del tutto vero quello che affermi.
Tommy

Newsgroup: it.comp.lang.c++
Titolo: Dubbio su variabili statiche

Allora dal mio libro credo di aver capito che:
-Le variabili statiche sono indipendenti dall'istanziazione di oggetti della
classe, e che quindi sono comuni a tutti gli oggetti della stessa classe.
-Per operare su di esse le funzioni membro devono essere a loro volta
dichiarate statiche.
Partendo da ciò ho provato a modificare una variabile statica non da
funzioni membro statiche, ma da funz. membro normali o
costruttori/distruttori....e scopro che anche loro modificano le variabili
dichiarate statiche!!
Ma allora a che serve dichiarare una funzione statica, se poi è possibile
modificare le variabili statiche anche da una funzione membro classica?
Grazie anticipatamente.

 modificare le variabili statiche anche da una funzione membro
classica?
Dichiarare un dato statico serve a renderlo comune a tutte le istanze e
a potervi accedere (se visibile) anche senza avere una istanza di quella
classe. Dichiarare un metodo statico serve solo a poterlo richiamare
(sempre se visibile) anche senza bisogno di avere una istanza di quella
classe.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 membro classica? Grazie anticipatamente.
Classico esempio:
class Prova {
        static int count;
public:
        Prova() {
                count++;
        }
        ~Prova() {
                count--;
        }
        static int num_of_prova() { return count; }
};
Questo e` il codice idiomatico per contare il numero di istanze 
attualmente costruite di una determinata classe.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it
Newsgroup: it.comp.lang.c++
Titolo: Trovare C++ Builder 3.0 ?

Ho iniziato da poco un corso su C++ e per esercitarmi a casa mi servirebbe
questa versione che poi utilizzano anche nel corso.
Ho saputo che la Borland rilascia questa versione gratuitamente su alcune
riviste.
Qualcuno mi può indicare quali ?
Grazie in anticipo
Andres

...

Newsgroup: it.comp.lang.c++
Titolo: Nuova versione SDK engineSMS Vodafone

Ciao,
vi informo che è stata rilasciata la nuova release in oggetto,
che adesso ha il completo supporto per le SIM multiple 
registrate nell'account vodafone.
E' stata rilasciata anche una nuova versione del software
di gestione SMS/contatti (solo per linux) goLinuxSMS.
Link:
http://www.kuht.it/modules/mydownloads/viewcat.php?cid=49&orderby=hitsA
cercare "goSMS"
Ciao

Sei completamente OT. Per favore, posta su un altro newsgroup. Qua si
parla di c++ standard

Newsgroup: it.comp.lang.c++
Titolo: operatore << e funzione get

Buonasera a tutti,
dopo averci sbattuto la testa tutto il pomeriggio, posto questo quesito qui, 
sperando di trovare qualche delucidazione!
Molto semplicemente, ho due istruzioni:
            cin.get(a,5,' . ');
            cin>>b;
 con a e b array di caratteri.Finché inserisco da tastiera una sequenza di 
caratteri, seguita dal punto(ad es. "pippo."), va tutto bene, nel senso che 
memorizza "pippo"(seguendo l'esempio) in a, e poi il punto ' . ' in b.La 
particolarità nasce nel momento in cui, digito esclusivamente il punto e 
batto invio:un successiovo test sugli array a e b, mostra che ambo gli array 
sono vuoti!!!
Ma come?Che a sia vuoto ok...Ma b? Non dovrebbe valere punto(' . ')?Insomma 
get memorizza tutto prima del punto, cioè nulla, e lascia sullo stream il 
punto, che con cin>>b dovrebbe essere memorizzato in b, fatto che però non 
accade!Che succede, cosa c'è nello stream che genera questo comportamento?
Buona sera a tutti, e grazie mille in ogni caso!
Ciao a tutti,
            Giuseppe 

 comportamento?
"Purtroppo" la funzione cin.get(...) nel caso incontri subito il 
delimitatore, setta lo stato dell'istream a iosbase::failbit, perchč di 
fatto non ha memorizzato alcun carattere. A questo punto anche l'operatore 
 >> esce senza leggere piů alcun carattere. Questa caratteristica č stata 
data a tutte le operazioni di input della classe istream (compresi getline, 
operatore >> ecc.), in modo tale che l'utente possa richiamare la funzione 
fail() e lanciare un'eccezione nel caso un' operazione di input non vada a 
buon fine. Se sei sicuro che la stringa in ingresso (a) sia valida, anche se 
ha zero caratteri, puoi ovviare al problema in questo modo:
cin.get(a,6,'.'); //all'uscita puň settare lo stato dell'istream a failbit 
(nel caso non legga alcun carattere)
cin.clear(ios::goodbit); //forza lo stato a goodbit
cin>>b; //legge il delimitatore
Ciao
Andrea

 Andrea
Ciao
Giuseppe
Newsgroup: it.comp.lang.c++
Titolo: PlaySound(..)

Salve a tutti,
 Qualcuno sa dirmi come mai il mio VC++ 5.0 quando linka del codice
 in cui c'è una funzione PlaySound(..) mi da un errore del genere:
Linking...
MainFrm.obj : error LNK2001: unresolved external symbol
__imp__PlaySoundA@12
Debug/prova.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
?
Grazie a chiunque mi da una mano.
                                                    Mimmo

Error executing link.exe.
Evidentemente la funzione PlaySound *NON* c'e`, o se c'e` non e` dove e
come la sua dichiarazione dice che deve essere (importata da una DLL,
di tipo ``extern "C"'', ASCII piuttosto che Unicode, e con 12 byte
di argomenti, direi).  Forse non hai incluso nel link la winmm.lib?
Alex
--
 ____    Alex Martelli, Bologna, Italia -- email: 
al...@magenta.com
 \SM/___                                 
http://magenta.com/~alex
  \/\bi/     You never know what is enough unless you know what
     \/          is more than enough.

Newsgroup: it.comp.lang.c++
Titolo: Domanda sulle DirectX

Qulcuno sa come scrivere programmi per le DirectX usando il Borland C++ 5.0?
Sapete se esistono delle librerie di classi compatibili con le OWL che
consentono di usare le DirectX?
rispondetemi anche in mail perfavore...

consentono di usare le DirectX?
Lavorare con le DirectX usando il Borland C++ 5.0 o il Microsoft VC++ è la
stessa cosa. Ti basta utilizzare le librerie apposite per i compilatori
Borland fornite con l'SDK e il gioco è fatto.
DirectX lavora attraverso delle interfacce COM quindi non hai bisogno di
alcuna libreria di classi compatibili col tuo compilatore per poterle fare
funzionare.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------

Newsgroup: it.comp.lang.c++
Titolo: ACCU

Salve a tutti.
Vorrei sapere se  qualcuno è membro dell'ACCU (
http://accu.org/
) e quali 
sono i reali vantaggi a farne parte.
Mi interessa in particolare avere dei commenti sui *Mentored Developers 
Projects* da qualcuno che vi ha partecipato.
Grazie.
Marco.

 Projects* da qualcuno che vi ha partecipato.
La mia esperienza diretta e' negativa: tempo fa avevo partecipato ad un
gruppo di lettura su "Modern Compiler Design", di Grune & C. ma il
progetto si e' rapidamente sfaldato. In cambio altri progetti hanno un
discreto successo ed alcuni sono gia' all'ennesima iterazione.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Tasti

Cioa a tutti,
volevo sapere come disattivare la pressione contemporanea di piu' tasti.
Mi causa problemi con il movimento e le collisioni in un mio giochino
2D.
io uso questo, ma non funziona:
case WM_KEYDOWN:
{
  key[wParam]=TRUE;
  while(::PeekMessage(&msg,hWnd,WM_KEYDOWN,WM_KEYDOWN,PM_REMOVE));
  return 0;
}
qualche alternativa ?
Grazie.
Ciao.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 case WM_KEYDOWN:
Questo NG e' di C++, non e' di programmazione windows, a te e' questo che
serve. Quindi posta su it.comp.programmare.win32. Su questo NG sei OT.
Detto questo.... WM_KEYDOWN non e' molto adatto per fare giochi....
Tommy

Newsgroup: it.comp.lang.c++
Titolo: [HELP!] Visual C++

Salve
devo realizzare un programma per scuola e ho il seguente problema:
    "creare un 'applicazione MFC nella quale la finestra principale
contenga un certo numero di bottoni. Tali bottoni devono essere
oggetti indipendenti  e capaci di ricevere messaggi"
come posso fare per risolvere?
Grazie in anticipo per gli aiuti che siete disposti a darmi 
Ciao
    MAXIMORTAL
-- 
"Fino a oggi nessuno è stato capace di di indovinare
lo stato di un uomo passandogli semplicemente accanto;
se si potesse, la gente non farebbe altro
 che urlare per le strade."
- Cornell Woolrich

    "creare un 'applicazione MFC [...]
Sei OT, vai su it.comp.programmare.win32, ma difficilmente ti
risponderanno visto che č un compito per scuola.
-- 
Marco Barisione (ICQ 84277092)

risponderanno visto che č un compito per scuola.
Ah, scusate. Grazie per l'informazione.
Ciao
    MAXIMORTAL
-- 
"Fino a oggi nessuno č stato capace di di indovinare

Newsgroup: it.comp.lang.c++
Titolo: Cerco compilat. CPP x DOS 32bit

Ho sentito dire che ci sono dei compilatori ( GNU ) in grado di compilare
per intel 386 in real mode con addressing a 32 bit sfruttando una
undocumented facility del micro intel.
Gradirei saperne di più ed in particolare:
- se quanto ho sentito é effettivamente implementato
- link per scaricare
- avrei bisogno di un debugger
Grazie, Wolfy

 undocumented facility del micro intel.
Non mi risulta.
C'era un compilatore gnu che generava codice a 32 bit per DOS. 
Il programma partiva in modo reale, poi passava in modo protetto
a 32 bit, ma sempre con istruzioni documentate.
	Mauro

...



Ogni Intel dal 386 in su parte in modalita' reale, anche se
effettua il fetch della prima istruzione da 0xFFFFFFF0.
L'istruzione immediatamente seguente si trova di solito nel bios
ed e' una istruzione che deve impostare il registro di segmento
CS con un FAR JMP CS:IP [codifica EA XX XX YY YY ].
Poi il bios fa tutte le sue amenita' in modalita' reale.
Quando si tratta di portare il processore il modalita' protetta,
e' pur vero che si tratta di un bit nel registro cr0, ma occorre
predisporre almento la "dummy" global selector table, dato che
altrimenti ogni istruzione che comporta un "seletor lookup",
cioe' un caricamento di un registro di segmento, causerebbe violazione
e halt del processore.
Quando si predispone la dummy selector table, vi e' un bit
nella struttura dati selector che spefifica il default operand size.
Ora si ha che il default operand size puo' essere a 16 o a 32 bit.
Ad esempio l'istruzione mov ax,1 ha la codifica
"db 01 00" a 16 bit, e "db 01 00 00 00" a 32 bit [Non ricordo se sia db,
sto andando a memoria]. Ora quando il puntatore ad instruzione e'
sul punto di leggere "db", il bit del default operand size dice al
processore se leggere altri 2 o altri 4 byte. Questo comportamento
puo' essere modificato sia a 16-bit reali che a 32-bit con il prefisso
di modifica di dimensione dell'operando "66" [sempre a memoria].
Questo vale ovviamente per i dati e per gli indirizzi.
Con gli indirizzi si ha ancora il problema della dummy descriptor table,
dato che "66 ea XXXXXXXX YYYY" [operando 32bit, far jmp EIP : CS] necessita
di un descrittore indicizzato da CS comunque valido.
Resta da dire che i passaggi da moadlita' reale a protetta e ritorno,
vanno fatti ad interruzioni disabilitate, dato che in modalita' protetta
il "vettore" di interruzione viene calcolato come indice nella
Interrupt descriptor table, e non come offset dall'inizio della memoria
dal quale caricare CS:IP.
Se arrivi anche a impstare una IDT per tutte le interruzioni, allora sei
sulla buona strada per fare un SO.