2014-04-19 11 views
6

Xin chào! Điều đó làm tôi bối rối trong một thời gian dài!Tại sao có một gạch dưới trước khi wtoi trong chức năng _wtoi mà phiên bản ansi là atoi?

Cách đây lâu, chỉ có phiên bản ansi là atoi.

Và bây giờ (nó cũng đã lâu từ lâu) có phiên bản char rộng.

Nhưng tại sao phiên bản char rộng có dấu uderline ('_') trước wtoi?

Có thể cho tôi biết lý do tại sao không? Cảm ơn :)

+0

Bởi vì Microsoft đặt nó ở đó - không có lý do nào khác. Đó là chức năng của họ, vì vậy họ có thể làm như họ thích với nó; không phải 'wtoi()' và '_wtoi()' được chuẩn hóa ngoại trừ, trên thực tế, bởi Microsoft. –

Trả lời

4

Đối với hầu hết các phần, các hàm bắt đầu bằng dấu gạch dưới hàng đầu là bổ sung thực hiện; chúng không phải là một phần của Thư viện chuẩn C. (Có những ngoại lệ, ví dụ: _Exit là một phần của Thư viện chuẩn C, mặc dù nó chưa được triển khai trong việc triển khai Visual C++.) Mã định danh bắt đầu bằng dấu gạch dưới hàng đầu là reserved in the global namespace, vì vậy chúng được sử dụng cho tiện ích mở rộng không chuẩn để tránh xung đột với người dùng tên được xác định.

Vì lý do tại sao không có wtoi trong Thư viện chuẩn C: Khi chức năng ký tự rộng được thêm vào Thư viện chuẩn C, giao diện atoi thiếu sót vì there is no way to detect whether the conversion succeeded or failed.

Không sử dụng atoi hoặc _wtoi. Thay vào đó, hãy sử dụng các hàm strtolwcstol thích hợp hơn, cả hai đều là một phần của Thư viện chuẩn C. (Có chức năng chuyển đổi tương tự-tên khác với nhiều loại khác, ví dụ strtofwcstof chuyển đổi sang floatstrtoullwcstoull chuyển đổi sang unsigned long long.)

1

Microsoft cung cấp chức năng _atoi_l, _wtoi, _wtoi_l làm tiện ích mở rộng dành riêng cho nhà cung cấp. Chúng không phải là các hàm thư viện C/C++ chuẩn. Họ có nhiều chức năng cụ thể của nhà cung cấp có tên bắt nguồn từ các hàm thư viện chuẩn C/C++.

+0

Tại sao thư viện C/C++ chuẩn không cung cấp phiên bản widechar? –

+0

@NorSDNorSD Câu hỏi hay. Tôi không biết câu trả lời cho điều đó. –

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