2012-05-12 4 views
8

드디어 리눅스 코드를 보게되었습니다. 나는 지금 "ls.c"를보고 있습니다.fputs (_ ("")) 밑줄 문자의 의미는 무엇입니까?

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); 

_ ("") 무엇을 의미 하는가 : 함수에서

"사용은()"하단에 나는이 문장을 많이 발견? L "string"또는 _T "string"또는 완전히 새로운 무언가입니까? 나는 또한 이와 같은 것을 찾기 위해 어떤 단어를 사용해야할지 모르겠다.

희망을 보내 주시면 감사하겠습니다.

+3

원본을 통해 '#define _'을 찾습니다. 또는'gcc -PE'를 사용하여 컴파일하면 전 처리기 출력을 볼 수 있습니다. –

+2

작은 nitpick, 이것은 실제로 리눅스 코드가 아닙니다. 보고있는 코드는 GNU coreutils의 일부입니다. GNU coreutils는 많은 리눅스 배포판의 일부이지만 리눅스의 일부는 아닙니다. GNU coreutils 없이도 리눅스 시스템을 작동시킬 수 있습니다. –

+0

gnu utils없이 광범위하게 사용되는 리눅스는 안드로이드입니다. – hirschhornsalz

답변

10

번역 가능한 문자열의 경우 libintl a.k.a. gettext에서 사용하는 규칙입니다. 실행하면 gettext 함수 (_에 별칭이 지정됨)는 로캘 설정 및 해당 문자열의 가용성에 따라 원래 문자열 또는 번역 된 문자열을 반환합니다.

+0

gettext에 대한 추가 정보에 대해 gettext는 매우 중요하며이 주제에 대해 더 자세히 살펴 보겠습니다. :) –

+0

http://www.gnu.org/software/gettext/manual/html_node/Overview.html도 참조하십시오. – aschepler

1

함수 이름은 물론 _을 포함 할 수 있으며 _은 함수 이름을 시작할 수 있습니다. 따라서 단순히 함수 이름을 _으로 지정할 수 있습니다.

실제로는 #define 또는 실제 기능이 _이라고합니다.

4

_the GNU gettext package과 함께 자주 사용되는 매크로입니다.

GNU gettext에이 패키지 :

  • 메시지를 읽을 수있는 인간을위한 문자열 및 다른 언어로 그 문자열의 번역의 목록을 소요하고 데이터베이스로 컴파일;
  • 은 해당 데이터베이스에서 메시지 문자열을 검색하고 메시지의 번역을 특정 언어로 리턴하는 루틴을 gettext()으로 제공합니다.

프로그램이 환경 변수에서 사용자가 선택한 언어로 메시지를 인쇄하고 싶어하고 setlocale() 호출에 의해 포착 경우은 정상적으로 보일 것

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

gettext() 등의 일을 할 것입니다 문자열 "I cannot find the file named %s\n"의 해당 번역을 데이터베이스에 저장하고 번역 된 문자열을 반환하십시오.

그러나 조금 어색합니다. as the documentation for GNU gettext notes, 많은 프로그램은 _(문자열)gettext(문자열)의 별칭이 될 수 있도록 매크로를 사용합니다.