2014. 6. 11. 15:16



[1]

int main(int argc, char *argv[])


[2]

 int main(int argc, char **argv)


[1]로 하든 [2]로 하든 실제 컴파일 하여 실행해 보면 결과는 동일 했다.

인터넷 검색에서도 둘은 같은 내용이라는 것을 볼 수 있었으나, 직접 눈으로 확인하고 싶어서 아래의 과정을 거쳐 확인을 해 보았다.



확인방법은 gcc로 어셈변환 해서 어셈된 결과를 가지고 비교하는 것으로 하였다.

소스 는 아래와 같다.

argv.c

argv2.c

 #include <stdio.h>

int main(int argc, char *argv[])
{
        return 0;
}

 #include <stdio.h>

int main(int argc, char **argv)
{
        return 0;
}

표시된 부분이 차이점.



그리고 이것을 어셈변환한 결과 비교

어셈에 사용한 명령어
$ gcc -S -o argv.s argv.c



WinMerge로 비교 결과, 파일명을 제외한 모든 부분이 완전히 동일하다.

어셈코드가 동일하므로, 기계어로 컴파일되는 최종 결과물 또한 동일하다고 할 수 있다.





참고1. 두 구문의 동일성에 대한 내용은 StackOverflow 의 아래 링크에서 확인 하였습니다.
http://stackoverflow.com/questions/16666353/what-does-char-argv-means




Posted by 해비