2012-02-26 18 views
5

Soy un completo novato en lo que respecta a C++ y he estado pirateando en Moai tratando de agregar compatibilidad para un gamepad de Xbox 360 a través del XInput. Cuando incluyo la cabecera de XInput hay dos opciones:Sensibilidad de mayúsculas/minúsculas en C++ Header Files

  1. XInput XInput

y

  1. XInput Xinput

Además, para usar XInput necesito incluir windows.h. Todos los ejemplos que he visto utilizar la siguiente sintaxis:

#include <windows.h> 

Pero el auto completo en Visual C++ Express 2010 inserciones

#include <Windows.h> 

Windows.h

En el caso de XInput/XInput parece que la sensibilidad a mayúsculas y minúsculas es importante, pero en el caso de Windows.h, no parece importar.

¿Tiene importancia la mayúsculas y minúsculas al incluir archivos de encabezado? ¿Hay algo de lógica en esto?

¿Es la diferencia de XInput simplemente una cuestión de que haya un encabezado para algo llamado XInput y otro algo llamado Xinput?

+0

Posible duplicado de [Al incluir archivos de encabezado, ¿es sensible la ruta?] (Http://stackoverflow.com/questions/1951951/when-including-header-files-is-the-path-case-sensitive) – IInspectable

Respuesta

4

La sensibilidad de mayúsculas y minúsculas en los nombres de encabezado e instrucciones de inclusión está definida por la implementación. En general, se determina si la plataforma en la que se basa es sensible a mayúsculas o minúsculas.

Tendré que probar para asegurarme, pero sospecho que si escribe cualquier variedad de 'xinput.h' encontrará la que aparece primero en las rutas de búsqueda del encabezado, incluso si el archivo que ocurre más adelante en las rutas de búsqueda es una mejor coincidencia en términos de caso. Esto sería bastante poco intuitivo desde la perspectiva de un desarrollador que no esté familiarizado con estos problemas, porque significaría que podría usar uno de esos autocompletados, y VS incluiría el archivo no seleccionado.

También es posible que VS sea más inteligente que eso y buscará la mejor coincidencia de casos.

+1

Atribuiré este, ya que es el único que dice que es implementación definido en lugar de definido por el sistema operativo. ISO declara que el manejo de las cadenas dentro de las declaraciones include es casi totalmente responsable de la implementación. Normalmente, eso se correlacionaría con las propiedades subyacentes del sistema de archivos, pero ese no es necesariamente el caso. De hecho, no hay ningún requisito de que los encabezados estén en un sistema de archivos :-) – paxdiablo

2

En Windows, los nombres de archivo no distinguen entre mayúsculas y minúsculas, y esto se extiende a #include. Cualquier caso servirá.

En algunas plataformas (por ejemplo, Linux), los nombres de archivo son distinguen entre mayúsculas y minúsculas, por lo que deberá coincidir con el nombre real del archivo.

+0

¿Cómo sabe el compilador la diferencia entre 'XInput' y' Xinput'? – NoobsArePeople2

+0

Esos son nombres de clase, no nombres de archivo. Las clases y otras C cosas son siempre sensibles a mayúsculas y minúsculas. – StilesCrisis

+2

@ NoobsArePeople2: El * compilador * no conoce la diferencia entre estos archivos. El compilador obtiene el archivo a que el sistema operativo le da. La fuente de C++ distingue entre mayúsculas y minúsculas, independientemente del sistema operativo, y esto incluye los nombres de 'clase' (pero no sus archivos). – Johnsyweb

4

Solo importa si el sistema de archivos subyacente distingue entre mayúsculas y minúsculas. El sistema de archivos de Windows no distingue entre mayúsculas y minúsculas, pero sí los sistemas de archivos de sistemas operativos como Linux. Intente utilizar el nombre real exacto del archivo real para asegurarse de que su código funcione si/cuando lo transfiere de un sistema operativo a otro.

+0

El sistema de archivos no es lo que controla la sensibilidad de mayúsculas y minúsculas de la búsqueda. Es el compilador (ver 16.2.2 [cpp.include]: * "Cómo se especifican los lugares o el encabezado identificado está definido por la implementación." *) – IInspectable

1

Windows no es sensible a las mayúsculas y minúsculas, como han dicho otros. Pero ese no es tu problema. Tu problema es con la configuración de archivos incluidos en Visual Studio.El compilador buscará encabezados estándar (inclusión de encabezado usando la sintaxis <>), en el orden en que están configurados. Inicie Tools->Options, y luego busque Projects and Solutions->VC++ directories y vea la secuencia de Include Files.