IT story

왜 #include하지 않아야합니까

hot-time 2020. 5. 9. 09:17
반응형

왜 #include하지 않아야합니까 ?


#include지시어가 다음과 같은 코드로 질문을 게시했습니다 .

#include <bits/stdc++.h>

선생님은 저에게 이렇게하라고 하셨지만, 의견 섹션에서 내가해서는 안된다는 정보를 받았습니다.

왜?


포함 <bits/stdc++.h>하는 것이 스택 오버플로에서 볼 수있는 것으로 보이며, 아마도 현재 학년도에 국가 교과 과정에 새로 추가 된 것 같습니다.

나는 이점이 모호하게 주어진다고 상상한다.

  • #include줄만 작성하면 됩니다.
  • 모든 표준 헤더를 찾을 필요는 없습니다.

불행히도 이것은 게으른 핵이며 <string>, <iostream>및과 같은 개별 표준 헤더 대신 GCC 내부 헤더의 이름을 직접 지정합니다 <vector>. 휴대 성을 망치고 끔찍한 습관을 키 웁니다.

단점은 다음과 같습니다.

  • 아마도 해당 컴파일러에서만 작동합니다.
  • 내용이 표준으로 설정되어 있지 않기 때문에 사용할 때 무엇을 해야할지 전혀 모릅니다
  • 컴파일러를 다음 버전으로 업그레이드해도 프로그램이 손상 될 수 있습니다
  • 모든 단일 표준 헤더를 소스 코드와 함께 구문 분석하고 컴파일해야합니다. 느리고 특정 컴파일 설정에서 대량 실행 파일이 생성됩니다.

하지마!


추가 정보:

Quora가 나쁜 이유의 예 :


왜? 마치 C ++ 표준 헤더 인 것처럼 사용되지만 표준에 대해서는 언급하지 않기 때문입니다. 따라서 코드는 구성으로 이식 할 수 없습니다. cppreference 에 대한 문서는 없습니다 . 따라서 존재하지 않을 수도 있습니다. 누군가의 상상력의 조각입니다 :)


Programming Puzzles & Code Golf 라는 스택 교환 사이트가 있습니다 . 해당 사이트 프로그래밍 퍼즐퍼즐의 정의에 부합합니다 . "장난감이나 환자의 노력으로 해결해야 할 어려움을 제시하여 장난감, 문제 또는 기타 재미를 느끼도록 고안된 것" 이들은 일상적인 작업에서 발생하는 실제 문제로 작업 프로그래머를 즐겁게하는 방식이 아니라 즐겁게 사용하도록 설계되었습니다.

코드 골프 는 "참가자가 특정 알고리즘을 구현하는 가장 짧은 소스 코드를 달성하기 위해 노력하는 레크리에이션 컴퓨터 프로그래밍 경쟁의 한 유형입니다." PP & CG 사이트의 답변에서 사람들이 답변에 바이트 수를 지정하는 것을 볼 수 있습니다. 그들이 몇 바이트를 깎을 수있는 방법을 찾으면, 원래 숫자를 지우고 새로운 숫자를 기록 할 것입니다.

예상대로 코드 골프는 프로그래밍 언어 남용에 대한 보상입니다. 한글자 변수 이름 공백이 없습니다. 라이브러리 기능을 창의적으로 사용합니다. 문서화되지 않은 기능. 비표준 프로그래밍 실습. 끔찍한 해킹.

프로그래머가 직장에서 골프 스타일 코드가 포함 된 풀 요청을 제출 한 경우 거부됩니다. 그들의 동료들은 그들을 비웃을 것입니다. 그들의 관리자는 채팅을 위해 책상으로 떨어질 것입니다. 그럼에도 불구하고 프로그래머는 PP & CG에 답변을 제출함으로써 스스로를 즐겁게합니다.

이것은 stdc ++. h와 어떤 관련이 있습니까? 다른 사람들이 지적했듯이 그것을 사용하는 것은 게으르다. 이식성이 없으므로 컴파일러 또는 컴파일러의 다음 버전에서 작동하는지 알 수 없습니다. 나쁜 습관을 키 웁니다. 비표준이므로 프로그램의 동작이 예상과 다를 수 있습니다. 컴파일 시간과 실행 파일 크기가 증가 할 수 있습니다.

이것들은 모두 유효하고 올바른 반대입니다. 그렇다면 왜이 괴물을 사용합니까?

어떤 사람들 코드 골프 없이 프로그래밍 퍼즐좋아한다는 것이 밝혀졌다 . 이들은 ACM-ICPC, Google Code Jam 및 Facebook Hacker Cup과 같은 이벤트 또는 Topcoder 및 Codeforces와 같은 사이트에서 모여 경쟁합니다. 그들의 순위는 프로그램 정확성, 실행 속도 및 솔루션 제출 속도에 따라 결정됩니다. 실행 속도를 최대화하기 위해 많은 참가자가 C ++을 사용합니다. 코딩 속도를 최대화하기 위해 일부는 stdc ++. h를 사용합니다.

이것이 좋은 생각입니까? 단점 목록을 확인하십시오. 이식성? 이러한 코딩 이벤트는 참가자가 미리 알고있는 특정 컴파일러 버전을 사용하므로 중요하지 않습니다. 표준 준수? 유효 수명이 1 시간 미만인 코드 블록과는 관련이 없습니다. 컴파일 시간과 실행 가능한 크기? 이것들은 컨테스트의 점수 루 브릭의 일부가 아닙니다.

그래서 우리는 나쁜 습관에 빠져 있습니다. 이것은 유효한 이의 제기입니다. 참가자는이 헤더 파일을 사용하여 프로그램에서 사용중인 기능을 정의하는 표준 헤더 파일을 배울 기회를 피할 수 있습니다. 실제 코드를 작성할 때 (stdc ++. h를 사용하지 않음)이 정보를 찾는 데 시간을 소비해야하므로 생산성이 떨어집니다. 그것은 stdc ++. h 연습의 단점입니다.

stdc ++. h를 사용하고 다른 코딩 표준을 위반하는 것과 같은 나쁜 습관을 조장하는 경우 경쟁 프로그래밍에 참여할 가치가있는 이유에 대한 의문이 제기됩니다. 한 가지 대답은 사람들이 PP & CG에 프로그램을 게시하는 것과 같은 이유로 그렇게하는 것입니다. 일부 프로그래머는 게임과 같은 맥락에서 코딩 기술을 사용하는 것이 즐겁다는 것을 알게됩니다.

So the question of whether to use stdc++.h comes down to whether the coding speed benefits in a programming contest outweigh the bad habits that one might develop by using it.

This question asks: "Why should I not #include <bits/stdc++.h>?" I realize that it was asked and answered to make a point, and the accepted answer is intended to be the One True Answer to this question. But the question isn't "Why should I not #include <bits/stdc++.h> in production code?" Therefore, I think it's reasonable to consider other scenarios where the answer may be different.

참고URL : https://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h

반응형