2012-02-26 43 views
5

Tôi là một noob hoàn thành khi nói đến C + + và tôi đã hack trên Moai cố gắng để thêm hỗ trợ cho một gamepad Xbox 360 thông qua XInput. Khi tôi bao gồm tiêu đề cho XInput có hai tùy chọn:Trường hợp nhạy cảm trong C++ Tiêu đề tập tin

  1. XInput XInput

  1. Xinput Xinput

Hơn nữa, để sử dụng XInput tôi cần phải bao gồm windows.h. Tất cả các ví dụ tôi đã nhìn thấy sử dụng cú pháp sau:

#include <windows.h> 

Nhưng tự động hoàn toàn trong Visual C++ nhanh 2010 chèn

#include <Windows.h> 

Windows.h

Trong trường hợp của XInput/Xinput có vẻ như trường hợp nhạy cảm đó có vấn đề nhưng trong trường hợp trên Windows.h nó không có vẻ quan trọng.

Trường hợp có vấn đề về độ nhạy khi bao gồm tệp tiêu đề không? Có một số logic để điều này?

Sự khác biệt XInput chỉ đơn giản là vấn đề có một tiêu đề cho một cái gì đó gọi là XInput và một cái gì khác gọi là Xinput?

+0

Bản sao có thể có của [Khi bao gồm tệp tiêu đề, trường hợp đường dẫn có nhạy cảm không?] (Http://stackoverflow.com/questions/1951951/when-including-header-files-is-the-path-case-sensitive) – IInspectable

Trả lời

4

Độ nhạy trường hợp trong tên tiêu đề và bao gồm chỉ thị được thực hiện xác định. Nói chung nó hoạt động cho dù nền tảng bạn đang xây dựng có phân biệt chữ hoa chữ thường hay không.

Tôi phải kiểm tra để chắc chắn, nhưng tôi nghi ngờ rằng nếu bạn gõ bất kỳ loại 'xinput.h' nào thì nó sẽ tìm ra loại xuất hiện đầu tiên trong đường dẫn tìm kiếm tiêu đề, ngay cả khi tệp xảy ra sau đó trong các đường dẫn tìm kiếm là một kết hợp tốt hơn về trường hợp. Điều này sẽ khá không rõ ràng so với quan điểm của một nhà phát triển không quen thuộc với những vấn đề này, bởi vì nó có nghĩa là bạn có thể sử dụng một trong những tính năng tự động hoàn thành đó và VS sẽ bao gồm tệp không được chọn.

Cũng có khả năng VS thông minh hơn thế và sẽ tìm kiếm kết quả phù hợp nhất.

+1

Tôi sẽ upvote cái này vì nó là người duy nhất cho biết nó đang thực hiện được định nghĩa chứ không phải do hệ điều hành xác định. ISO quy định rằng việc xử lý các chuỗi trong các câu lệnh include là khá nhiều cho việc thực thi. Thông thường, điều đó sẽ ánh xạ tới các thuộc tính hệ thống tệp cơ bản nhưng đó không nhất thiết phải là trường hợp. Trong thực tế, không có yêu cầu rằng các tiêu đề được trên một hệ thống tập tin ở tất cả :-) – paxdiablo

2

Trên Windows, tên tệp không phân biệt chữ hoa chữ thường và mở rộng thành #include. Mọi trường hợp sẽ làm.

Trên một số nền tảng (ví dụ: Linux), tên tệp phân biệt chữ hoa chữ thường, vì vậy bạn cần phải khớp với tên tệp thực.

+0

Trình biên dịch biết sự khác nhau giữa 'XInput' và' Xinput' như thế nào? – NoobsArePeople2

+0

Đó là tên lớp, không phải tên tệp. Các lớp học và những thứ C khác luôn phân biệt chữ hoa chữ thường. – StilesCrisis

+2

@ NoobsArePeople2: Trình biên dịch * không biết sự khác biệt giữa các tệp này. Trình biên dịch nhận được tệp mà hệ điều hành cung cấp cho nó. Nguồn C++ phân biệt chữ hoa chữ thường, bất kể hệ điều hành, và điều này bao gồm tên 'lớp' (nhưng không phải là tệp của chúng). – Johnsyweb

4

Nó chỉ quan trọng nếu hệ thống tệp cơ bản phân biệt chữ hoa chữ thường. Hệ thống tệp Windows không phân biệt chữ hoa chữ thường, nhưng các hệ thống tệp của các hệ điều hành như Linux là. Hãy thử sử dụng tên thực tế chính xác của tệp thực để đảm bảo rằng mã của bạn hoạt động nếu/khi bạn chuyển mã từ một hệ điều hành sang một hệ điều hành khác.

+0

Hệ thống tệp không phải là điều kiểm soát độ nhạy của trường hợp tìm kiếm. Đó là trình biên dịch (xem 16.2.2 [cpp.include]: * "Cách xác định vị trí hoặc tiêu đề xác định được thực hiện." *) – IInspectable

1

Windows không phân biệt chữ hoa chữ thường như những người khác đã nói. Nhưng đó không phải là vấn đề của bạn. Vấn đề của bạn là với cài đặt bao gồm tệp trong Visual Studio.Trình biên dịch sẽ tìm tiêu đề chuẩn (bao gồm tiêu đề bằng cú pháp <>), theo thứ tự chúng được thiết lập. Khởi chạy Tools->Options và sau đó tra cứu Projects and Solutions->VC++ directories và xem chuỗi Include Files.

Các vấn đề liên quan