mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: [?] puntatori

Salve a tutti
sono alle prime armi con il c++ e, seguendo le esercitazioni proposte
nel libro dal quale sto studiando (Fondamenti di C++ di Cay Horstmann)
ho realizzato questo listato sul'uso dei puntatori e del tipo di dati
char.
Eseguendo il debug sono riuscito a capire che la riga incriminata č
*s = *rev_s;
Perchč non funziona?
Precedentemente ho fatto un codice simile ma con dati double
(invertiva l'ordine di una serie di valori contenuti in un array
allocato dinamicamente nell'heap)  che invece funzionava.
Uso il visual c++ 6.
Ecco il listato.
#include <iostream>
using namespace std;
void reverse(char s[])
{
	int s_size = 0;
	while(s[s_size] != '\0') s_size++;
	char* rev_s = s + s_size - 1;
	char temp;
	for(; rev_s >= s; s++)
	{
		temp = *s;
/////////////////////////////////////////////
		*s = *rev_s;
////////////////////////////////////////////
		*rev_s = temp;
		rev_s--;
	}
}
int main()
{	
	char* a = "Ciao, mondo";
	reverse(a);
	cout << a << "\n";
	return 0;
}

 char* a = "Ciao, mondo";
prova a mettere
char* a=new char[30];
strcpy(a, "Ciao, mondo!");
SiMoStro

 Perchè non funziona?
Il problema è che tu definisci char* a = "Ciao, mondo"; e la stringa viene
allocata nello stack in modo statico, quindi non ti è permesso di accederci
in scrittura per poterne modificare il valore in una funzione come la
reverse. Puoi fare allora:
char* a = new char[20];
strcpy(a,"Ciao, mondo");

 ha scritto nel messaggio
news:cdiu76$2o8$1...@admin.servernet...
Per evitare fraintendimenti a quello che ho scritto prima preciso:
nello standard
char* a = "Ciao, Mondo"
equivale a scrivere
const char* a = "Ciao, Mondo"



credo di aver capito.
ma è il puntatore ad essere costante (cioè non posso cambiare la
porzione di memoria a cui punta) o lo sono i valori contenuti
nell'indirizzo di memoria memorizzato nella varibile puntatore?

 nell'indirizzo di memoria memorizzato nella varibile puntatore?
il gcc, provando a compilare il seguente codice messo dentro ad un int
main(), da errore quando provi a fare *a=0;
const char* a="Salve, mondo";
a="Prova";
*a=0; // errore.
Quindi il puntatore non è const, sono i caratteri puntati dal puntatore ad
essere "const".

 nell'indirizzo di memoria memorizzato nella varibile puntatore?
const char *a
Non puoi modificare la memoria puntata da "a" usando la variabile "a".
Puoi modificare il valore di "a", che è un indirizzo di memoria.
char* const b
Puoi modificare la memoria puntata da "b" usando la variabile "b".
Non puoi cambiare il valore di "b".
const char* const c
const char c[]
Non puoi cambiare nulla.
-- 
alef
Newsgroup: it.comp.lang.c++
Titolo: #define e const: differenze

Che differenza c'e' fra utilizzare:
#define DIM 100
e
int const DIM = 100
?
Grazie

 int const DIM = 100
La prima è una direttiva del preprocessore, la seconda è uno statement del 
compilatore.
La prima fa convertire DIM dovunque appaia nel sorgente con il numero 100, 
facendo sparire qualsiasi riferimento a DIM. Il testo così trattato finisce 
in pasto al compilatore, che ignora l'origine di quel numero 100.
La seconda ha lo stesso effetto, ma ha il vantaggio di rendere conscio il 
compilatore della natura del numero 100.
La seconda è da preferire.
Ciao!
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

La seconda è da preferire.
Sei stato chiarissimo.
Grazie ancora
Ciao

 int const DIM = 100
Alla spiegazione precedente aggiungerei solo che la seconda, essendo una 
variabile, ha un indirizzo a cui si può far riferimento se occorre.
-- 
You can't wake a person who is pretending to be asleep.
                -- Navajo Proverb

 variabile, ha un indirizzo a cui si può far riferimento se occorre.
Solo se tale indirizzo viene usato come puntatore a valore costante. Questo 
perché, per questioni di efficienza, il compilatore può generare il valore 
direttamente a livello di codice oggetto, e quindi deve essere sicuro che 
la funzione/brano di codice che usa tale indirizzo non tenti di 
modificarlo.
D'altro lato, se fai...
        int * p = const_cast< int * >( &DIM );
        *p = 0x123;
...vai in cerca di guai. :)


 int const DIM = 100
la seconda ha un indirizzo, ossia si può usarci l'operatore unario &
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.1. C, C++ and ASM developers
                               and beta testers are welcome!
Newsgroup: it.comp.lang.c++
Titolo: puntatori (quesito facile... non per me)

Ciao a tutti,
cerco conferma, qualche spiegazione e pazienza, visto che sono un
neofita :)
Ho qui davanti il seguente esercizio che mi dice di considerare il
seguente pezzo di codice
double sqrt( double );
int y, x = 2, *p, *py, *px;
double d;
*p = x;
y = *p + 1;
e di chiedermi qual'e' l'effetto delle precedenti due istruzioni.
Da quello che ho letto e capito (spero) sui puntatori, l'effetto della
prima istruzione (*p = x) e' di assegnare all'indirizzo puntato da  p
la variabile x, ma p non punta a nessun indirizzo, giusto? Infatti in
fase di compilazione non mi da nessun errore, ma in esecuzione il
programma si blocca inesorabilmente e Winzozz mi richiama dicendo che
il mio programma ha eseguito un'operazione non valida... 
Mentre se ricompilo il tutto mettendo prima di "  *p = x; ", " p = &x;
" fila tutto liscio.
L'effetto della seconda istruzione ( y = *p + 1; ) e' di prendere cio'
che e' puntato da p, incrementarlo di 1 e assegnarlo a y... qui almeno
non ho dubbi :)
Grazie a tutti!!

 seguente pezzo di codice
Ok le tue supposizioni sono giuste.
Su quale libro stai studiando il C++?
Maurus


Che velocita' :)
Sono esercizi universitari, a mio parere aiutano a riflettere piu' di
alcuni libri (tipo Deitel & Deitel :/)... cmq i libri che sto usando
per impare il C++ sono, appunto, C++ Fondamenti di Programmazione
"Deitel & Deitel" di cui ho preso anche Tecniche avanzate, e Da C++ a
UML guida alla progettazione di Carlo Savy Ed. McGraw-Hill.
ps. ma p non puntando a nessun indirizzo ne prende uno a caso? perche'
bisogna per forza farlo puntare a qualche indirizzo?

 bisogna per forza farlo puntare a qualche indirizzo?
