2012-02-26 13 views
5

Sono un noob completo quando si tratta di C++ e sto effettuando l'hacking su Moai cercando di aggiungere il supporto per un gamepad Xbox 360 tramite XInput. Quando ho includere l'intestazione per XInput ci sono due opzioni:Maiuscole/minuscole nei file di intestazione C++

  1. XInput XInput

e

  1. Xinput Xinput

Inoltre, per utilizzare XInput, è necessario includere windows.h. Tutti gli esempi che ho visto utilizzare la seguente sintassi:

#include <windows.h> 

Ma il completamento automatico in Visual C++ Express 2010 inserti

#include <Windows.h> 

Windows.h

Nel caso di XInput/Xinput sembra che la case-sensitive è importante ma nel caso di Windows.h non sembra avere importanza.

La distinzione tra maiuscole e minuscole è importante quando si includono i file di intestazione? C'è qualche logica in questo?

La differenza di XInput è semplicemente una questione di presenza di un'intestazione per qualcosa chiamato XInput e un'altra cosa denominata Xinput?

+0

Possibile duplicato di [Quando si includono i file di intestazione, il percorso è sensibile al maiuscolo?] (Http://stackoverflow.com/questions/1951951/when-including-header-files-is-the-path-case-sensitive) – IInspectable

risposta

4

La definizione della distinzione tra maiuscole e minuscole e direttive include. In genere funziona a seconda che la piattaforma su cui stai sviluppando sia sensibile alle maiuscole o alle minuscole.

Avrei dovuto testare per essere sicuro, ma ho il sospetto che se si digita qualsiasi varietà di 'xinput.h' troverà quello che si verifica prima nei percorsi di ricerca dell'intestazione, anche se il file che si verifica più avanti nei percorsi di ricerca è una corrispondenza migliore in termini di casi. Ciò sarebbe abbastanza poco intuitivo dal punto di vista di uno sviluppatore che non ha familiarità con questi problemi, perché significherebbe che è possibile utilizzare uno di questi completamenti automatici e VS includerà quindi il file non selezionato.

È anche possibile che VS sia più intelligente di quello e cercherà la migliore corrispondenza del caso.

+1

Lo inviterò perché è l'unico a dichiarare che è l'implementazione definito piuttosto che definito dal sistema operativo. ISO afferma che la gestione delle stringhe all'interno delle istruzioni include praticamente l'implementazione. Normalmente, ciò si assocerebbe alle proprietà del file system sottostante, ma non è necessariamente il caso. In effetti, non è necessario che le intestazioni siano su un file system :-) – paxdiablo

2

Su Windows, i nomi dei file non fanno distinzione tra maiuscole e minuscole e questo si estende a #include. Ogni caso lo farà.

Su alcune piattaforme (ad esempio Linux), i nomi dei file sono case-sensitive, quindi è necessario associare il nome file effettivo.

+0

Come fa il compilatore a sapere la differenza tra 'XInput' e' Xinput'? – NoobsArePeople2

+0

Questi sono nomi di classi, non nomi di file. Le classi e le altre cose C sono sempre case sensitive. – StilesCrisis

+2

@ NoobsArePeople2: Il * compilatore * non conosce la differenza tra questi file. Il compilatore ottiene il file a che il sistema operativo gli dà. L'origine C++ è sensibile al maiuscolo/minuscolo, indipendentemente dal sistema operativo, e questo include i nomi di 'classe' (ma non i loro file). – Johnsyweb

4

Importa solo se il file system sottostante fa distinzione tra maiuscole e minuscole. Il filesystem di Windows non è case-sensitive, ma i file system di sistemi operativi come Linux lo sono. Cerca di utilizzare il nome esatto attuale del file reale per assicurarti che il tuo codice funzioni se/quando lo porti da un sistema operativo a un altro.

+0

Il filesystem non è ciò che controlla la distinzione tra maiuscole e minuscole della ricerca. È il compilatore (vedi 16.2.2 [cpp.include]: * "Come sono specificati i posti o l'intestazione identificata è definita dall'implementazione." *) – IInspectable

1

Windows non è case sensitive come altri hanno detto. Ma non è un tuo problema. Il tuo problema è con le impostazioni del file include in Visual Studio.Il compilatore cercherà intestazioni standard (inclusione intestazione usando la sintassi <>), nell'ordine in cui sono configurate. Avviare Tools->Options, quindi cercare Projects and Solutions->VC++ directories e vedere la sequenza di Include Files.

Problemi correlati