근데 대학교 강의자료나 책에는 자주쓰이는거냐
void main이 비표준이었구나..
도트(222.104)
2017-10-18 04:40
추천 0
댓글 39
다른 게시글
-
프로그래머 할바에야 호떡장사나 해라zzz(175.125) | 17.10.18추천 0
-
여자는 딱 남자의 성욕해소용임 [2]피에로~(zelot) | 17.10.18추천 2
-
딱 SAS 하고 R 만 할 줄 알면 취업가능함?작성자(98.222) | 17.10.18추천 0
-
형들 나 리눅스 커널 모듈 관련 질문 좀 해도 될까 [2]익명(116.121) | 17.10.18추천 0
-
답변 주신 2분 감사합니다. _ _BEX(125.139) | 17.10.18추천 0
-
스바루 게임수학 왤케 어렵냐?아둔(218.237) | 17.10.18추천 0
-
프로그래머 접은이유가 공부량에비해 대우가없어123(61.98) | 17.10.18추천 2
-
프로그래머의 세계는 가상이기에 정신적은스트레스가 너무크지않냐123(61.98) | 17.10.18추천 0
-
고졸로 이쪽에서 성공하려면 뭘더 공부해야할까..익명(121.67) | 17.10.18추천 0
-
압타나 스튜디오로 C/C++, Java 개발 가능함? [1]두정갑(121.167) | 17.10.18추천 0
교수가 정상적이면안쑤지 밑에 내가 왜인트메인 써야하는지 적어놧다 ㅇㅇ - dc App
교수보다는 원서책에도 그렇고 왜 쓰는걸까
그냐?? 내가본책에선엄는데 - dc App
요즘 리눅스배우는중인데 리눅스원서책에 그렇게쓰더라
C99표준임
c99 표준이 void main()? 언제부터? 표준안 읽을 때 한 번도 못 봤는데? - dc App
void main이 유일히 가능한 시그니쳐란 얘기가 아니고 void main도 적법한 시그니쳐라고
표준문서 사서 읽어보긴 함?
응 사서 읽었고, void main을 한 번도 본 경험이 없어서 그럼. 캡쳐라도 떠보던가 내 전글 읽어보면 int main올린거 그 부분밖에 못 봤으니까 - dc App
http://en.cppreference.com/w/c/language/main_function
If
the return type of the main function is not compatible with int (e.g. void main(void)), the value returned to the execution environment is unsp
ecified
The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters
c99에서도 int를 리턴한다고 써있구만ㅋㅋ
어디서 약을팔아
* another implementation-defined signature */
void main을 컴파일러에 따라 금지하는건 역사적으로
C99 이전에 금지됐었고 해당 실행환경에 따라 return값이 매우 유의미하기 때문이지 비표준이라서가 아님 내가 위에 적은 저 링크에 들어가면 unspecified라고 나와있는데 이건 undefined가 아니고 구현자가 마음대로 하란 얘기임
자주썼던 컴파일러 중엔 vs / gcc는 허용했던거 같고 clang은 -std=c99 해도 불허했던거 같은데 컴파일러가 허락 안해준다고 그게 비표준이란건 아님.
void main을 쓰란 얘기를 하는게 아니고 표준에 적법한 문법이란 얘기임. 리턴값이 대부분의 실행 환경에서 유의미하니까 리턴을 안하는건 bad practice인건 맞음 그렇다고 그게 비표준은 아니잖음?
ISO/IEC 9899:TC2 문서를 봐도 void main에 대한 언급은 전혀 없는데 헛소리 말아라 그 일부 컴파일러도 void main은 int로 변환해서 처리한다.
그러니까 너 말은 C11 §5.1.2.2.1 - Program startup - clearly says "int main(void)", "int main(int argc, char *argv[])" or equivalent; or in some other implementation-defined manner. 이게 void main이 표준에 정의되지 않은 부분이라서 컴파일러 마음대로 할 수 있다는 뜻 아님? i = i++; 이런 식으로 한 식에서 한 변수의 값이 여러변 바뀌는 것을 정의하지 않아서 컴파일러 마음대로 하는 것처럼
근데 애초에 비표준이라는게 표준에 정의되지 않은 것이라는 뜻 아님? 그럼 void main은 컴파일러가 친절해서 처리해주는 경우고, 결국에는 독립실행형 프로그램이 아닌 이상 작성하면 안 되는 코드로 보이는데
C99표준에서 main함수는 int main()이나 int main(int argc, char *argv[])다
표준안에 직접적으로 void main을 써도 된다는 말은 없음. 금지해야 한다는 말도 없어서 컴파일러가 친절해서 해주는거지 원칙적으로는 저 두 개로 적는게 맞다고 보는데
덧붙이자면 위에서 equivalent한 것은 int can be replaced by a typedef name defined as int, or the type of argv can be written as char ** argv, and so on
어디서 잘못알고 개소리 처하는건 다 무시하고 두가지만 쓰면 C하는데 지장 없다.
void나 int가 작동하는 몇 가지 임베디드 시스템이나 커널같은 경우를 제외하면 int로 사용하는게 맞는데, 애초에 논점은 임베디드나 커널이 아닌 PC에서의 상황 아니었음? 커널같은 환경에서는 void main이 되니까 허용되는거임. 이런식으로 말 하면, 고양이끼리 놀게 하고 있는데 거기에 호랑이 데려오고 얘도 고양이과니까 같이 놀게 하자. 이거랑 뭐가 다름?
치킨배달 니가 진듯 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그냥 구글에 C99표준 치니까 문서 나오네. The implementation declares no prototype for this function. It shall be defined 1.{with a return type of int and with no parameters}: int main(void) { /* ... */ } or 2.{with two parameters} (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared): int main(int argc, char *argv[]) { /* ... */ } or
3.{equivalent};9) or 4. {in some other implementation-defined manner}. 혹시나 or가 뒤의 어구에 갖다 붙는다고 할까봐 괄호까지 쳤음. C99에 의하면 적법한 signature란 얘기임
4번을 보셈
implementation defined 랑 undefined는 다르다. void main 은 C99 이후부터 impl defined 도 분류되기 때문에 표준이 아닌건 아니다. 하지만 impl defined 기능들은 특성상 지양해야되는 것도 맞다 - return 0;
https://stackoverflow.com/a/9356660
The C99 standard does allow for other implementation-defined signatures, and you can use these if you've read the manual for your compiler and it says you can.
커헉 / 논점은 표준이 아니냐라는 것이었고 void main을 권장한다는게 아님은 위에서도 밝혔으므로;
걍 결론적으로 정리해서 말한거임 - return 0;
아 네
킹갓 / 지고 안 지고 할게 뭐가 있음? 난 진짜 궁금해서 물어보는건데, 그러면 학생들은 모두 선생한테 졌다는 표현 써야 함?
11 / ㄳ 새롭게 알고 가네