Quando tu dichiari una variabile automaticamente le viene associato un
indirizzo.
Per cui quando assegni un valore alla variabile, riempi con il valore, la
scatolina numerata con l'indirizzo associato.
Quando dichiari un puntatore non hai ancora associato la scatolina che vuoi
riempire e il suo indirizzo sara' quindi casuale.
Se non lo fai puntare a un indirizzo di tua scelta come fa il programma a
sapere a chi deve assegnare un certo valore quando tu farai *p = val; ?
Per cui potrai dargli o un indirizzo di memoria gia' allocata staticamente
oppure fare un'allocazione dinamica con new e passare l'indirizzo generatosi
a p.
int main()
{
int a = 10;
int *pStatico; // ancora ha un indirizzo casuale
pStatico = &a; // indirizzo di a che sta nello stack
*pStatico = 5; // ora a vale 5
int *pDinamico;
pDinamico = new int; // indirizzo nell'heap
*pDinamico = 1; // all'indirizzo p ora hai 1
delete pDinamico; // hai liberato la memoria
int *pCasuale; // attenzione ora...
*pCasuale = 7; // possibile disastro!
}
Maurus



Sei stato chiarissimo, grazie mille!
Newsgroup: it.comp.lang.c++
Titolo: dubbi sui cast

Ho un dubbio che mi assilla.
se per necessità creo una classe che implementa la gestione di una tabella,
grossa ad esempio 4096byte con un max di 512 entry. Tale classe ha un
puntatore (base_ptr) all'inizio della tabella di tipo memaddr* (typedef
unsigned long int memaddr).
Nel costruttore, se faccio base_ptr = new char[4096] ottengo un errore
perchè tento di assegnare l'indirizzo di un char a un tipo differente. Ok,
posso fare un cast, ma poi sono sicuro che riesca a gestire assolutamente
bene la tabella?
Situazioni di questo tipo come possono essere evitate?
Altro dubbio:
Se definisco la costante NULL come 0xFFFFFFFF, e poi tento di assegnare tale
valore a un qualsiasi puntatore che sia di un tipo da me definito devo
effettuare un cast sulla costante NULL, giusto? Il risultato è lo stesso che
assegnare NULL a un puntatore a intero o cambia qualcosa?
grazie per l'aiuto,
Bruno Di Nardo
--
San Vegeta from Hell

 assegnare NULL a un puntatore a intero o cambia qualcosa?
NULL deve essere 0 nello standard C++ (in C, potrebbe anche essere
(void*)0, ma in C++ no).  Non usare questa "macro riservata" in
altri sensi, potrebbe farti casino.
Se vuoi un tuo "marker speciale", che per tue stranissime e varie
ragioni di basso livello non sia NULL, e hai determinato che un certo
bit-pattern NEVERUSED (ad es 0xFFFFFFFF su una data macchina)
e` usabile allo scopo (nessun vero puntatore ha mai quel valore,
e neppure NULL lo ha), un approccio elegante e`:
template<class T> inline T* nil()
{
    return reinterpret_cast<T*>(NEVERUSED);
}
da usarsi come nil<int>(), nil<lamiaclasse>(), ecc, ecc.
Alex

assegnare NULL a un puntatore a intero o cambia qualcosa?
devi sempre e comunque forzare il cast...
Ma perche` vorresti fare una cosa simile?
E` meglio non ridefinire mai NULL, e magari utilizzare direttamente
il valore 0 che viene sempre automaticamente convertito ad
un puntatore nullo del giusto tipo.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------
Newsgroup: it.comp.lang.c++
Titolo: liste....

Olà!
Sto preparando fondamenti di informatica II e facendo un pò di prove
d'esame. Per il compito seguente ho il problema che la lista, alla
fine, non mi dà gli elementi non eliminati, ma solo l'ultimo, poichè
ho spostato ogni volta la head della lista.
Non ho trovato soluzione alla cosa, e penso che tra l'altro il mio
codice sia un pò troppo corposo. :)
Se qualcuno può darmi suggerimenti gli sarei gratissimo.... :D
Grazie e Axè!
--------
/*Scrivere un metodo 'dividi' della classe 'list' che
abbia come parametro per riferimento un'altra lista 'l2', 
e che rimuova gli elementi di posto pari dalla lista
a cui e' applicato (ovvero, il secondo elemento, il
quarto, il sesto e cosi' via...) inserendoli nella
lista 'l2'. La rimozione e l'inserimento devono
essere effettuati SENZA allocare o deallocare
nodi (quindi non e' possibile usare il metodo push) 
ma solo spostando puntatori. NON e' importante l'ordine
con cui gli elementi sono inseriti nella lista 'l2'.
La lista 'l2' DEVE anche conservare eventuali 
elementi preesistenti.
Ad esempio, se la lista a cui e' applicato il metodo
contiene:
     10 20 31 47 52 64 73
e la lista 'l2' contiene:
     1 2 3
al termine del metodo la lista a cui il metodo
e' stato applicato sara' modificata in:
     10 31 52 73
e la lista 'l2' conterra' i valori:
     20 47 64 1 2 3
(non necessariamente in quest'ordine).*/
# include <stdio.h>
# include <stdlib.h>
struct nodoL;
class list {
  nodoL *head;
public:
  list ( ) { head = 0; } // inizializza a lista vuota
  void push ( int x );   // inserisce x in testa
  void print ( );        // stampa la lista
  void dividi(list &l2); // PROTOTIPO DEL METODO RICHIESTO
};
struct nodoL {
  int info;
  list link;
};
void list :: push ( int x ) {
  nodoL *q = new nodoL;
  q->info = x;
  q->link = *this;
  head = q;
}
void list :: print ( ) {
  if ( head != 0 ) {
    printf("%d ",head->info);
    (head->link).print();
  }
}
void leggiLista ( list &l, char *nomefile ) {
  // legge la lista dal file nomefile
  FILE *fn;
  int x;
  if ( (fn = fopen(nomefile,"r")) == NULL ) {
    fprintf(stderr,"errore -- non riesco ad aprire il file di
ingresso\n");
    exit(1);
  }
  while ( fscanf(fn,"%d",&x) != EOF ) {
    l.push(x);
  }
}
//
// INSERIRE QUI IL METODO RICHIESTO
//
void list :: dividi(list &l2)
  {
	  list s, s2;
 
	  s.head=head;
	  s2.head=l2.head;
 
	  int flag=0;
	  while ( s.head != NULL && s2.head != NULL)
	  {
		  if (flag==0)
		  {
			  head=s.head;
			  s=head->link;
			  flag=1;
		  }
		  else if (flag==1)
		  {
			  s2=l2;  
			  l2.head=head;
			  l2.head->link=s2;
 
			  head=s.head;
			  s=head->link;
			  flag=0;
		  }
	  }
 
  }
void main () {
  list l1, l2;
 
  leggiLista(l1,"d:\\ing\\info2\\esercizi\\debug\\data1.dat");
  leggiLista(l2, "d:\\ing\\info2\\esercizi\\debug\\data2.dat");
 
  printf("\n\n\nLista iniziale: ");
  l1.print(); printf("\n");
  printf("Lista l2: ");
  l2.print(); printf("\n");
 
  l1.dividi(l2);
  printf("Nuova lista:  "); 
  l1.print(); printf("\n");
  printf("Lista l2: ");
  l2.print(); printf("\n\n\n");
 
}

 wrote in message
8m319us9h8cmqnnbc...@4ax.com...

Newsgroup: it.comp.lang.c++
Titolo: domanda magari scema...

Ciao a tutti,
se io ho una funzione (che non posso modificare per motivi "legali") che
accetta CFile*, posso fornire come parametro CFileMem*? Magari facendo
qualche conversione? Oppure è necessario scrivere il file di memoria sul
disco?
Grazie, saluti :-)
Marco Zanon (
m.z...@usa.net
)
http://www.geocities.com/SiliconValley/Peaks/6455
(BUY CDS AT THE LOWEST PRICES through my site!!!
Zamorano fan page, free MIDI mailing list, Music db...)


