2014-06-13 14 views
7

Sembra che ci siano due percorsi contenenti file di origine Visual Studio runtime Microsoft:Perché il codice sorgente della libreria di runtime di Visual Studio è memorizzato in due directory?

C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ crt \ src

e

C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include

qualche file s appaiono in entrambe le directory, ma hanno dimensioni diverse. Ho guardato un file in particolare e aveva lo stesso metodo definito in entrambi i file.

Quindi la mia domanda è, qual è la differenza di utilizzo per i due percorsi? Mi piacerebbe sapere quando eseguo il debug (non intendo la modalità debug) in Visual Studio, quale file è il codice sullo schermo?

+2

Penso che tu non abbia "Mostra estensioni di file" abilitato in Explorer, quindi confonderai i file Header e Source. – Dai

+0

I file che stavo osservando erano entrambi file di intestazione perché l'uso di modelli indica che l'implementazione deve essere in un file di intestazione. Entrambi contenevano l'implementazione per lo stesso metodo. – mezamorphic

risposta

1

Il CRT si trova nella parte inferiore dello stack di librerie Visual C++: il resto delle librerie dipendono da esso e praticamente tutti i moduli nativi dipendono anche da esso. Contiene due tipi di elementi: [1] la libreria standard C e varie estensioni e [2] funzionalità di runtime richieste per operazioni come avvio del processo e gestione delle eccezioni. Poiché il CRT si trova nella parte inferiore dello stack, è il punto logico in cui avviare il processo di stabilizzazione delle librerie.


(1) Spediamo la maggior parte delle fonti per il CRT con Visual Studio; puoi trovarli nella directory di installazione di Visual Studio sotto VC \ crt \ src.

(2) In Visual Studio 2013 ci sono 6.830 #if, #ifdef, #ifndef, #elif e #else direttive le fonti che abbiamo nave con il prodotto; nel CTP di Visual Studio "14" ci sono 1.656. Questi numeri non includono le direttive nelle intestazioni e includono i file sorgente STL che sono in gran parte non toccati da questo sforzo di refactoring, quindi questa non è una misura perfetta, ma è indicativa della quantità di pulizia che è stata fatta.

EDIT 1: informazioni

Articolo:

Scritto da: James McNellis

Data: 10 Jun 2014 9:00 AM

url: http://blogs.msdn.com/b/vcblog/archive/2014/06/10/the-great-crt-refactoring.aspx

+3

Dubito che tu sia James McNellis travestito, quindi dovresti fornire * corretta attribuzione * (come minimo, il suo nome e un link a [l'articolo originale] (http://blogs.msdn.com/b/vcblog/ archivio/2014/06/10/the-great-crt-refactoring.aspx) stai citando). Inoltre, non vedo come questo risponda alla domanda. –

+1

ovviamente, modificherò il mio post ora ... grazie – angel

+0

@angel Quale VS utilizza quando passo il codice? – mezamorphic

9

La directory include ha tutto il pubblico lui aders. Si tratta di intestazioni che è possibile includere nel codice, ad esempio <stdio.h> e <type_traits>, oltre alle intestazioni di implementazione richieste da tali intestazioni.

La directory crt\src contiene i sorgenti CRT, tra cui la maggior parte delle .asm, .c, e .cpp file utilizzati per costruire il CRT. Questa directory ha anche una copia di molte delle intestazioni CRT e in alcuni casi queste intestazioni sono diverse da quelle presenti nella directory include. Questo è puramente un artefatto di come è stato costruito il CRT.

Durante il debug nel codice inline definito nelle intestazioni CRT, il debugger deve sempre selezionare l'intestazione corretta. Se entrambe le directory contengono la stessa copia di un'intestazione, il debugger ne sceglierà una e dal momento che le intestazioni sono le stesse non importa quale scegli. Se le intestazioni sono diverse, l'intestazione scelta dal debugger dipende dall'oggetto in cui è stata compilata la funzione inline. Se l'oggetto fa parte del CRT, entrerai nell'intestazione da crt\src; se l'oggetto proviene da uno dei tuoi file sorgente, entrerai nell'intestazione da include. Fondamentalmente, il debugger dovrebbe sempre essere in grado di trovare la copia corretta dell'intestazione.

Abbiamo notevolmente semplificato questo in Visual Studio "14" CTP. Non ci sono più intestazioni pubbliche nella directory crt\src e le intestazioni che vengono spedite nella directory include sono le stesse utilizzate per creare il CRT.

Problemi correlati