MacBook Pro 2017을 가지고 있고 "void main"이라는 프로그램을 컴파일 할 때마다 컴파일러에서 main의 리턴 타입이 INT는 ... 경고는 말한다"main의 리턴 타입은 int가 아닙니다"라는 경고가 MacOS에서 발생했습니다
void main(){
(...)
}
MacBook Pro 2017을 가지고 있고 "void main"이라는 프로그램을 컴파일 할 때마다 컴파일러에서 main의 리턴 타입이 INT는 ... 경고는 말한다"main의 리턴 타입은 int가 아닙니다"라는 경고가 MacOS에서 발생했습니다
void main(){
(...)
}
처럼, 당신은 int
로 반환 유형을 정의해야합니다
int main() {
// bunch of code...
return 0;
}
main()
가 int
값을 반환 할 것으로 예상합니다. 최소한의 시작은 다음과 같습니다
int main() {
return 0;
}
명령 줄 매개 변수를 받아들이는 형식적인 버전 :
int main(int argc, char** argv) {
return 0;
}
다른 유형으로 선언이 호환되지 않는 수 있습니다. 구형 컴파일러 중 일부는 상관하지 않지만 Xcode는 그렇지 않습니다.
C는 오랜 시간이었으며 초기부터 상당히 발전했습니다. 이전 참조를 사용하는 경우 실제로 이상한 표기법이나 더 이상 가치가없는 규칙이있는 예제를 찾을 수 있습니다.
현재 버전의 C 표준에서는 main
함수의 반환 유형이 int
이어야합니다. 따라서 정의를 int main()
으로 변경하고 값을 반환해야합니다.
C standard 자세히 호스팅 환경의 제 5.1.2.2.1 다음 상태 : 프로그램 시작시라는
기능이
main
지정됩니다. 구현시이 함수의 프로토 타입이 없음을 선언합니다. 그것은 은int
리턴 유형없이 파라미터를 정의한다 :int main(void) { /* ... */ }
하거나 로컬 임의 이름이 사용될 수 있지만
argc
및argv
여기 언급 개의 파라미터 (함께 선언 가되는 함수)에 :int main(int argc, char *argv[]) { /* ... */ }
또는 동등한 또는 몇몇 다른 구현 정의 방식
.
빈 매개 변수 목록은 매개 변수를 사용하지 않으므로 int main()
의 정의가 허용됩니다. 섹션 6.7.6.3에서 :
14 식별자리스트는 함수 파라미터들의 식별자들만을 선언한다. 해당 함수 정의의 일부인 함수 선언자 의 빈 목록은 함수에 매개 변수가 없음을 지정합니다. 함수 선언자 의 빈 목록은 해당 함수 정의의 일부가 아니므로 매개 변수의 수 또는 유형에 대한 정보가 제공되지 않음을 나타냅니다.
void main()
과 같은 주요 기능을 지정
는 K & R 일에서 미리 표준화 된 변형이고 더 이상 유효하지 않습니다.
'int main()'이'int main (void)'의 유효한 대체물 인 이유에 대한 의견이 있습니까? –
@DavidBowling Done. – dbush
흠. 나는 이것을 생각하고 있었다 : [ "함수 선언자의 빈리스트는 그 함수의 정의의 일부분으로 함수에 매개 변수가 없다는 것을 지정한다."] (http://port70.net/~nsz/c/c11/) n1570.html # 6.7.6.3p14). 이것은 여기에 적용되지 않습니까? –
main의 리턴 타입을 int로 변경하십시오 :'int main() {' – Steve
'main'은'int'를 (호스트 된 환경에서, 어쨌든) 리턴하기로되어 있습니다. 네, 웹상과 몇 권의 책 (좋은 책을 포함하여)에서 무수히 많은'void main()'사례를 보게 될 것입니다 - 엄밀히 말하면 틀린 말입니다. 잘못된 반환 유형을 사용하면 * 정의되지 않은 동작 *이 발생하고 컴파일러는 정의되지 않은 동작에 대한 진단을 내 보내지 않아도됩니다. 그 중 많은 사람들이 지금 그렇게하고 있습니다.하지만 일반적인 오류이기 때문에. –