... togliete Ino dal mio nome per e-mail ...

 wrote in message
36c82381...@192.0.0.85...
Newsgroup: it.comp.lang.c++
Titolo: Aiuto C++!!!

Ciao raga della NG, mi serve un grande aiuto :
entro domani devo portare svolto il seguente esercizio:
Data una matrice NxN, con N dispari, la si riempia con valori crescenti da 1
a NxN, in senso orario in modo che il massimo numero sia al centro ed il
primo nell'angolo in alto a sinistra sia 1.
in altre parole dato per es: N=3
A[3][3]
B[9]={1,2,3,4,5,6,7,8,9}
devo avere come output
1    2   3
8    9   4
7    6   5
se qualcuno è capace mi dice il listato o anke kualke idea valida x
risolverlo?? grazie 1000!

 risolverlo?? grazie 1000!
Immagino siano parecchi capaci di fare questo esercizio ad ogni modo: "dice
il listato"?!? (cirio regala....)
"kualke"?!? Sigh.... ma perche' tutti parlano con ste c**** di 'k'appa????
Ok, ti posto il codice:
<CODE>
#include<cstdio>
const int SIZE=3;
int main()
{
    int a[SIZE][SIZE];   // array bidimensionale
    int x=0,y=0;         // indici array bidim.
    int high=SIZE,low=0; // variabili iterazione
    int number=1;        // counter
    while(low<high){
        for(x=low,y=low;x<high;++x){
            a[x][y]=number++;
        }
        for(x=high-1,y=low+1;y<high;++y){
            a[x][y]=number++;
        }
        for(y=high-1,x=high-2;x>=low;--x){
            a[x][y]=number++;
        }
        for(x=low,y=high-2;y>=low+1;--y){
            a[x][y]=number++;
        }
        --high;
        ++low;
    }
    for(y=0;y<SIZE;++y){
        for(x=0;x<SIZE;++x){
            printf("%02d ",a[x][y]);
        }
        putchar('\n');
    }
    return 0;
}
</CODE>
In cambio devi dirmi che scuola/universita'/corso frequenti, visto che sono
curioso di sapere chi/che_cosa desidera tale programma entro domani.
Spero che invece di ricopiare il codice tu abbia la pazienza di studiarlo, e
capire come mai non sei riuscito a scrivere tale codice.
La costante: const int SIZE=3; puo' assumere qualsiasi valore da 1 in poi
(non parlo di limiti degli int visto che non penso tu voglia mostare a
schermo un quadrato con un paio di miliardi di numeri ;-)
Se hai intenzione di stampare quadrati grandi tipo SIZE=15;  assicurati di
fare in modo che sia ben alineato mettendo ad esempio %03d nella printf. e
cosi' via per quadrati ancora piu' grandi....
Cosi' come e' il codice produce questo risultato:
<OUTPUT>
01 02 03
08 09 04
07 06 05
Press any key to continue
</OUTPUT>
E' inoltre possibile avere SIZE pari, ma ovviamente il numero N*N non sara'
piu' al centro.
Scusa se non l'ho commentato a dovere, ma.... almeno ti sforzerai un minimo
a cercare di capirlo ;-)
Ah, l'ho scritto al volo, potrebbe contenere errori, bugs, virus e che
altro, a te il compito di assicurarti che funzioni!
Tommy
P.S. chiedo scusa se e' scritto mezzo in C, ma includendo cstdio mi dovrei
essere mezzo salvato ;-)

 risolverlo?? grazie 1000!
Consigli: 
- lascia perdere le abbreviazioni con la 'k' 
- sperimenta su carta lo schema richiesto
- non chiedere il listato: il lavoro lo devi fare tu, altrimenti non serve
   a niente l'esercizio che ti e' stato proposto.
Bye

 ha scritto nel messaggio
news:b1s665$24t$1...@knossos.btinternet.com...


 wrote
???????
Non leggo la tua risposta....
Tommy
Newsgroup: it.comp.lang.c++
Titolo: stringstream: come svuotare un stringstream...

Ciao,
ho questo problema...
#include <iostream>
#include <stdlib.h>
#include <sstream>
using namespace std;
int main(int argc, char *argv[])
{
  stringstream s;
  s << " questa e' una prova " << endl;
  cout << s.str();
  s << " ma non so se funziona" << endl;
  cout << s.str();
  system("PAUSE");	
  return 0;
}
che come output ...
 questa e' una prova
 questa e' una prova
 ma non so se funziona
Premere un tasto per continuare...
Mentre io vorrei
 questa e' una prova
 ma non so se funziona
Premere un tasto per continuare...
Come si fa a cancellare il vecchio valore dallo stream, anzichè fare un 
append?
Grazie mille,
Checco.

Non importa grazie, ho risolto con s.str("");

Newsgroup: it.comp.lang.c++
Titolo: Problema con typedef

