|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2008
Messaggi: 384
|
[C++] libreria "stdafx.h". Cos'è,quando si usa
L'inclusione della libreria #include "stdafx.h", generalmente quando si fa'?
Questa libreria cos'è? cosa serve? nota: uso VC++ |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jun 2008
Messaggi: 384
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Comunque non è una libreria ma un semplice header.
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2002
Messaggi: 256
|
Quote:
Quell'header contiene alcune #define e altri dati di base per le MFC, è necessario per il framework di Microsoft. Se nei tuoi programmi NON usi MAI MFC, allora non lo devi includere mai
__________________
Phenom II 560BE/4core - 4GB DDR3/1300 - Mobo: Asus m4a77td - SkVideo: ATI HD5770/1Gb - DVD: Aopen - HD: due, quasi finiti |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jun 2008
Messaggi: 384
|
Quote:
Andrò a studiarmi MFC per capirne l'utilità. && "il troppo stroppia.." && Ultima modifica di Albitexm : 21-03-2011 alle 23:40. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2008
Messaggi: 384
|
Quote:
e dichiarando la main semplicemente: int main() invece che "int _tmain(int argc, _TCHAR* argv[])", come viene dichiarata automaticamente se si usa la procedura guidata per la creazione di un applicazione console. Come sospettavo il codice viene compilato ugualmente e funziona. Riporto il testo del codice esempio del tutorial: #include "stdafx.h" <ho eliminato questa riga #include <ppl.h> #include <stdio.h> #include <windows.h> using namespace std; using namespace Concurrency; //number of iterations each thread performs static const int NUM_ITERATIONS = 150000; int number = 0; //Demonstrates use of critical section void FunctionA(critical_section* pMutex) { for( int i = 0; i < NUM_ITERATIONS; ++i) { pMutex->lock(); ++number; pMutex->unlock(); } } //Demonstrates use of critical section void FunctionB(critical_section* pMutex) { for( int i = 0; i < NUM_ITERATIONS; ++i) { pMutex->lock(); ++number; pMutex->unlock(); } } int _tmain(int argc, _TCHAR* argv[]) <qui ho scritto semplicemente int main() { critical_section mutex; parallel_invoke( [&] { FunctionA(&mutex); }, [&] { FunctionB(&mutex); } ); printf("Final value of number: %i\n", number); return 0; } |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Mi chiedo che ho postato a fare il link
C'è scritto tutto, che sperimenti a fa? Comunque, stdafx.h è l'implementazione di VC++ dei famosi Precompiled Header; non fa nulla a parte velocizzare notevolmente il tempo di compilazione. Dentro a stdafx.h devi includere tutti quegli header che cambiano raramente, che vengono compilati in un file .pch a parte che viene riutilizzato, invece che ricompilare il file ogni volta che viene trovato in un'include. E' utile per cose tipo windows.h, i vari file di opengl, di std, di qualsiasi cosa sia una libreria esterna insomma. Con MFC non c'entra una benemerita, può essere usato in qualsiasi progetto C++; è solo che il wizard del progetto MFC te lo crea in automatico. |
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Jun 2008
Messaggi: 384
|
Quote:
Te lo spiego perchè ho fatto questa prova Il progetto visualizza il file d'origine *.cpp con la precompilazione. Allora io mi sono chiesto, l'header incluso non sarà neccessario per fare girare le funzioni PPL? Funzionerà senza? Quote:
Questo non potevo evincerlo dall'utile link postato da te. Comunque sono giunto alla conclusione che il programma che sto scrivendo, mi conviene scriverlo come progetto vuoto. Poi successivamente aggiungere eventuali ottimizzazioni. Anche perchè in questo modo si potrà usare su qualsiasi compilatore C++ così com'è. Ultima modifica di Albitexm : 22-03-2011 alle 17:41. |
||
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2002
Messaggi: 256
|
Quote:
Eccavolo certo che non ci fai niente con stdafx.h allora... le MFC non le usi manco di striscio nel tuo programmino di esempio, per cui è ovvio che non ti serve includerlo. Mi chiedo perché hai creato un progetto win32 invece di creare un progetto console, tanto per quello che ti serve è lo stesso e c'è meno roba da capire.Per quanto riguarda i precompiled headers: non c'entrano una mazza con stdafx.h. E' un caso in cui Wikipedia racconta cazzate (ce ne sono, ce ne sono). Tutti i compilatori usano e onorano la direttiva #pragma hdrstop, che dice quali header precompilare e quali no: quelli prima di lei sì, quelli dopo di lei no. STDAFX.H viene citato a (s)proposito dei precompiled headers perché con le MFC, Microsoft ha messo le direttive di inclusione degli header MFC (tutti precompilati, tanto che azz li tocchi a fare???) in stdafx.cpp e stdafx.h. E non dare retta a Tommo che ne sa pure meno di te
__________________
Phenom II 560BE/4core - 4GB DDR3/1300 - Mobo: Asus m4a77td - SkVideo: ATI HD5770/1Gb - DVD: Aopen - HD: due, quasi finiti |
|
|
|
|
|
|
#11 | ||
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
![]() Quote:
|
||
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Mar 2002
Messaggi: 256
|
Quote:
Non hai detto niente, ma quello che hai messo è la dimostrazione di quello che ho detto io. Bene, visto che sono stato confermato da cotanta fonte (tu), posso pure andare a nanna contento
__________________
Phenom II 560BE/4core - 4GB DDR3/1300 - Mobo: Asus m4a77td - SkVideo: ATI HD5770/1Gb - DVD: Aopen - HD: due, quasi finiti |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
Hai detto che stdafx.h è legato alle MFC, che è completamente falso. Crea un progetto ATL, scegli di non usare MFC... ma guarda te, c'è stdafx.h con dentro i header ATL (che non c'entrano nulla con MFC). È cosi difficile ammettere di aver sbagliato? Sai, per evitare figure di merda... |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jun 2008
Messaggi: 384
|
A parte la discussione sugli headers, i miei dubbi nascevano propio
dalla domanda postulata da te, solo che tu hai sbagliato il soggetto. Ovvero tu chiedi: Quote:
era un progetto Win 32, precompilato dalla Microsoft. Il tutorial dice "apri il progetto", e non "apri il file *.cpp". Quindi io mi chiedevo: "ma sarà necessaria questa precompilazione?" I miei dubbi erano: "perchè la Microsoft propone l'esercizio precompilato in un progetto Win 32? Sarà necessario per le PPL?". E anche grazie a Tommo,Tommino,Cionci e gli altri, se io sono riuscito a scrivere un programma funzionante, nonostante sia un neofita. E ho appreso molte nozioni sul C++. Tra l'altro nessuno ha l'obbligo di rispondermi e di consigliarmi. In molti forum "saccenti", i quesiti di un principiante non vengono neanche presi in considerazione. Qua sono sempre stato seguito ed ho sempre avuto una risposta ai miei dubbi. Ultima modifica di Albitexm : 26-03-2011 alle 18:13. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:32.












Eccavolo certo che non ci fai niente con stdafx.h allora... le MFC non le usi manco di striscio nel tuo programmino di esempio, per cui è ovvio che non ti serve includerlo. Mi chiedo perché hai creato un progetto win32 invece di creare un progetto console, tanto per quello che ti serve è lo stesso e c'è meno roba da capire.








