programing

"unix"의 키워드가 C에서 제한되어 있습니까?

powerit 2023. 10. 10. 21:16
반응형

"unix"의 키워드가 C에서 제한되어 있습니까?

이 코드는 GCC 버전 4.3.2(데비안 4.3.2-1.1)에서는 컴파일되지 않습니다.

main() {
  int unix;
}

C 키워드 리스트를 확인해보았는데 "unix"는 그 중 하나가 아닙니다.

다음 오류가 발생하는 이유는 무엇입니까?

unix.c:2: error: expected identifier or ‘(’ before numeric constant

unix는 표준에 의해 예약된 식별자가 아닙니다.

다음과 같이 컴파일할 경우-std=c89아니면-std=c99gcc 컴파일러는 당신의 기대대로 프로그램을 받아들일 것입니다.

gcc 매뉴얼(https://gcc.gnu.org/onlinedocs/cpp/System-specific-Predefined-Macros.html )에서 강조하는 것은 저의 것입니다.

... 그러나 역사적으로 시스템별 매크로에는 특별한 접두사가 없는 이름이 있습니다. 예를 들어 유닉스 시스템에서 정의된 유닉스를 찾는 것이 일반적입니다.이러한 모든 매크로에 대해 GCC는 시작과 끝에 두 개의 밑줄이 추가된 병렬 매크로를 제공합니다.unix가 정의되면 __unix__도 정의됩니다.밑줄은 두 개 이상일 수 없습니다. _mips의 병렬은 __mips__입니다.

unix는 gcc에서 devs 사용 목록을 얻기 위해 사용하는 전처리기 정의 중 하나입니다.

gcc -dM -E  -x c /dev/null

(-dM은 gcc에 debugdump the defs -E는 사전 처리 후 중지하고 -x c/dev/null은 /dev/null이 c 파일인 것처럼 하도록 지시합니다.)

코드를 전처리기에 실행하여 컴파일러가 실제로 보고 있는 내용을 확인합니다.

gcc -E unix.c

그 다음에 당신의 변수가unix프리프로세서에 의해 보존되거나 전처리기에 의해 변환됩니다.

키워드가 아닙니다.

시스템 유형을 식별하기 위해 미리 정의된 매크로입니다.유닉스 및 유닉스와 같은 시스템에서는 다음과 같이 정의됩니다.1.

이 기능을 사용하지 않으려면-ansi옵션:

C 모드에서는 -std=c89에 해당합니다.C++ 모드에서는 -std=c++98에 해당합니다.이것은 ISO C90(C 코드를 컴파일할 때)과 호환되지 않는 GCC의 특정 기능이나 "asm" 및 "type of" 키워드와 같은 표준 C++(C++ 코드를 컴파일할 때)와 사용 중인 시스템 유형을 식별하는 "unix" 및 "vax"와 같은 미리 정의된 매크로 기능을 해제합니다.또한 바람직하지 않고 거의 사용되지 않는 ISO 삼각형 기능을 사용할 수 있습니다.C 컴파일러의 경우 "inline" 키워드뿐만 아니라 C++ 스타일 // 주석 인식도 비활성화합니다.

저는 이것을 대충 시도해보고 UNIX 시스템에서 gcc가 효과적으로 #유닉스를 1로 정의했다고 추측해 보겠습니다.

해라

main(){ 
  printf("%d", unix); 
} 

뭘 얻었는지 봐봐요

에 답하자면, 하자면은 , .unixC는 C다에서 .

는.unix사용자가 헤더 파일을 포함하거나 컴파일러가 정의하기 때문에 전처리기에 의해 정의될 가능성이 높습니다.

언급URL : https://stackoverflow.com/questions/3770322/is-unix-restricted-keyword-in-c

반응형