none
C언어 LNK2005와 LNK1160이 뜹니다 RRS feed

  • 질문

  • 안녕하세요 C언어를 처음으로 공부하는데요, 자꾸 오류가 나서 ㅠㅠ 

    #include<stdio.h>
    void main() {
    int ch;
    ch = getchar();
    putchar(ch);
    }


    우선 제가 적은 코드는 위와 같습니다. 그런데 

    'main'의 반환 형식이 'int'여야 하는데 'void'입니다.

    _main이 소스.obj에 이미 정의된 적이 있습니다.

    여러번 정의된 기호가 있습니다. 

    이런 오류가 나서 ㅠㅠ 잘 이해가 안가요! C언어 인강 듣고 코드 그대로 따라 치고 있는데 대체 왜 void main() 대신에 int main()을 써야 하는 거죠?? 그리고 저는 디버그-옵션-기호-Microsoft기호 에 체크해서 기호를 다운로드(?)했거든요. 그러고 나서 실행을 하니 저런 오류가 뜹니다. 대체 뭐가 잘못된 건가요??ㅠㅠ

    그리고 프로젝트 하나에 무조건 파일 하나만 쓸 수 있나요?

    2018년 7월 3일 화요일 오전 6:28

답변

  • 1. 'main'의 반환 형식이 'int'여야 하는데 'void'입니다.

    -> main 함수가 반드시 int 타입을 반환해야 하는 것은 아닙니다.

    Visual C++ 에서는 main 함수의 반환 타입이 void 이더라도 오류가 나지 않습니다.

    다만, main 함수의 반환 타입을 보통 int 타입으로 두는 이유는 main 함수의 반환값이

    곧 해당 프로세스 종료 시 반환 값이 되기 때문에 그렇게 사용하는 것입니다.

    프로세스 반환값이 필요 없다면 void 타입으로 두어도 상관없습니다.

    2. _main이 소스.obj에 이미 정의된 적이 있습니다.

    -> 아마도 main 함수가 두 번 이상 정의된 것 같습니다.

    main 함수는 프로세스의 진입점이기 때문에 프로젝트에서 반드시 하나의 main 함수만 정의해야 합니다.

    3. 프로젝트 하나에 무조건 파일 하나만 쓸 수 있나요?

    -> 파일 개수 제한은 없습니다. 프로젝트가 커지면 커질 수록 기능 단위로 파일을 나누어 구현하는게 더 편하겠죠.

    2018년 7월 3일 화요일 오전 7:23