programing tip

"int main (vooid)"?

itbloger 2020. 6. 28. 19:13
반응형

"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.cgcc -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

반응형