의 값을 찾으려면 stddef.h
어디에 정의되어 있습니까? /usr/include/linux/stddef.h
거의는 아무 상관이 없다
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef __always_inline
#define __always_inline __inline__
#endif
구체적으로 어떻게 size_t
정의 되는지보고 싶었습니다 .
몇 달 후이 질문이 어떻게 whcar_t
정의 되는지 알고 싶어서 다시 돌아옵니다 .
내부 stddef.h
파일에는에 대한 typedef가 있습니다.
ptrdiff_t
max_align_t
size_t
wchar_t
C 표준은 컴파일러 기능과 라이브러리 기능을 구분하지 않습니다. 차이점은 구현 세부 사항이며 플랫폼마다 다를 수 있지만 일반적인 추세가 있습니다. 예를 들어 다음과 같은 기본 정수 타입의 크기 size_t
와 같은 관련 매크로 CHAR_BIT
및 SIZE_MAX
컴파일러와 컴파일러 옵션의 속성은; 반면에의 내용 stdio.h
은 일반적으로 컴파일러와 독립적이지만 표준 라이브러리가 파일을 구현하는 방법에 따라 다릅니다.
stddef.h
대부분 컴파일러를 선언하므로 컴파일러와 함께 제공됩니다. 예를 들어 32 비트 또는 64 비트 모드에서 컴파일하는 경우 다른 정의를 얻는 것이 더 좋으며 GCC 및 Clang과 같은 다른 정의를 얻을 수 있습니다. 따라서 컴파일러 디렉토리에서 찾으십시오. 일부 컴파일러는 디스크 파일이 전혀없고 이름 만 <stddef.h>
특별히 취급 하지만 GCC와 Clang을 사용하면 디스크 파일을 얻을 수 있습니다.
locate
명령 을 사용하여 시스템의 모든 사본을 찾을 수 있습니다 .
특정 옵션이 주어 졌을 때 GCC가 사용하는 포함 경로 를 알고 싶다면 -v
빌드에서 사용하는 다른 옵션 (특히 -m
) 외에 명령 줄에서 옵션 을 전달합니다 .
아무것도 컴파일하지 않고이 정보를 원하면 빈 입력 을 사용하여 전 처리기 전용 모드에서 GCC를 호출합니다 ( -xc -E /dev/null
; -xc
파일 이름없이 컴파일하는 언어를 GCC에서 알 수 없기 때문에 언어를 c로 지정 하려면 a 가 필요합니다 ).
그런데 Clang에서도 동일한 옵션이 작동합니다.
gcc -v -xc -E /dev/null 2>&1 |
awk ' /^End of search list/ {exit} p {print} /^#include <\.\.\.> search starts here:/ {p=1}' |
xargs sh -c 'for x; do if [ -e "$x/stddef.h" ]; then echo "$x/stddef.h"; exit; fi; done' sh
알고 싶은 것이의 정의 size_t
뿐이라면 그것이 어디에서 오는지 알 필요가 없습니다. 컴파일러에게 전 처리기의 출력을 인쇄하도록 요청하십시오.
echo '#include <stddef.h>' | gcc -xc -E - | grep size_t
부터 man gcc
,
-E
전처리 단계 후에 중지하십시오. 컴파일러를 올바르게 실행하지 마십시오. 출력은 표준 출력으로 전송되는 전처리 된 소스 코드의 형태입니다. 전처리가 필요하지 않은 입력 파일은 무시됩니다.-x language
컴파일러가 파일 이름 접미사에 따라 기본값을 선택하도록하는 대신 다음 입력 파일의 언어를 명시 적으로 지정합니다. 이 옵션은 다음-x
옵션 까지 모든 다음 입력 파일에 적용됩니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다