"int main (vooid)"? 어떻게 작동합니까?
최근에 작은 C 테스트 프로그램을 입력해야했으며 그 과정에서 실수 vooid
대신을 (를) 사용하여 주 함수에서 철자를 잘못 입력했습니다 void
.
그럼에도 불구하고 여전히 효과가있었습니다.
가장 작은 완전한 버전으로 줄이면 다음과 같이 끝났습니다.
int main (vooid) {
return 42;
}
이것은 실제로 컴파일 ( gcc -Wall -o myprog myprog.c
)을 수행하며 실행되면 42를 반환합니다.
이 유효한 코드는 정확히 무엇입니까?
다음은 bash
내가하고있는 일을 보여주기 위해 껍질 에서 잘라내어 붙여 넣은 사본입니다 .
pax$ cat qq.c
int main (vooid) {
return 42;
}
pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq
pax$ echo $?
42
단순히 "구식"함수 선언 구문을 사용하고 있습니다. int
이라는 매개 변수를 암시 적으로 선언하고 vooid
있습니다.
myprog.c에 다음이 포함되어 있기 때문에 유효한 코드입니다.
int main (vooid) // vooid is of type int, allowed, and an alias for argc
{
return 42; // The answer to the Ultimate Question
}
vooid
에는 전달 된 인수 개수에 1을 더한 값이 포함됩니다 (예 :) argc
. 따라서 실제로 수행 한 모든 작업은로 이름 argc
을 바꾸는 것 vooid
입니다.
C에서 함수 인수의 기본 유형은 int
입니다. 따라서 프로그램은 단어를 vooid
로 취급하고 int main(int vooid)
있으며 이는 완전히 유효한 코드입니다.
그것은 단지입니다 gcc -std=c89 -Wall -o qq qq.c
및 gcc -std=gnu89 -Wall -o qq qq.c
경고를 방출하지 않습니다. 다른 모든 표준은에 대한 암시 적 유형에 int
대한 경고를 표시 합니다 vooid
.
int main(chart)
와 같은 방식으로 작동 int main (vooid)
합니다.
return vooid;
명령 행 인수의 수를 리턴합니다.
데비안 테스트 시스템에서 gcc 4.4.5로 테스트했습니다.
참고 URL : https://stackoverflow.com/questions/4987415/int-main-vooid-how-does-that-work
'programing tip' 카테고리의 다른 글
간단하게 유지하고 쿼리에서 여러 CTE를 수행하는 방법 (0) | 2020.06.28 |
---|---|
정규식 및 메모장 ++에서 비 ASCII 문자를 모두 제거하려면 어떻게합니까? (0) | 2020.06.28 |
대소 문자를 구분하지 않고 결과를 정렬하기 위해 SQL Order By 문을 사용하는 방법은 무엇입니까? (0) | 2020.06.28 |
SQLite에서 문자열 연결이 작동하지 않습니다 (0) | 2020.06.28 |
json.net에 중요한 방법이 있습니까? (0) | 2020.06.28 |