TURBO C++: RISPOSTE A DOMANDE COMUNI
TURBO C++: INTRODUZIONE
-------- ----- ------ -------- ----- ------ ----
D. Come si installa Turbo C++?
R. Si esegua il p 22322d322w rogramma INSTALL dal disco INSTALL/HELP. Per
iniziare l'installazione, si cambi l'unit. corrente in quella
che ha il programma di installazione e si digiti INSTALL.
In una casella nella parte inferiore dello schermo verranno
fornite le istruzioni di ogni messaggio di richiesta. Ad
esempio, se si sta eseguendo l'installazione dall'unit. A:,
si digiti:
A:
INSTALL
A questo punto, il programma INSTALL apparir. con le selezioni
e le descrizioni dei menu per guidare attraverso l'operazione
di installazione.
D. Come si esegue Turbo C++?
R. Dopo aver installato Turbo C++, si digiti "TC" sulla riga di
comando del DOS e si sar. pronti a procedere.
D. Qual'S la differenza tra TC.EXE e TCC.EXE?
R. Il pacchetto di Turbo C++ S dotato di due compilatori, un
ambiente di sviluppo chiamato TC.EXE e un compilatore a riga
di comando chiamato TCC.EXE. L'ambiente di sviluppo combina
il compilatore a riga di comando con l'editor integrato, il
linker, il debugger, e altre utili funzionalit. (come i menu
a comparsa e quelli a tendina e la gestione del mouse e cos
via). La versione della riga di comando esegue dalla riga di
comando del DOS. Si rimanda a TURBO C++: GUIDA ALL'USO per
dettagli sull'uso di entrambi i sistemi.
D. Cos'S un file di configurazione?
R. Un file di configurazione indica a Turbo C++ quale opzioni
usare come di norma e dove cercare la sua libreria e i file
header. TC.EXE cerca un file di configurazione chiamato
TCCONFIG.TC, e TCC.EXE cerca un file chiamato TURBOC.CFG.
D. Come si crea un file di configurazione?
R. Quando si esegue il programma INSTALL esso crea un file di
configurazione chiamato TURBOC.CFG per TCC.EXE. Questo file
S un file ASCII che si pu. modificare con qualsiasi editor
di testo e contiene le informazioni di percorso per la libreria
e i file header che TCC.EXE deve usare. Il programma INSTALL
non crea un file TCCONFIG.TC per TC.EXE perch, installa le
informazioni delle directory direttamente in TC.EXE. Si pu.
creare un file di configurazione per TC.EXE eseguendo Turbo
C++, impostando le opzioni dove si vuole, e digitando Alt-O/S.
A m b i e n t e d i s v i l u p p o
-------- ----- ------ -------- ----- ------ ----
D. Perch, Turbo C++ non S in grado di trovare alcun file di
inclusione?
R. Il compilatore ricerca i file di inclusione nel percorso Include
Directories del Turbo C++. Si pu. specificare questo percorso
attraverso il menu Options|Directories. Il programma INSTALL
all'inizio imposta questo percorso nella directory dove ha
copiato tutti i file *.h di Turbo C++.
D. Perch, si riceve il messaggio:
Linker Error: Unable to open input file 'C0x.OBJ'?
R. Il linker ricerca i file di avviamento e di libreria di Turbo
C++ nel percorso Library Directories di Turbo C++. Si pu.
specificare questo percorso attraverso il menu
Options|Directories. Il programma INSTALL inizialmente imposta
questo percorso nella directory dove ha copiato i file di
avviamento e di libreria.
D. Com'S possibile far collegare a Turbo C++ le librerie o usare
file sorgente multipli?
R. L'installazione del progetto di Turbo C++ S progettata in modo
da lavorare con file multipli.
D. Perch, il linker continua ad indicare che tutte le routine di
libreria grafica non sono definite?
R. La voce di Options|Linker|Graphics Library deve essere
impostata a ON, se si sta usando qualsiasi funzione grafica
di Turbo C++ e non si S specificato GRAPHICS.LIB in un file
progetto.
D. Perch, Turbo C++ segnala "Unable to open include file 'stdarg.h'"
quando si cerca di includere <stdio.h>?
R. La ragione pi- probabile S che si S superato il numero di file
che il DOS pu. aver aperto simultaneamente. Si aggiunga la riga
FILES=20
al file CONFIG.SYS del DOS. Questa consente al DOS di aprire
fino a 20 file allo stesso tempo. CONFIG.SYS sar. effettivo solo
dopo aver ricaricato il computer. Si veda IBM DOS Reference
Manual per i dettagli sul file CONFIG.SYS.
D. Come si cambiano i colori dell'editor e i menu in TC?
R. Il programma di servizio TCINST.EXE consente di configurare
i colori.
D. Come si pu. inviare un listato del codice sorgente alla stampante?
R. All'interno dell'editor di Turbo C++ si prema Ctrl-K-P. Questo
consentir. di stampare un blocco marcato sulla stampante. Se
nessun blocco S marcato, questa sequenza di tasti stamper.
l'intero file nell'editor.
D. Quando si effettua il make, si esegue o si traccia un
programma, a volte Turbo C++ compila o esegue il linking
anche quando i file oggetto sono aggiornati.
R. Il make logico di Turbo C++ funziona soltanto in base all'ora
e alla data del file. Se uno dei file sorgente S marcato
con una data futura, i file oggetto che esso crea saranno
sempre pi- vecchi del file sorgente, e Turbo C++ cercher.
sempre di ricostruire il file. Si pu. fissare la data e l'ora
usando TOUCH.COM per impostare il file alla data e all'ora
corrente. Si dovrebbe anche accertarsi che la data e l'ora
del sistema siano sempre impostate correttamente. TOUCH.COM
S documentato nel file UTIL.DOC.
D. Come mai i vecchi file progetto di Turbo C++ non funzionano
pi-?
R. I file progetto ora contengono molte pi- informazioni su un
progetto, ed ormai non sono pi- memorizzati in formato ASCII.
Per creare un file progetto, si selezioni PROJECT dal menu
principale, e si seguano i menu. Per convertire i vecchi file
progetto nel nuovo formato, si pu. usare il file del
programma di servizio PRJCNVT.EXE (documentato in
UTIL.DOC).
D. Come si possono convertire i file di progetto di Turbo C 2.0
nel nuovo formato?
R. Esiste un programma di servizio di conversione nella directory
BIN di Turbo C++ chiamato PRJCNVT.EXE. Questo programma
eseguir. la conversione.
D. Come mai il file progetto viene caricato automaticamente
quando si avvia TC? Si desidera lavorare su un programma
diverso.
R. Se esiste un solo file progetto nella directory corrente,
Turbo C++ caricher. e user. quel file. Se non esistono dei
file progetto, o se esistono pi- file progetto, Turbo C++
non ne carica uno automaticamente.
D. Il pulsante destro del mouse sembra non svolgere alcuna
azione. Si pu. modificarlo in modo che imposti i punti di
arresto?
R. S, sotto il menu di Options|Environment|Mouse vi S una
finestra di dialogo per il pulsante destro del mouse. Si pu.
modificarlo affinch, imposti i punti di arresto, o faccia
molte altre cose.
D. Com'S possibile far usare a Turbo C++ memoria estesa o
espansa?
R. Quando si chiama Turbo C++, si usi l'opzione /X per la memoria
estesa ed /E per quella espansa.
D. Come si pu. scoprire dove si sta verificando l'assegnamento
del puntatore nullo segnalato dal messaggio "Null pointer
assignment"?
R. Si pu. impostare un punto di osservazione sull'espressione
seguente:
*(char *)0,4m
(char *)4
Si pu. eseguire passo a passo il programma. Quando cambiano i
valori, la riga appena eseguita S quella che sta provocando
il problema.
D. Quando si compila il programma, si riceve il seguente
messaggio di errore:
Error: C:\TC\INCLUDE\STDIO.H: Overlays only supported in
medium, large, and huge memory models
Cosa sta succedendo?
R. L'opzione Overlay Support S stata selezionata e non funziona
nei modelli di memoria tiny, small, o medium.
Questa opzione pu. essere disattivata con:
Options|Compiler|Code Generation|Overlay Support
D. Quando si cerca di caricare un nuovo file dopo aver redatto
un file, il primo file resta sullo schermo. Come si chiude
il primo file?
R. Si usi Alt-F3 per chiudere il file corrente. Inoltre, si pu.
usare F6 per spostarsi da un file a quello successivo, se ve
ne S pi- di uno aperto alla volta.
D. Si sta svolgendo l'operazione di ricerca e di sostituzione,
e l'editor chiede conferma per ogni sostituzione. Pur avendo
selezionato "Change All", la richiesta di conferma viene
presentata. Perch,?.
R. Per disattivare la richiesta, non si deve selezionare
l'opzione "Prompt on replace" a sinistra della finestra di
dialogo.
D. Quando si cerca di usare uno qualsiasi dei pseudo registri,
come _AX, compare il messaggio di errore "Undefined symbol
'_AX' in function..." quando si compila. Perch,?
R. Si possono usare i pseudo registri solo in Turbo C++ e nelle
modalit. ANSI del compilatore. Si pu. cambiare questa
impostazione nel menu Options|Compiler|Source.
D. Poich, non si dispone di un mouse, si possono ancora copiare
i blocchi di codice da un file all'altro?
R. S. Si pu. marcare l'inizio e la fine di un blocco spostandosi
in un'area appropriata e premendo Ctrl-K-B (inizio blocco) e
Ctrl-K-K (fine blocco). Quindi si possono usare i comandi di
copia e incolla del menu Edit.
I l c o m p i l a t o r e a a r i g a d i c o m a n d o
-------- ----- ------ -------- ----- ------ ----
D. Perch, Turbo C++ non S in grado di trovare nessun file di
inclusione?
R. Il compilatore ricerca i file di inclusione nel percorso
Include Directories di Turbo C++. Si deve specificare questo
percorso con l'opzione -I. Il programma INSTALL inizialmente
scrive un file di configurazione (TURBOC.CFG) che imposta
questo percorso nella directory dove ha copiato tutti i file
*.h di Turbo C++.
D. Perch, si riceve il messaggio:
Linker Error: Unable to open input file 'C0x.OBJ'?
R. Il linker ricerca i file di avviamento e di libreria di Turbo
C++ nel percorso Library Directories di Turbo C++. Si pu.
specificare questo percorso con l'opzione -L. Se si consente
a TCC di chiamare il linker, questi ricercher. i file nelle
directory indicate nel file di configurazione (TURBOC.CFG)
scritto dal programma INSTALL. Se si esegue TLINK, il file
di configurazione non viene letto.
D. Perch, il linker indica che tutte le routine di libreria
grafica non sono definite?
R. TCC non ricercher. la libreria grafica fino a quando non gli
viene detto. Si dovrebbero specificare la libreria grafica
sulla riga di comando. Ad esempio, per compilare BGIDEMO, si
digiti
TCC BGIDEMO.C GRAPHICS.LIB
I n p u t / o u t p u t g e n e r a l e
-------- ----- ------ -------- ----- ------ ----
D. La '\n' in cprintf() non riporta il cursore all'inizio della
riga. Sposta solo il cursore in gi- di una riga. Una cprintf()
interpreta '\n' come un Line Feed (salto riga). Per forzare
il cursore all'inizio della riga, si inserisca manualmente
un Carriage Return (ritorno a capo):
cprintf("\n\r");
D. Come si stampa sulla stampante da un programma di Turbo C++?
R. Turbo C++ usa un puntatore FILE (stdprn) definito nel file
STDIO.H. Non occorre aprire stdprn prima di usarlo:
#include <stdio.h>
int main(void)
Si noti che la stampante stampa per righe, l'output affluisce
solo dopo aver inviato una '\n'.
D. Si stanno leggendo e scrivendo dei file binari. Il programma
sta traducendo i caratteri Carriage Return (0x0D) e Line Feed
(0x0A). Come S possibile evitare che questo avvenga?
R. I file aperti nella modalit. di testo tradurranno questi
caratteri per il DOS. Per leggere un file in modo binario, lo
si apra in modo binario.
Ad esempio,
#include <stdio.h>
int main(void)
La modalit. di file predefinita S testo.
D. PerchS printf() e puts() non stampano il testo a colori?
R. Si usino le funzioni di input/output della consolle cprintf()
e cputs() per l'output a colori.
#include <conio.h>
int main(void)
D. Come si stampa un intero long?
R. Si usi il formato "%ld":
long int l = 70000L;
printf("%ld", l);
D. Come si stampa un long double?
R. Si usi il formato "%Lf".
long double ldbl = 1E500;
printf("%Lf", ldbl);
P r o g r a m m i d i e s e m p i o
-------- ----- ------ -------- ----- ------ ----
D. Come si compila il programma BGIDEMO?
R. 1. Ci si assicuri che i seguenti file di Turbo C++ si trovino
nella directory corrente:
BGIDEMO.C
*.BGI
*.CHR
2. Si esegua Turbo C++.
3. Si carichi BGIDEMO.C nell'Editor premendo F3, quindi
digitando BGIDEMO<Enter>.
4. Si vada al menu Run e si selezioni la voce Run.
D. Come si crea un file .COM?
R. Le versioni del DOS 3.2 e pi- recenti includono un programma
di servizio EXE2BIN che converte i file .EXE in file .COM. Gli
utenti che non hanno EXE2BIN possono usare TLINK, il linker
della riga di comando di Turbo C++, per creare un file .COM
invece di un file .EXE. Si usi l'opzione /t. Ad esempio:
tcc -mt -lt tiny
creer. TINY.COM invece di TINY.EXE.
Esistono alcune limitazioni nella conversione di un file .EXE
in un file .COM. Queste limitazioni sono documentate nel
manuale IBM Disk Operating System sotto EXE2BIN.
Il modello TINY di Turbo C++ S compatibile con il formato .COM,
ma i programmi che usano le routine a virgola mobile di Turbo
C++ non possono essere convertiti in un file .COM.
G r a f i c a
-------- ----- ------ -------- ----- ------ ----
D. PerchS si ottiene il messaggio di errore:
BGI Error: graphics not initialized (use 'initgraph')
quando si usa una funzione grafica? Il programma ha gi.
chiamato initgraph().
R. Per alcuni motivi la chiamata a initgraph() non S andata
a buon fine. Per scoprire il perch,, si controlli il valore
restituito di graphresult(). Ad esempio:
#include <graphics.h>
int main(void)
:
}
M a t e m a t i c a / V i r g o l a m o b i l e
-------- ----- ------ -------- ----- ------ ----
D. PerchS si ottengono dei risultati non corretti da tutte le
funzioni di libreria matematica come cos(), tan() e atof()?
R. Si deve includere <math.h> prima di chiamare qualsiasi
funzione matematica standard di Turbo C++. In generale, Turbo
C++ presuppone che una funzione che non S dichiarata
restituisca un int. Nel caso di funzioni matematiche, di
solito queste ritornano un double. Ad esempio
/* SBAGLIATO */ /* GIUSTO */
#include <math.h>
int main(void) int main(void)
}
D. Come si "intrappola" un errore in virgola mobile?
R. Si vedano le funzioni signal() e matherr() nel manuale TURBO
Turbo C++: FUNZIONI DI LIBRERIA. La funzione signal() pu.
essere usata per intrappolare gli errori nell'80x87 o
nell'emulatore dell'80x87. La funzione matherr() intrappola
gli errori nelle funzioni di Math Library.
E r r o r i d e l L i n k e r
-------- ----- ------ -------- ----- ------ ----
D. Perch, si ottiene il messaggio:
Linker Error: Unable to open input file 'C0x.OBJ'
R. Si veda sopra la sezione "Ambiente di sviluppo".
D. Perch, si ottiene il messaggio:
Linker Error: Undefined symbol '_main' in module C0
R. Ogni programma in C deve contenere una funzione chiamata
main(). Questa S la prima funzione ad essere eseguita nel
programma. Il nome della funzione deve essere scritto in
lettere minuscole. Se il programma non ne ha uno, lo si crei.
Se si stanno usando dei file sorgente multipli, il file che
contiene la funzione main() deve essere uno dei file elencati
nel progetto.
Si noti che un carattere di sottolineatura '_' S messo prima
di tutti i simboli esterni di Turbo C++.
D. Perch, il linker indica che tutte le routine di libreria
grafica non sono definite?
R. Si vedano sopra le sezioni "Ambiente di sviluppo" e
"Compilatore a riga di comando".
D. Cos'S un 'Fixup overflow'?
R. Si veda il listato dei messaggi di errore di TLINK in
TURBO C++: GUIDA ALL'USO.
D. Si stanno collegando le funzioni del linguaggio assembly con
Turbo C++. Il linker indica che tutte le funzioni non sono
definite.
R. Ci si accerti di aver messo un carattere di sottolineatura
'_' davanti a tutti i nomi di funzioni del linguaggio
assembly che devono essere chiamate da Turbo C++. Il
programma in linguaggio assembly dovrebbe essere assemblato
con la direttiva di distinzione tra maiuscole e minuscole.
A l t r e d o m a n d e
-------- ----- ------ -------- ----- ------ ----
D. Come si cambia la dimensione dello stack?
R. La dimensione dello stack di un programma in Turbo C++ S
determinata nel momento dell'esecuzione dalla variabile
globale _stklen. Per cambiare la dimensione a, per esempio,
10.000 byte, si includa la riga seguente nel programma:
extern unsigned _stklen = 10000;
Questa istruzione non deve essere all'interno di nessuna
definizione di funzione. La dimensione predefinita dello
stack S 4.096 byte (4K).
D. Quando si esegue il programma si ottiene un messaggio:
'Stack Overflow!'. Come S possibile risolvere questo problema?
R. Si pu. aumentare la dimensione dello stack seguendo la
procedura sopra. Gli overflow dello stack di solito sono
causati da un gran numero di dati locali o di funzioni
ricorsive. Si pu. diminuire la quantit. di spazio dello stack
usato dichiarando le variabili locali statiche:
int main(void) int main(void)
}
Certamente occorre stare attenti poich, vi sono altri effetti
che la parola riservata "static" ha, come richiesto in questo
caso. Si veda TURBO C++: GUIDA ALLA PROGRAMMAZIONE.
D. Dopo aver terminato l'esecuzione il programma appare
il messaggio 'Null pointer assignment'. Cosa significa?
R. Prima che un programma di Turbo C++ del modello di dati
piccoli ritorni al DOS, controller. se l'inizio del suo
segmento di dati S stato danneggiato. Questo messaggio
avverte che si sono usati dei puntatori non inizializzati
o che il programma ha danneggiato la memoria in qualche altro
modo.
D. Perch, i file .EXE generati da TC.EXE sono pi- grandi di
quelli generati da TCC.EXE?
R. Nella configurazione standard, TC.EXE comprende le
informazioni di debugging nei file .EXE che crea, mentre
TCC.EXE no. Se non si vogliono generare queste informazioini
di debugging, S possibile chiuderle nell'ambiente di
sviluppo selezionando Alt-D|S|N.
D. Perch, si ottengono dei messaggi di "declaration syntax error"
su DOS.H?
R. Si S impostata l'opzione "Ansi keywords only" su ON. Questa
opzione deve essere impostata su OFF quando si usa una
qualsiasi parola riservata specifica di Turbo C++. Per una
lista delle parole riservate, si veda TURBO C++: GUIDA ALLA
PROGRAMMAZIONE.
D. Si dispone di un programma di lavoro che che alloca memoria in
modo dinamico usando malloc() o calloc() in modelli di dati
piccoli (tiny, small, e medium). Quando si compila questo
programma in modelli di dati grandi (compact, large, e huge),
il programma si blocca.
R. Ci si accerti di avere incluso <alloc.h> nel programma.
D. Si stanno collegando le funzioni del linguaggio assembly con
Turbo C++, ma il linker indica che tutte le funzioni non sono
definite.
R. Si veda la risposta data in precedenza nella sezione "Linker".
D. I puntatori far "si avvolgono" quando vengono incrementati
oltre i 64K. Come si indica un oggetto dati che S maggiore di
64K?
R. Si usino i puntatori huge.
D. Come si interfacciano le routine di Turbo C++ con un programma
in Turbo Pascal?
R. Si vedano i programmi di esempio CPASDEMO.PAS e CPASDEMO.C
su disco. Questi file sono compattati nel file EXAMPLES.ARC.
Occorrer. scompattarli prima di usarli.
D. Come S possibile far collegare Clipper a Turbo C++?
R. Se si hanno dei problemi, si contatti il reparto di assistenza
tecnica della Nuntucket.
D o m a n d e c o m u n i s u l C + +
-------- ----- ------ ----- ----- ---------------
D. Quali problemi potenziali possono sorgere dalla conversione di
tipo di un puntatore di classe base in un puntatore di classe
derivato in modo da poter chiamare le funzioni membro della
classe derivata?
R. Sintatticamente questo S permesso. Esiste sempre la
possibilit. che un puntatore base punti veramente ad una
classe base. Se viene convertito in un tipo derivato, il
metodo che si chiamer. pu. non esistere nella classe base.
Perci., si sar. sul punto di usare l'indirizzo di una
funzione che non esiste.
D: Qual'S la differenza tra le parole riservate STRUCT e CLASS?
R: I membri di STRUCT sono PUBLIC di norma, mentre in
CLASS, sono predefiniti a PRIVATE. Essi sono comunque
equivalenti.
D: Si S dichiarata una classe derivata da una classe base, ma
non si pu. accedere a nessuno dei membri di classe base con
la funzione di classe derivata.
R: Le classi derivate NON accedono ai membri private di una
classe base. Al fine di accedere ai membri di una classe base,
i membri della classe base devono essere dichiarati o come
public, o come protected. Se sono public, allora ogni parte
del programma pu. accedervi. Se sono protected, sono
accessibili dai membri della classe, dai friend, e da
qualsiasi classe derivata.
D: Come si pu. usare il Paradox Engine con C++?,
R: Poich, le funzioni di Paradox Engine sono tutte compilate
come le funzioni in C, ci si dovr. assicurare che i nomi delle
funzioni non vengano modificate dal compilatore del C++.
Per fare questo occorre dichiarare il prototipo delle funzioni
Engine come extern. Nel file header pxengine.h si
inserisca il seguente codice nelle righe indicate.
/* inserito alla riga # 268 */
#ifdef __cplusplus
extern "C"
#endif
D: Si dispone di una classe che S derivata da tre classi base.
Si pu. assicurare che un costruttore di classi base verr.
chiamato prima di tutti gli altri costruttori?
R: Se si dichiara la classe base come una classe base virtuale,
il suo costruttore verr. chiamato prima di qualsiasi
costruttore di classe base non virtuale. Altrimenti i
costruttori vengono chiamati nell'ordine da sinistra a destra
sulla riga di dichiarazione della classe.
D: Le funzioni di input/output della libreria standard sono
ancora disponibili per l'uso con la libreria iostreams del
C++?
R: S, usando
#include <stdio.h>
le funzioni come printf() e scanf() continueranno ad essere
disponibili.
D: Mentre si esegue il programma in Turbo Debugger, si nota che
nessuna delle funzioni inline S espansa. Al contrario, esse
sono tutte eseguite come chiamate di funzioni.
R: Ogni volta che si compila il programma con le informazioni di
debugging incluse, nessuna funzione viene espansa inline. Per
verificare che le funzioni inline sia davvero espanse, si
compili un modulo con il flag -S del compilatore della riga
di comando, quindi si esamini il file .asm che viene generato.
D. In C++, date due variabili dello stesso nome, una locale e una
globale, come si accede all'istanza globale all'interno del
campo di validit. locale?
R. Si usi l'operatore (::) di risoluzione del campo di validit..
int x = 10;
for(int x=0; x < ::x; x++)
D. Le seguenti due funzioni saranno sovraccariche (overloaded)
dal compilatore, o il compilatore le indicher. come un errore?
PerchS?
void test ( int x, double y); & int test( int a,
double b);
R. Il compilatore indicher. questo come un errore di
ridichiarazione poich, n, tipi di ritorno n, nomi di argomento
vengono considerati quando si determinano delle signature
uniche per le funzioni di sovraccarico (overloading).
Vengono considerati solo numero e tipo di argomento.
D. Se si passa un carattere ad una funzione che accetta solo un
int, cosa far. il compilatore? Lo indicher. come un errore?
R. No. Il compilatore promuover. char a int e user. la
rappresentazione dell'intero nella funzione invece del
carattere stesso.
D. Si stava cercando di allocare un array di puntatori a
funzioni usando il nuovo operatore ma si continua ad ottenere
la dichiarazione di errori di sintassi usando la seguente
sintassi: new int(*[10])(); Cosa c'S di sbagliato?
R. Il nuovo operatore S un operatore unario e attacca prima la
parola riservata int generando quanto segue: (new int)
(*[10])();
Occorre racchiudere tra parentesi l'espressione per generare
i risultati attesi: new (int (*[10]());
D. Cosa sono le funzioni inline? Quali sono i loro vantaggi? Come
vengono dichiarate?
R. Una funzione inline S una funzione che viene inserita
testualmente dal compilatore, molto simile alle macro.
Il vantaggio S che il tempo di esecuzione viene abbreviato
poich, l'overhead del linker viene minimizzato. Esse sono
dichiarate usando la parola riservata inline quando la
funzione viene dichiarata:
inline void func(void)
o includendo la dichiarazione di funzione e il corpo del
codice all'interno di una classe:
class test
};
D. Se non si specificano le sezioni o public o private in una
classe, quale viene usato?
R. Una classe indicher. come di norma tutti i membri private
se le sezioni non vengono dichiarate n, public n, private.
D. Cosa fa il modificatore _seg?
R. L'uso di _seg fa s che un puntatore diventi un luogo di
memoria per il valore di un segmento, piuttosto che un offset
( o un segmento/offset ). Per sempio, se "int _seg *x"
contiene il valore 0x40, allora quando si usa "*x", il valore
a cui si punta sar. nel segmento 0x40, offset 0. Se si
aggiunge un valore al puntatore, il valore viene moltiplicato
per la dimensione del tipo di puntatore. Quel nuovo valore
viene usato come un offset, e viene combinato al valore del
segmento contenuto nel puntatore. Ad esempio,
int _seg *x;
int value;
x = (int _seg *)0x40;
value = *(x + 20);
a value S assegnato il valore dell'intero in 0x40:0x28 (Si
ricordi, 20 * sizeof(int) = 40 = 0x28).
D. Si pu. allocare in modo statico pi- di 64K di dati in un
singolo modulo?
R. S. I dati far vengono ora gestiti:
...
char far array1[60000L];
char far array2[60000L];
...
Per array pi- grandi di 64k si usi:
char huge array3[100000L];
D. PerchS compare l'errore "Type name expected" quando si
definisce una classe friend in una nuova classe?
R. Occorre far sapere al compilatore che l'etichetta che si usa
per la classe friend S un'altra classe. Se non si vuole
definire l'intera classe, si pu. semplicemente avere
"class xxx", dove xxx S l'etichetta.
D: Come si possono stampare i valori esadecimali in maiuscole
usando le librerie iostream?
R: Occorre impostare lo stato dello stream usando setf(). Ad
esempio,
#include <iostream.h>
int main(void)
D. Cos'S il puntatore "this"?
R. "this" S una variabile locale nel corpo di una funzione
membro non statica. Esso S un puntatore all'oggetto per il
quale la funzione S stata chiamata. Non pu. essere usato al
di fuori di un corpo di funzione membro di classe.
D. Perch, una funzione membro binaria accetta solo un singolo
argomento?
R. Il primo argomento S definito implicitamente.
D. Cos'S una funzione membro friend?
R. Dichiarando un friend i non membri di una classe possono
accedere ai membri non public di una classe.
<
|