Ho un problema di compilazione rigurdante un typedef. Due pezzi di
codice concettualmente (almeno cosi mi sembra) uguali mi danno
risultati diversi.
pezzo1:
/////////////////////////////////////////
void prova( const long* & p )
{
};
typedef long t1;
typedef t1* t2;
int main()
{
        const t2 pro = new long;
        prova(pro);
};
////////////////////////////////////
Compilando con CC di Solaris 8, mi da': 
"main2.cc", line 14: Error: Formal argument p of type const long*& in
call to prova(const long*&) requires an lvalue.
1 Error(s) detected.
Compilando con g++ della GNU:
main2.cc: In function `int main()':
main2.cc:14: initializing non-const `const long int *&' with `t1 *'
will use a temporary
main2.cc:2: in passing argument 1 of `prova(const long int *&)'
---------------------------------
pezzo2 - sostituisco la linea: 
const t2 pro = new long;
con la linea:
const t1 * pro = new long;
/////////////////////////////////
void prova( const long* & p )
{
};
typedef long t1;
typedef t1* t2;
int main()
{
        const t1 * pru = new long;
        prova(pru);
};
////////////////////////////////////
In questo caso il codice compila correttamente sia con CC che con g++.
Dove sto sbagliando :(
Grazie,
Carlo.

 1 Error(s) detected.
I due pezzi di codice non sono equivalenti. Se qualifichi con const un
tipo che è un puntatore, ottieni un puntatore costante, NON un puntatore a
un tipo costante. Nel tuo caso:
       const t2
equivale a
       t1 * const
e quindi
       long * const
che è ben diverso da
       const long *
Max

        const long *
Questo mi pare un argomento decisamente convincente a favore della
convenzione di posporre il const anziche' anteporlo. Mi sa che dovro'
rivedere le mie abitudini...
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Lower case di una std::string s

Salve a tutti,
come faccio il lowercase di una std::string? Cosa devo includere e
utilizzare?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


o la passi in su una stringa C (array con carattere nullo di chiusura
e usi la funzione tolower che fa parte della libreria <cctype>
e la riassegni alla std::string
o usi un algoritmo STL...
  string str22 = "This IS a MiXed CaSE stRINg";
  transform (str22.begin(),str22.end(), str22.begin(), tolower);
  cout << "[" << str22 << "]" << endl; //
che deve dare:
  [this is a mixed case string]
Bip
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 Bip



Con certi compilatori probabilmente non va...
Prova ad indagare se c'è qualche warning/errore. (vedi per esempio 
http://lists.tmdg.co.uk/pipermail/sclug/2003-September/000940.html
)
Altrimenti usa il primo metodo. Passa ad una stringa C la tramuti in minuscolo con tolower e la riassegni alla std::string.


   [this is a mixed case string]
Attenti. Se si compila, da un comportemente indefinite. Se si
compila---seguendo i include, non è certo neanche che si
compila. Ci son in fatti due problemi:
Il primo è che ci son diversi funzioni tolower, quella di C in
<ctype.h> ou <cctype>, e una funzione template (dunque,
un'infinità di funzioni) in <locale>. E non sai mai quando o se
questi intesti son inclusi. Se solo <cctype> o <ctype.h> e
incluso, c'è solo la funzione C, che il compilatore prende, ma
se no, deve far una scelta, e non ha l'informazione necessare.
(Il parametro de transform è anche un template. Dunque, il
compilatore non sa il tipo voluto.)
Se non hai fatto "using namespace std;", e scrivi
std::transform, solo la versione C della funzione è visibile;
non devi aver un'errore dal compilatore neanche.
Il secondo probleme è che la versione C dalla funzione non
funziona coi char. Aspetta piutosto un int con un valore fra 0 e
UCHAR_MAX, o EOF. Se lui da altra cosa, è un comportemente
indefinito. E se char è signed, lui darà altra cosa.
La sola soluzione attuale è di definire un ogetto funzionale:
    class ToLower
    {
    public:
        ToLower( std::locale const& l = std::locale() )
            :   myCType( &std::use_facet< std::ctype< char > >( l ) )
        {
        }
        char                operator()( char ch ) const
        {
            return myCType->tolower( ch ) ;
        }
    private:
        std::ctype< char > const*
                            myCType ;
    } ;
    std::transform( s.begin(), s.end(),
                    s.end(),
                    ToLower() ) ;
--
James Kanze (GABI Software)             
email:james...@gmail.com
Conseils en informatique orientée objet/
                   Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, 
+33 (0)1 30 23 00 34


Confermo l'uso di "using namespace std" e di "std::transform"
quel sorgente era l'idea, ma presa grezza dal Web (sò pigro sò).

Newsgroup: it.comp.lang.c++
Titolo: inlining

Stavo leggendo il paragrafo sulle funzioni inline qui
http://www.parashift.com/c++-faq-lite/inline-functions.html
Nessun problema sul perche' le funzioni inline possono migliorare/
peggiorare le rpestazioni del programma, ma mi viene un dubbio: se
tanto alla fine e' il compilatore a decidere se fare le funzioni
inline o no (nel senso che la keyword "inline" e' solo un suggerimento
che il compilatore puo' ignorare), non dovrebeb essere lui a capire se
conviene oppure no?
Cioe': se io prendo la classe (ad es.) e rendo inline tutti i metodi
(tralasciando ogni discorso sulla separazione tra dichiarazione e
implementazione) c'e' davvero il rischio che il programma possa girare
piu' lento?  Il compilatore potrebbe "sbagliare" e fare inline troppa
roba?  e quindi dovrei essere io a capire e decidere cosa val la pena
suggerire inline e cosa no?
Thx,
Pleg

 suggerire inline e cosa no?
Non ho mai fatto prove personalmente, ma e' opinione diffusa che mettere 
gli "inline" esplicitamente sia un anacronismo.
A parte il fatto che il compilatore potrebbe non darti retta, ormai i 
compilatori moderni sanno spesso scegliere autonomamente in modo 
migliore di quanto possa fare il programmatore.
Anzi, credo che il fatto stesso che "inline" sia solo un "suggerimento" 
voglia implicitamente dire che e' una keyword lasciata solo per 
compatibilita'.
  bye
	av.


Vuoi dire che mi basta ad es. dichiarare l'implementazione della
classe dentro il .h anche senza inline, e il compilatore si arrangia
da se' (cosa che non mi stupirebbe al giorno d'oggi)?
Es:
Class MyClass{
  MyClass(int x);
};
MyClass(int x)
{ ... }

 { ... }
Allora perche' non:
Class MyClass{
    MyClass(int x) {...}
};
  bye
	av.

 da se' (cosa che non mi stupirebbe al giorno d'oggi)?
...
Non solo. Con la "whole program optimization" i compilatori + recenti 
possono fare inlining anche di codice compilato in altri moduli (quindi 
senza dover mettere tutto nel .h)
Vedi ad es.
http://msdn.microsoft.com/en-us/library/0zza0de8.aspx

 Pleg

         av.
Perche' puo' incasinarmi terribilimente la definizione della classe.
Piccoli one-liner li metto si' nello header, ma se ho qualche decina
di metodi di qualche decina di linee, se metto tutto nella classe poi
mi perdo quando cerco le cose :)  preferisco mettere solo le
definizioni nel corpo della classe, e le funzioni "grosse" sempre
nello header ma sotto, dove non disturbano.
Pleg

 Vedi ad es.
http://msdn.microsoft.com/en-us/library/0zza0de8.aspx
Sai mica se c'e' qualcosa per gcc?
Thx,
Pleg

 il valore di ritorno, hanno qualche riscontro nello standard attuale ?
Qui mi chiamo fuori per ignoranza.
  bye
	av.

 sapete qualcosa ...
Lo standard non specifica alcuna convenzione di chiamata delle funzioni, 
è tutto lasciato all'implementazione (compilatore).
Da notare che il codice che fa uso di identificatori che iniziano con 
due underscore (come quelli per indicare la convenzione di chiamata) o 
da un underscore seguito da una maiuscola, che sono nomi riservati 
all'implementazione, la quale può farne ciò che vuole, non è portabile.
Ciao.
-- 
http://www.econet-project.eu
Newsgroup: it.comp.lang.c++
Titolo: creare dll in VC++ per usarle in VB

Ciao a tutti.
Ho questo problema: ho un programma piuttosto lento, in VB, che vorrei
velocizzare; e pensavo di riscriverne delle parti in C, farne una dll
e usarla in VB.
Prima domanda: secondo voi mi conviene?
Ma cio' che mi blocca e' questo: le procedure che vado a sostituire
usano i dati di un tipo utente che contiene ogni sorta di variabili
fra cui anche stringhe a lunghezza variabile e puntatori ad un oggetto
form - che non uso nelle procedure ma che sono nel tipo e quindi vanno
dicharati per non incasinare tutto. Naturalmente non posso passare le
singole variabili che compongono il mio tipo perche' sono troppe,
quindi devo passare un puntatore a tutto l'ambaradan.
E la domanda e' ovvia: come faccio a dichiarare questi tipi in C, in
modo che non mi si incasini tutto? 
Lo so, e' una domanda un po' trasversale, ma spero sappiate aiutarmi.
Come ambiente uso Visual C++
Ciao, grazie,
Anders

Ciao,
Questo newsgroup si occupa del linguaggio C++ in quanto tale, e non di
aspetti specifici di particolari implementazioni. Per questo non e' il
posto piu' adatto per porre domande specifiche come la tua.
Potresti avere piu' fortuna su uno dei seguenti gruppi:
Per Win32 (95, 98, NT): it.comp.programmare.win32
Per Dos/Win 3.x: it.comp.os.dos
Per Linux:	it.comp.os.linux.development
Per C++Builder:	i gruppi borland.public.cppbuilder.*, disponibili sul
		server 
newsgroups.borland.com
 (prevalentemente in 
		inglese, ma si puo' postare anche in italiano)
Grazie,
Nicola Musatti

Newsgroup: it.comp.lang.c++
Titolo: user-friendliness

"[...] : illegal static data member in locally defined class"
Che pazienza che ci vuole...
Kiuhnm

 Kiuhnm

 argomenti ?
Il messaggio d'errore è
"illegal static data member in locally defined class".
A sinistra dei due punti ho omesso informazioni irrilevanti.
Non avevo pensato alla possibilità di confondersi con l'operatore 
operator[].
Kiuhnm

 operator[].
Per es. non si può avere
void f()
{
     class A
     {
         static const unsigned n = 1;
     };
};
Non è un segreto per nessuno che il C++ è molto debole dal punto di 
vista funzionale (così come il Pascal e tutti i vecchi linguaggi 
imperativi), ma questo è il colmo.
Kiuhnm

 Kiuhnm

 Esiste una traduzione italiana, eventualmente ?
Ho paura che sia a pagamento.
Kiuhnm

 
Gia', la ISO si fa pagare, sia per il cartaceo che per il PDF (costo 
tutto sommato accettabile, se non l'hanno cambiato era intorno ai 18 
petroldollari).
-- 
Roal Zanazzi

 Una piccola provocazione: perche' usi C++ allora? :-P
Per lo stesso motivo per cui il 99% dei cittadini si lamenta del governo 
pur continuando a vivere in Italia.
Kiuhnm

 petroldollari).
Ora sono 30. Maledetta inflazione! D'altra parte e' uno dei pochi modi
per garantire che non decida tutto Microsoft (o IBM, o Oracle...)
Ciao,
Nicola Musatti
Newsgroup: it.comp.lang.c++
Titolo: La pizzata di it.comp.lang.c++

Ciao a tutti.
Volevo ricordarvi che sabato 15 dicembre 2001 ore 20.30 presso la
pizzeria "Il Transatlantico" di via Malpighi a Milano (zona Porta
Venezia) si terra' la pizzata del newsgroup.
Se ricevete questo messaggio anche via email siete considerati iscritti
(e se avete cambiato idea fareste bene a farmelo sapere), altrimenti vi
invito a segnalare la vostra partecipazione entro la serata di giovedi'
13, cosi' da avere il tempo di gestire un eventuale cambio di locale
all'ultimo momento.
Ciao,
Nicola



Solo per dire che momentaneamente non posso inviare mail fuori dai
newsgroup, e quindi gli iscritti *non* riceveranno il messaggio
precedente via mail.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Ricerca operativa

Ciao a tutti, chi sa dirmi dove potrei trovare algoritmi di ricerca
operativa implementati in linguaggio C?
Grazie
Luigi


prova su 
www.nr.com
 -> "Numerical Recipes in C", molto utile su tutti
gli algoritmi (inglese)
-- 
Ciao, gengisdave
http://digilander.iol.it/gengisdave
Newsgroup: it.comp.lang.c++
Titolo: Compilatori compliant

Salve,
sapete dirmi se ci sono compilatori 100% compliat allo standard del C++?
Se no, elencatemi quelli con una percentuale più alta di conformità, siano
essi free che a pagamento e per qualunque piattaforma.
Grazie
--
Luigi

 essi free che a pagamento e per qualunque piattaforma.
Il compilatore Comeau, usato con la libreria standard della Dinkumware,
e' con ogni probabilita' l'unico compilatore standard al 100% e
probabilmente lo restera' per un po'.
Gcc 3.2 non e' messo male, ma non e' ancora al 100%; Si vocifera che la
prossima versione del VC++ sia molto ben messa, anche se neanch'essa
sara' completamente conforme.
Tra gli altri tutti i compilatori che usano il front end dell'Edison
Design Group (quello usato dal Comeau) hanno buone potenzialita' per
diventare conformi, visto che la versione attuale del front end lo e'.
Borland ha piu' o meno annunciato che la conformita' 100% e' un suo
obiettivo, ma non ha annunciato ne date ne piani precisi.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Creazione template di progetto in msdev 6.0

Ciao a tutti,
forse scrivo nel forum sbagliato ma sinceramente non saprei dove
andare a parare.
Nell'azienda in cui lavoro usiamo la preistorica versione 6.0 di
Microsoft Developer's Studio. Esistono sia progetti in C che in C++.
Purtroppo allo stato attuale ogni volta che voglio creare un nuovo
progetto riutilizzando le impostazioni di compilazione e debug l'unica
pratica utilizzata è quella di copiare e incollare la directory con i
files di un progetto già esistente. Successivamente dopo varie
rinomine, cancellazioni e copia e incolla si ottiene un nuovo progetto
con le stesse impostazioni degli altri. Tutta la procedura richiede
grosso modo 15-20 minuti ed in pratica molte persone si astengono dal
seguirla se hanno fretta. In pratica spesso l'ambiente di sviluppo
viene utilizzato quasi esclusivamente come editor di testi avanzato...
di qui la domanda: esiste un modo per creare un template utilizzabile
ogni volta che devo fare un nuovo progetto?
Grazie a tutti quelli che mi risponderanno (anche collegamenti a
risorse andranno bene!!!), se mi aiutate a risolvere questo problema
mi solleverete da un peso!
Saluti.
Matteo

 progetto riutilizzando le impostazioni di compilazione e debug
Versione 1
Apri VC++ 6 -> Apri un vecchio progetto -> menù Project -> voce setting 
-> tab C/C++ -> combo General -> text box Project Option -> Copia
Apri VC++ 6 -> Apri un vecchio progetto -> menù Project -> voce setting 
-> tab C/C++ -> combo General -> text box Project Option -> Incolla
Versione 2 (consigliata)
Script in python che parte da un file dsp di base e cambia i settaggi 
del file dsp di nuovo progetto. A questo punto inserite lo script nella 
voce di menù tools del VC++6. 10 minuti per fare lo script, un secondo 
perso per aggiornare i setting quando fate un nuovo progetto.
Se non vi piace python fatelo nel linguaggio che preferite, anche il 
C/C++ stesso. Si tratta solo di leggere un file, e inserire i settaggi 
in un altro, stop.
Versione 3
Vi fate un template di VC++, ma non so come si fa.
-- 
Articolo 33 della Costituzione italiana: L'arte e la scienza sono 
libere e libero ne è l'insegnamento

Grazie!
Molto gentile!
Saluti.
Matteo

Newsgroup: it.comp.lang.c++
Titolo: Approfondire il C++

Vorrei approfondire la mia conoscenza del C++. Che libri mi consigliate
(libri anche difficili)? Vanno bene sia in Italiano che in Inglese.
Ciao e Grazie

 (libri anche difficili)? Vanno bene sia in Italiano che in Inglese.
Che ne dici dello standard stesso?
Dato che ti va l'inglese e accetti libri difficili ...
Costa meno di 20$!!
--
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

 (libri anche difficili)? Vanno bene sia in Italiano che in Inglese.
Dipende molto da cosa sai gia' e da cosa ti interessa effettivamente.
Sei un principiante o hai gia' esperienza? Hai gia' qualche libro?
Ciao,
Nicola

 Ciao e Grazie
Sulle faq del NG sono consigliati diversi testi.
Trovi le FAQ su 
www.programmazione.it
Paolo
--
Paolo Marotta
Home: 
http://web.tiscalinet.it/paolo_marotta
Master's Level in C++ Certified by Brainbench
http://www.brainbench.com/transcript.jsp?pid=2440649
Newsgroup: it.comp.lang.c++
Titolo: Dev C++

Chi di voi usa questo compilatore (Vedi oggetto)
Mi può dire come si usa, ovvero mi sembra facilissimo, ma il seguente
programma non parte:
#include <iostream.h>
// main () Questo punto indica l'inizio del programma
main()
{
// Quelle che seguono sono le istruzioni del programma
cout<<"Questo è il mio primo programma in C++.";
}
Come si fa?

 programma non parte:
cut.
Prova cosi':
#include <iostream> // meglio che includi iostream senza .h
int main()
{
// usa sempre std::cout al posto di cout,
// vai a vederti i namespace in un tutorial
    std::cout << "Questo è il mio primo programma in C++." << std::endl;
// senza std::endl probabilmente non vedresti nulla
// perche' ti fa il carriage return ed il flush
    system("PAUSE");
// questo serve per bloccarti la schermata
// altrimenti scappa via e ti chiude la finestra
    return 0;
}
Maurus

 Come si fa?
Io sono un niubbo e quindi ci provo.
Secondo me dipende dal fatto che dopo l'istruzione cout e prima della
parentesi graffa di chiusura non hai messo
return 0;
prova e fammi sapere
ciao

return 0;
Mah, io con il Dev-C++ 4 ho provato a compilare questo programma e
funziona benissimo anche senza il return(0);
#include <iostream.h>
void main()
{
     cout << "Questo e' il mio primo programma in C++.";
     cin.ignore();
     return(0);
}
-----
Non è che usi il Dev-C++ 5 ? Ho sentito dire che spesso dà parecchi
problemi per la compilazioni in c++, in quanto è ancora in fase di
beta-test. Prova con la 4 ;)
Ciao
Fabio

 problemi per la compilazioni in c++,
Quali problemi?  Compila i programmi corretti e non quelli pieni di
errori?
        Mauro

Newsgroup: it.comp.lang.c++
Titolo: Mappa di mappe

Salve,
nel seguente esempio:
#include <iostream>
#include <map>
#include <string>
map <string, map <string, int> > PG;
int main() {
    PG.insert (map <string, map<string, int> >::value_type ("pippo",
map<string, int>::value_type ("pluto", 6))); // Mi da errore
    std::cout << PG["pippo"].first << std::endl; // Mi da errore
    return 0;
}
Come faccio a popolare la mappa che e' valore associato alla chiave della
mappa principale (PG) ?
E poi come accedo alle chiavi e ai valori della mappa interna?
Grazie


Eccoti un esempio funzionante e un po' più leggibile:
#include <iostream>
#include <map>
#include <string>
typedef std::map < std::string, int > TSubMap;
typedef std::map < std::string, TSubMap > TMap;
int main()
{
    TSubMap MySubMap;
    MySubMap.insert( TSubMap::value_type( "SubKey", 10 ) );
    TMap MyMap;
    MyMap.insert( TMap::value_type( "MainKey", MySubMap ) );
    std::cout << MyMap[ "MainKey" ][ "SubKey" ] << '\n';
    return 0;
}
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: c++ 3.0

A tutti coloro i quali hanno ancora questo preziosissimo strumento,anche se
un po' antiquato.A causa di un virus ho perso gran parte del disco
rigido.Stavo per re-installare il c++ , quando ho scoperto che il dischetto
2/5 era dannaggiato.
Se qualcuno ancora ha la versione 3.0 e puņ aiutarmi mi puņ rispondere sul
ng o in posta elettronica: 
luigi...@hotmail.NOSPAM.com
Grazie

Mi correggo,si tratta del turbo c++!!!
Newsgroup: it.comp.lang.c++
Titolo: aiuto con Fibonacci!

Ciao, mi serve l'algoritmo per calcolare la serie di Fibonacci!
se potete anche la base ed il passo induttivo con dimostrazione!
Non chiedo troppo, ciao ciao
--
~°~°~°~°~°~°~°~°~°~°~°~°~°~°~
Alessandro Zarcone
alias Skymode
zar...@studenti.unina.it
alex...@deskmail.com
alex_zar...@hotmail.com
icq: 19879662
http://w3.to/alessandrozarcone

Non chiedo troppo, ciao ciao
Sento odore di esercizio o compito pro esame, mi sbaglio?
Comunque per l'algoritmo di Fibonacci, ti basta dare una occhiata
ai libri di matematica, quanto alla dimostrazione prova a pensarci
un po'... in generale le dimostrazioni per induzione sono abbastanza
facili.
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

Newsgroup: it.comp.lang.c++
Titolo: a VOLETE IMPARARE IL C/C++ GRATIS?

-- 
Alessio Treglia
pagina Web
http://www.grisnet.it/utenti/treglia
sito FTP 
ftp://ftp.grisnet.it/utenti/treglia
ChatInfo
server: 
comicsrv3.microsoft.com
chat: #Treglia_Chat
e-mail
tre...@grisnet.it
atre...@freemail.it
al...@freemail.it
pro...@freemail.it

Ma se lo insegni gratis, ci spieghi come mai ogni 2-3 giorni posti tanti
messaggi tutti uguali?
Newsgroup: it.comp.lang.c++
Titolo: Aiuto: Come evitare la terminazione forzata di un processo C.G.I.

Saluti a tutti,
grazie in anticipo per la vostra attenzione.
Sto sviluppando un gestore di posta elettronica via WWW tramite C.G.I.
Non riesco a risolvere questo problema:
-) Supponiamo che il processo C.G.I. possa avere un tempo di esecuzione di 
diversi minuti.
-) Un utente web manda in esecuzione tale processo C.G.I. dal proprio browser
-) senza attendere la naturale terminazione del processo, l'utente preme il 
bottone "STOP" sul browser
-) a questo punto, il web-server (Apache) termina il processo, in un momento 
qualunque della sua esecuzione.
Il problema e' che il programma, durante la sua esecuzione, scrive in alcuni 
file: se il processo viene interrotto in questo modo totalmente asincrono, i 
files aperti in scrittura risulteranno inevitabilmente corrotti. :-(
Questa interruzione forzata  si presenta anche quando l'utente, senza 
attendere la naturale terminazione del processo, preme "RELOAD" oppure 
ri-sottomette il form dal browser.
Non sono a conoscenza di un metodo per gestire questo evento, che, se non 
sbaglio, dovrebbe essere un segnale SIGKILL mandato dal web-server al processo 
C.G.I in esecuzione.
In altre parole:
come e' possibile essere assolutamente certi che un programma C.G.I. in 
esecuzione, una volta avviato, non venga in alcun modo interrotto ?
Ancora in altre parole:
supponendo che la terminazione del processo avvenga tramite un segnale 
SIGKILL, come e' possible, se e' possibile, gestire questo segnale ?
P.S.
poiche' ho postato questo messaggio in newsgroups diversi, e' possibile che io 
non legga la risposta se questa viene postata direttamente nel newsgroup: per 
risposte a questo messaggio scrivere a 
g...@gpstudio.com
.
Grazie ancora.
Spero di poter essere utile in futuro.
Chiunque lo desideri puo' contattarmi a:
g...@gpstudio.com
Giacomo Picconi
GP Studio Internet Services
Via Cavaleri 4/a, Milano, Italy
Tel. +39-2-40072733

SIGKILL, come e' possible, se e' possibile, gestire questo segnale ?
Non e` possibile (SIGKILL e` fatto per terminare *qualsiasi* processo).
E` pero` possibile predisporsi come segue: delegare il lavoro vero e
proprio
ad un altro processo, che si puo` anche staccare dal process group,
controlling terminal, ecc, del processo CGI -- eventualmente comunicando
fra i due processi con pipe (unidirezionali dal figlio al padre, direi,
visto che
il padre non ha nulla da dire al figlio a parte passargli gli argomenti
giusti,
mentre il figlio puo` dare al padre eventuali risultati alla fine [se il
padre non
e` stato ucciso nel frattempo, ovviamente -- ma questo si puo`
gestire]).
Sarebbe ancora possibile per il server CGI trovare e uccidere il
processo
figlio cosi` distaccato, ma e` improbabile che un dato server CGI si
faccia
il mazzo necessario per rompere le scatole a questo punto...:-).
Alex
Newsgroup: it.comp.lang.c++
Titolo: dubbio sui template.

Salve a tutti,
compilo utilizzando il MinGW32 (3.2.3).
Ho il seguente codice:
#include <cassert>
#include <cstdarg>
#include <cstdio>
using namespace std;
template<class T, int N>
int safe_sprintf(T(&buffer)[N], const char* fmt, ...)
{
         va_list arguments;
         va_start(arguments, fmt);
         int written= vsprintf(buffer, fmt, arguments);
         assert(written < N);
         va_end(arguments);
         return written;
}
int main()
{
         char buffer[0x50];
         safe_sprintf(buffer, "Hello, \"%s\"!\n", "Simone F");
         fprintf(stdout, buffer);
}
che compila correttamente e mi sta benissimo, sarei gią a posto. Non 
capisco perņ perchč non compila il seguente:
#include <cassert>
#include <cstdarg>
#include <cstdio>
using namespace std;
template<int N>
int safe_sprintf(char (&buffer)[N], const char* fmt, ...)
{
         va_list arguments;
         va_start(arguments, fmt);
         int written= vsprintf(buffer, fmt, arguments);
         assert(written < N);
         va_end(arguments);
         return written;
}
int main()
{
         char buffer[0x50];
         safe_sprintf(buffer, "Hello, \"%s\"!\n", "Simone F");
         fprintf(stdout, buffer);
}
qualcuno saprebbe spiegarmi dove sbaglio o, eventualmente, se sbaglia il 
compilatore (ma non credo)?

 compilatore (ma non credo)?
Compilato senza problemi con varie versione del GCC e con il Comeau online.
Max


Guarda, ricopiando il codice da file a messaggio devo aver corretto il 
bug, in qualche modo. Grazie comunque!
Newsgroup: it.comp.lang.c++
Titolo: Lettura di stringhe su file

Salve a tutti! Io ho un problema: devo leggere alcuni dati da un file. I
dati sono così formattati:
testo1    "testo1 testo1 testo1 testo1"
testo2    "testo2 testo2 testo2 testo2"
testo3    "testo3 testo3 testo3 testo3"
In questo modo, appena aperto il file, ed eseguendo fscanf(), ottengo
ovviamente testo1. Quello che mi serve dopo è leggere il testo tra parantesi
("testo1 testo1 testo1 testo1") all'interno di una sola variabile. Non posso
modificare il file in modo che sia "testo1_testo1_testo1_testo1" (che
effettivamente risolverebbe il problema) perchè il programma dovrà lavorare
con diverse centinaia di file di questo tipo. Quello che mi servirebbe è una
funzione che leggerebbe il testo compreso tra parentesi e lo restituirebbe
in formato char. Se qualcuno di voi è capace di questo miracolo mi
salverebbe dal suicidio! CIAO!!!

 qualcuno di voi è capace di questo miracolo mi salverebbe dal suicidio!
Supponiamo che non esista una funzione di libreria che ti risolva immediatamente
il problema, perché non crearsela di "legno", ossia usare olio di gomito e buona
volonta' ?
Il problema non e' impossibile da risolvere...
Indizio: le righe sono separate da un LF o una coppia CRLF ? Hai gia' risolto meta'
del problema.
Buon lavoro.

 testo3    "testo3 testo3 testo3 testo3"
nel tuo post citi "scanf", ma se programmi in C++ sarebbe meglio 
dimenticarsela: il C++ offre strumenti molti piu` comodi per fare queste 
cose: [codice non testato]
#include <fstream>
#include <string>
void readfile(std::string filename)
{
     std::ifstream input(filename);
     while(input)
     {
           std::string field1, field2;
           input >> field1; // testo1
           std::getline(input, field2); // "testo 1 testo1 testo1 ... "
     }
}
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra
Newsgroup: it.comp.lang.c++
Titolo: OT - Compilatori Assembler

Scusate se lo chiedo qui, ma nell'altro newsgroup non sembravano capire
molto bene la mia richiesta. Vorrei sapere se esiste un compilatore per
codice assembler che supporti le istruzioni MMX e l'architettura del Pentium
II. Se esiste, da dove posso scaricarlo? Nel Visual Studio è incluso un
programma del genere o c'è solo il compilatore C++?
grazie
--
San Vegeta from Hell
http://www.geocities.com/Area51/Dungeon/8436
http://come.to/Fantasy.it

...

Newsgroup: it.comp.lang.c++
Titolo: Memoria

Ciao.
Programmo in Visual C++ e ho un problema:
ho la bellezza di 1000000 di dati da un byte da memorizzare in memoria ->
1Mbyte di memoria da usare.
Come faccio ad allocare un Mega o più di memoria.
Ho provato con malloc , ma niente.
Mi sembra impossibile che di 16Mbyte disponibili non riesca ad usare la
memoria espansa in quantità maggiore ai 640Kbyte per memorizzare dei dati.
Qualcuno mi sa dire qualcosa ??
GRAZIE.

Massimo Badanai wrote:

mai sentito parlare del limite dei 640K ??i programmi DOS in modo reale non
possono utilizzare + di 640K di memoria.
potresti utilizzare la memoria XMS o EMS, ma e` MOLTO macchinoso,
perche` comunque devi sempre fare trasferimenti da/verso la memoria
base. il mio consiglio e` quello di utilizzare un dos extender.
nel CD del Visual C++ 1.52c che ho c'e` anche la versione dimostrativa
del dos extender della phar lap che dovrebbe risolvere il tuo problema.
se proprio non vuoi utilizzare un dos extender e neanche XMS o EMS
potresti fare un file da 1Mb, poi lo utilizzi come un array.
se hai smartdrv caricato dopo un po` ci pensa lui a tenerti il
file in memoria :)
ciao!

Se stai lavorando in DOS non =E8 possibile, tu hai a disposizione 640K =
al
massimo (e ci devi mettere tutto). Qualche info in pi=F9 ti =E8 gi=E0 =
stata
data da Osvaldo nel suo reply. Ma immagino che tu ora ti chieda =
perch=E8
percome cosa =E8 la memoria estesa / espansa e come usarle etc. etc.
Sinceramente mi piacerebbe perlare di tutto ci=F2 (nostalgia ?) ma ho
l'impressione che saremmo leggermente OT e che non ci siano moltissimi
programmatori che ancora lavorano in DOS.
Quindi lascio aperta la questione. Se la cosa dovesse interessare pi=F9
persone e se il moderatore (ma il gruppo C++ =E8 moderato o no ?) non =
si
oppone, magari settimana prossima posto un bell'articolone in =
proposito.
---
     Andrea Ferro
SW.AN. Technologies s.a.s.
Merate (Lc)          Italy
	-----Original Message-----
	From:	Massimo Badanai [
SMTP:mbad...@qubisoft.it
]
	Posted At:	Friday, September 05, 1997 9:55 AM
	Posted To:	c++
	Conversation:	Memoria
	Subject:	Memoria
	Ciao.
	Programmo in Visual C++ e ho un problema:
	ho la bellezza di 1000000 di dati da un byte da memorizzare in
memoria ->
	1Mbyte di memoria da usare.
	Come faccio ad allocare un Mega o pi=F9 di memoria.
	Ho provato con malloc , ma niente.
	Mi sembra impossibile che di 16Mbyte disponibili non riesca ad
usare la
	memoria espansa in quantit=E0 maggiore ai 640Kbyte per memorizzare
dei dati.
	Qualcuno mi sa dire qualcosa ??
	GRAZIE.