2012-05-12 47 views
8

Cuối cùng tôi cũng đã xem xét một số mã Linux. Tôi đang tìm kiếm ngay bây giờ tại "ls.c".fputs (_ ("")) dấu gạch dưới là gì?

Tại chức năng "sử dụng()" ở phía dưới tôi tìm thấy rất nhiều các báo cáo:

fputs (_("\ 
    List information about the FILEs (the current directory by default).\n\ 
    Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.\n\ 
    \n\ 
    "), stdout); 

không _ ("") có nghĩa là gì? Có giống như L "string" hay _T "string" hay cái gì đó hoàn toàn mới? Tôi cũng phải thừa nhận tôi không biết những từ nào để sử dụng để tìm kiếm một cái gì đó như thế này.

Hy vọng bạn có thể giúp tôi.

+3

Xem qua nguồn của '#define _'. Hoặc biên dịch với 'gcc -PE' để xem đầu ra tiền xử lý. –

+2

Chỉ cần một nitpick nhỏ, đây không phải là mã Linux thực sự. Mã bạn đang xem là một phần của các lõi của GNU. Trong khi GNU coreutils là một phần của nhiều bản phân phối Linux, chúng không phải là một phần của Linux. Có thể có một hệ thống Linux hoạt động mà không có các lõi của GNU. –

+0

Một Linux được sử dụng rộng rãi mà không có gnu utils là Android – hirschhornsalz

Trả lời

10

Đó là quy ước được sử dụng bởi libintl a.k.a. gettext, cho chuỗi có thể dịch. Khi nó chạy, chức năng gettext (mà _ được đặt bí danh) sẽ trả lại chuỗi gốc hoặc chuỗi đã dịch, tùy thuộc vào cài đặt miền địa phương và tính khả dụng của chuỗi đã cho biết.

+0

thx về thông tin bổ sung với gettext, gettext có vẻ rất quan trọng và tôi sẽ xem xét thêm về chủ đề này. :) –

+0

cũng xem http://www.gnu.org/software/gettext/manual/html_node/Overview.html – aschepler

1

Tên chức năng có thể chứa tất cả __ có thể bắt đầu tên hàm. Vì vậy, có thể đặt tên cho hàm chỉ đơn giản là _.

Tất cả những gì xảy ra là #define hoặc chức năng thực được gọi là _.

4

_ là macro thường được sử dụng với the GNU gettext package.

GNU gettext là một gói phần mềm đó:

  • mất danh sách các chuỗi thư dành cho người đọc, và bản dịch của những chuỗi sang ngôn ngữ khác, và biên dịch chúng thành cơ sở dữ liệu;
  • cung cấp thông lệ, được đặt tên gettext(), để tra cứu chuỗi thư trong cơ sở dữ liệu đó và trả lại bản dịch cho thư thành một ngôn ngữ cụ thể.

Nếu một chương trình muốn in một thông điệp bằng ngôn ngữ của người dùng được lựa chọn trong một biến môi trường và nhặt bởi một cuộc gọi setlocale(), nó sẽ thường làm một cái gì đó như

fprintf(stderr, gettext("I cannot open the file named %s\n"), filename); 

gettext() sẽ trông lập bản dịch thích hợp của chuỗi "I cannot find the file named %s\n" trong cơ sở dữ liệu và trả về chuỗi đã dịch.

Tuy nhiên, điều đó hơi khó xử; as the documentation for GNU gettext notes, nhiều chương trình sử dụng macro để chỉ cần _(chuỗi) là bí danh cho gettext(chuỗi).

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