모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : humorbest_1033284
    작성자 : 상상속동물
    추천 : 45
    조회수 : 5054
    IP : 58.122.***.6
    댓글 : 15개
    베스트 등록시간 : 2015/03/19 15:27:21
    원글작성시간 : 2015/03/10 09:26:02
    http://todayhumor.com/?humorbest_1033284 모바일
    fn(), fn(void) 와 main(), main(void)

    아래 이미 답변이 나왔지만, 
    반박 글도 나왔고 답변 해주신 분들이 언제 올지도 모르고 해서 
    정리하는 글을 올려볼까 합니다. 

    갓 스택오버플로우의 답변을 먼저 참고하시고, 

    갓스택오버플로우의 형님들의 답변에 따르면 C99에서 void는 '없음'을 뜻합니다. 
    따라서 이론상 C99에서 fn(void)는 인자가 없어야 됩니다. 
    확인해보실까요? 

    void func(void) {
    int blahblah = 1;
    blahblah++;
    }
    int main() {
    func(152);
    return 0;
    }
    WhoAmI$ gcc -O0 -std=c99 argvoid.c -o argvoid
    argvoid.c:8:7: error: too many arguments to function call, expected 0, have 1
    func(152);
    ~~~~ ^~~
    argvoid.c:2:1: note: 'func' declared here
    void func(void) {
    ^
    1 error generated.
    두둥. 에러가 뜹니다. 이론대로 0개의 인자를 받아야하는 함수라고 에러메시지를 보여줍니다. 
    그럼 아무것도 넣지 않은 경우는 어떨까요? 
    void func() {
    int blahblah = 1;
    blahblah++;
    }
    int main() {
    func(153, 154, 155);
    return 0;
    }
    WhoAmI$ gcc -O0 -std=c99 argnothing.c -o argnothing
    argnothing.c:8:20: warning: too many arguments in call to 'func'
    func(153, 154, 155);
    ~~~~ ^
    1 warning generated.
    경고만 줍니다. 
    에러를 내뿜어야 당연한게 아닌가 하는 생각이 들지만, 이것은 컴파일러가 컴파일하는 규칙에 의한 결과물이므로 그냥 넘어가겠습니다. 사실 이렇게 사용하는 사람도 없잖아요? 해당 결과는 컴파일러마다 다를 수 있습니다. 다른 분이 올린 것처럼 vc는 해당 표준을 구현하지 않았거나 무시할 수도 있습니다. 


    그럼 이번에는 원래 질문인 main()과 main(void)가 차이가 있는지 없는지를 한번 살펴보도록 하죠. 
    앞선 결과를 보면 main(void)는 어떤 인자도 받아들이지 않겠다고 명시적으로 선언했습니다. 

    int main() {
    int a = 152 + 312;
    return 0;
    }
    int main(void) {
    int a = 152 + 312;
    return 0;
    }
    컴파일 결과 둘다 에러는 발생하지 않습니다.
    컴파일 결과물도 동일합니다. 확인해보시죠. 
    emptymain`main:
    -> 0x100000f80: pushq %rbp
    0x100000f81: movq %rsp, %rbp
    0x100000f84: movl $0x0, %eax
    0x100000f89: movl $0x0, -0x4(%rbp)
    0x100000f90: movl $0x1d0, -0x8(%rbp)
    0x100000f97: popq %rbp
    0x100000f98: retq

    voidmain`main:
    -> 0x100000f80: pushq %rbp
    0x100000f81: movq %rsp, %rbp
    0x100000f84: movl $0x0, %eax
    0x100000f89: movl $0x0, -0x4(%rbp)
    0x100000f90: movl $0x1d0, -0x8(%rbp)
    0x100000f97: popq %rbp
    0x100000f98: retq
    그럼 main()하고 main(void)를 호출하는 녀석은 어떻게 생각하고 있을까요? 

    (lldb) bt
    * thread #1: tid = 0x44e6e, 0x0000000100000f80 emptymain`main, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    * frame #0: 0x0000000100000f80 emptymain`main
    frame #1: 0x00007fff98dd35c9 libdyld.dylib`start + 1
    Mac에서는 libdyld.dylib의 start에서 main함수를 호출합니다. 

    (lldb) r 'testempty'
    Process 33860 launched: '/Users/WhoAmI/llvm/emptymain' (x86_64)
    Process 33860 stopped
    * thread #1: tid = 0x4764c, 0x0000000100000f80 emptymain`main, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100000f80 emptymain`main
    emptymain`main:
    -> 0x100000f80: pushq %rbp
    0x100000f81: movq %rsp, %rbp
    0x100000f84: movl $0x0, %eax
    0x100000f89: movl $0x0, -0x4(%rbp)
    (lldb) x/12xw $rsp
    0x7fff5fbffbb8: 0x98dd35c9 0x00007fff 0x98dd35c9 0x00007fff
    0x7fff5fbffbc8: 0x00000000 0x00000000 0x00000002 0x00000000
    0x7fff5fbffbd8: 0x5fbffce0 0x00007fff 0x5fbffcfd 0x00007fff
    (lldb) x/s 0x7fff5fbffcfd
    0x7fff5fbffcfd: "testempty"

    (lldb) r 'testvoid'
    Process 33865 launched: '/Users/WhoAmI/llvm/voidmain' (x86_64)
    Process 33865 stopped
    * thread #1: tid = 0x47677, 0x0000000100000f80 voidmain`main, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1
    frame #0: 0x0000000100000f80 voidmain`main
    voidmain`main:
    -> 0x100000f80: pushq %rbp
    0x100000f81: movq %rsp, %rbp
    0x100000f84: movl $0x0, %eax
    0x100000f89: movl $0x0, -0x4(%rbp)
    (lldb) x/12xw $rsp
    0x7fff5fbffbc8: 0x98dd35c9 0x00007fff 0x00000000 0x00000000
    0x7fff5fbffbd8: 0x00000002 0x00000000 0x5fbffce8 0x00007fff
    0x7fff5fbffbe8: 0x5fbffd04 0x00007fff 0x00000000 0x00000000
    (lldb) x/s 0x7fff5fbffd04
    0x7fff5fbffd04: "testvoid"

    프로세스를 만들어 main함수를 호출하는 과정에서 
    main()으로 선언했든 main(void)로 선언했든 int argc, char* argv를 인자로 넘겨주는 것을 확인할 수 있습니다. 

    고로 컴파일하는 것은 불가능 하더라도, main()이나 main(void)에 인자를 넘겨주는 것은 재량입니다. 

    결론, 
    main() 와 main(void)는 차이가 없습니다.
    fn()과 fn(void)는 컴파일러에 따라 인자를 넘기면 에러 혹은 경고를 냅니다. 



    상상속동물의 꼬릿말입니다
    149cb18245dee8e5db8cdbe2400e4147.png

    이 게시물을 추천한 분들의 목록입니다.
    [1] 2015/03/10 10:44:19  202.150.***.24  러브의맛  342577
    [2] 2015/03/10 12:08:14  211.186.***.102  용밤스  374904
    [3] 2015/03/10 12:50:16  123.212.***.153  슝슝3  284767
    [4] 2015/03/10 13:31:09  210.94.***.63  근육실종녀  432701
    [5] 2015/03/10 15:07:09  1.253.***.134  우헤헤헤헤  137160
    [6] 2015/03/10 15:10:27  165.132.***.34  통닭실종사건  501972
    [7] 2015/03/10 19:41:38  223.62.***.119  REGENTAG  141650
    [8] 2015/03/11 11:47:47  61.255.***.213  Cameo  251208
    [9] 2015/03/13 02:41:51  118.41.***.83  자켄  542809
    [10] 2015/03/19 15:27:21  168.188.***.88  쿠로바라  105945
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.


    현재 게시판의 베스트게시물입니다.  
    번호 제 목 이름 날짜 조회 추천
    1035346
    팔도 비빔면 보다 찾은 배포판: 팔도 리눅스 [7] BePositive 15/03/25 16:41 7329 41
    1033704
    정렬 알고리즘.gif [12] 바부팅팅이 15/03/20 22:04 6186 43
    1033667
    [스압] 어떤 언어를 배우는게 좋을까요?: 프로그램에 발을 딛은 분들께 [26] 라면은오짬 15/03/20 19:12 6226 75
    1033366
    프로그래머 출신 가수.. [16] 오른손 15/03/19 20:53 14357 56
    fn(), fn(void) 와 main(), main(void) [15] 상상속동물 15/03/19 15:27 5054 45
    1032663
    프로그래머 남편이 본 아내의 침묵 [55] 방울터메이도 15/03/17 19:28 14028 105
    1032151
    저 처음으로 Hello World! 배웠어요! [36] 뿌앙빵뿌아앙 15/03/16 04:27 7697 37
    1030730
    개강인가요? (질문시 주의사항) [9] 오늩의유머 15/03/12 11:40 4232 38
    1030409
    [펌][개발자 컬럼] C/C++ 를 학습해도 괜찮을까? [26] ㄱㅡ 15/03/11 15:49 23906 95
    1030369
    남편이랑 영작하는데 ㅋㅋㅋㅋㅋㅋ [32] 뭉냥뭉냥 15/03/11 13:39 11214 55
    1030055
    훌륭한 Java 프로그래머의 특징 [34] 콜드이슈 15/03/10 17:53 14268 65
    1030017
    유리컵에 물이 절반이 차있을때.. [77] 콜드이슈 15/03/10 16:44 8817 103
    1028490
    무심코 배경설정해놧다가 심장 멎는줄.. [18] 밥먹오유 15/03/06 21:46 9063 70
    1026341
    내 노예다 상회입찰하지마라! [33] 한혜진(33세) 15/03/01 17:42 9725 103
    1026272
    프로그래머가 보면 암걸리는 만화 [27] 초코팥 15/03/01 14:38 11665 93
    1023501
    빠ㄹ리요 급해요 빨리빠ㄹ리빨리 들어와봐요!!!!!!!!!!!!! [11] 취중코딩 15/02/24 00:55 5661 35
    1022045
    프로그래밍 8개월 공부해서 취업한 썰 풀어봅니다. [21] 미토콘도리아 15/02/21 02:26 71440 91
    1021543
    3G/4G를 자주쓰는 오유 프로그래머 분들위하여 [13] 푸른촴치 15/02/19 23:04 6160 36
    1020421
    HTML 질문있어요 [26] 본인삭제금지 YSJL 15/02/17 13:26 4037 55
    1015219
    재미있는 자기 프로그래밍 실력을 테스트 해볼 수 있는 홈페이지가 있네요 [9] 자이제 15/02/07 19:28 9729 67
    1013793
    어 잘 모르겠는데 이렇게 해봤는데 되네..... [7] 오늘인게유머 15/02/04 22:19 4898 29
    1013360
    스택오버플로 한국어판 개설 요청 페이지 [22] tm 15/02/04 00:26 4081 28
    1011899
    3주만에 c++정복하기~~~~~~ [9] 변요한하트 15/02/01 06:40 9156 52
    1011849
    홍콩행 코딩바 [50] Lano2 15/02/01 02:08 7340 111
    1011495
    젠장, ㅠ_ㅠ. 이런 차별은 슬프다.. [9] 킬러머신 15/01/31 16:15 3304 28
    1011383
    작작하세요 잉여잉여킹짱 15/01/31 11:17 5863 66
    1011081
    왜 45세 정년이 될 수 밖에 없는가 (기술기업의 관점에서) [16] REGENTAG 15/01/30 19:14 8095 53
    1010700
    홈페이지 가격이 후려처지는 과정 [18] enoeht 15/01/30 00:17 8021 69
    1000411
    네 반박해보죠. [19] ansi5120 15/01/10 03:58 4924 27
    999363
    알고리즘 학습 지금까지 본것중 최고임 [43] 나이쓰한넘 15/01/08 01:00 18715 131
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