programing

%m 포맷 지정자의 의미는 무엇입니까?

nicescript 2022. 7. 14. 21:46
반응형

%m 포맷 지정자의 의미는 무엇입니까?

이 코드에 대한 출력은 'Success'로 출력되었습니다.

printf("%m\n");

m C의 입니다.printf:

GNU 문서:

http://www.gnu.org/software/libc/manual/html_node/Other-Output-Conversions.html

'%m' 변환은 오류 코드에 해당하는 문자열을 errno로 출력합니다.에러 메시지를 참조해 주세요.다음과 같이 됩니다.

fprintf (stderr, "can't open `%s': %m\n", filename);

는 다음과 같습니다.

fprintf (stderr, "can't open `%s': %s\n", filename, strerror (errno));

'%m' 변환은 GNU C 라이브러리 확장입니다.

그래서:

printf("%m\n", d);

와 동등하다

printf("%s\n", strerror (errno), d);

와 동등하다.

printf("%s\n", strerror (errno));

:%m는 인수가 필요 없습니다.서 ★★★★printf("%m\n", d) ★★★★★★★★★★★★★★★★★」printf("%s\n", strerror (errno), d)printf추가 후행 인수가 있는 경우 해당 인수는 평가되고 무시됩니다.

사실 %m에 관한 printf()의 매뉴얼은 매우 간결합니다.

m      (Glibc extension; supported by uClibc and musl.)  Print output
              of strerror(errno).  No argument is required.

★★★★★★★★★★★★★★★★★.strerror()멀티플렉스 프로그램에 문제가 있습니다.재진입이 되지 않습니다.스레드 세이프 버전은 strror_r()입니다.

GLIBC 구현에 대한 약간의 연구 결과 %m은 실제로 strror_r()에 해당합니다.따라서 %m은 스레드 세이프!

언급URL : https://stackoverflow.com/questions/20577557/whats-the-meaning-of-the-m-formatting-specifier

반응형