2012-04-22 2 views
3

저는 C 언어를 처음 접했고 주요 기능 맨 위에 포함시킬 수있는 범용 헤더가 있는지 궁금합니다. 자바에서는 eclipse에서 ctrl + shift + o를 사용하는 것이 매우 쉽고 패키지를 가져올 수 있습니다. 그러나 C에서는 매번 Google을 추가해야합니다. 때로는 어떤 라이브러리를 포함 할지도 모릅니다. 대단히 감사합니다.C 언어로 포함 할 범용 헤더

+1

_Java_는 당신의 삶을 편하게 해주는 것이 아닙니다. _Eclipse_입니다. 자바는 당신에게 무엇을 말하지 않고 무언가를 수입하지 않았다는 것에 동등하게 불평 할 것입니다. Eclipse에서 Java와 동일한 기능을하는 IDE를 요청할 수도 있습니다. – paxdiablo

답변

3

보편적 헤더가 없습니다 - 모든 헤더를 파싱하는 데는 시간이 걸리고, 사용 가능한 헤더가 수천 (수백만은 아닐지라도)이므로 모든 컴파일 유닛에 모든 헤더를 포함 할 방법이 없습니다. 99.9 %가 이 아니기 때문에을 사용하고 고정 할당을 사용하여 최종 실행 파일을 불필요하게 확장 할 수 있기 때문에 원치 않을 것입니다.

모든 표준화 된 기능은 맨페의 맨 위에 포함해야하는 헤더를 알려줍니다. malloc(3)에서 예를 들면 다음과 같습니다

NAME 
    calloc, malloc, free, realloc - Allocate and free dynamic 
    memory 

SYNOPSIS 
    #include <stdlib.h> 

    void *calloc(size_t nmemb, size_t size); 
    void *malloc(size_t size); 
    void free(void *ptr); 
    void *realloc(void *ptr, size_t size); 

따라서 당신은 당신의 프로젝트에 #include <stdlib.h>해야하고, 당신이 볼 수 있도록 프로토 타입이있다.

맨 페이지를 빠르게 보려면 IDE를 구성하여 빠르게 표시 할 수 있습니다.의 기본 키 바인딩은 vim에서 커서 아래의 기능에 대한 맨 페이지를로드하는 것입니다. 그러나 기본 맨 페이지 검색 순서를 사용하기 때문에 때로는 잘못된 페이지를 찾을 수 있습니다. (printf에, 예를 들어, printf(1)보다는 printf(3)로드합니다. 성가신. 원하는 경우 man(1)에서 설명하는 MANSECT 환경 변수, 1 전에 당신에게 3를 표시하려면이 동작을 변경할 수 있습니다.)

1

번호

난 당신이 하나를 만들 수도있을 것 같군요,하지만 그건 상당히 아래로 당신의 컴파일을 느리게한다. 일부 IDE는 포함 파일을 찾는 데 도움이 될 수 있습니다.

3

범용 헤더는 없지만 애플리케이션 용으로 만들 수 있으며 모든 파일에 포함 할 수 있습니다. 호출해야하는 기능에 어떤 파일을 포함 시킬지 확실하지 않으면 UNIX에서 man 명령을 사용할 수 있습니다. 예를 들어,

man 3 printf 

이 보여줍니다

사용법

#include <stdio.h> 

int printf(const char * restrict format, ...); 

충분한 시간 동안 그와 함께 머물 경우, 보통 헤더에 함수의 "지도"를 기억 상대적으로 빨리.

+1

Linux 나 GNU 기반 시스템에서만'man printf -s 3 '을 사용할 수 있습니다 (환경에서 POSIXLY_CORRECT를 설정하지 않은 경우에만). 모든 정상적인 장소는'printf'와 같은 인수 앞에'-s 3'과 같은 옵션이 필요합니다.이 옵션은 이식성을 위해'man -s 3 printf'를 만듭니다. 그러나 ISTR에는'-s 3' 표기법을 지원하지 않는 시스템이 있으며'man 3 printf' 표기법을 사용하는 것이 더 나을 때가 있습니다. 그런데, 나는 그런 시스템의 예를 즉시 가지고 있지 않다. 더 최근의 릴리스로 상황이 변경되었을 수 있으며 나는 오래 전에 딸꾹질을 기억하고 있습니다. –

+0

@JonathanLeffler 흥미 롭습니다! 필자는 짧은 "man 3 printf"표기법을 모르면서 필자의 맥에서이 구문을 사용 해왔다. 감사! – dasblinkenlight

+0

부트 스트래핑 문제 ... 'printf'- 가장 명백한 이름이 아닙니다. 'calloc', 'strcmp'- 괜찮습니다. – GoZoner

3

전체를 포괄하는 단일 헤더가 없습니다.

다른 모든 것들은 따로 있지만, MS 윈도우 용 헤더는 유닉스에서는 틀릴 것이고, 유닉스 용 헤더는 윈도우에서는 틀릴 것이다. Unix에서도 유니버설 헤더에 모든 X11 헤더가 포함되어 있어야합니까? OpenSSL 헤더는 어떻습니까? POSIX 스레드 헤더는 어떻습니까? 다른 POSIX 헤더?

사용해야하는 특정 기능에 대한 정보를 찾을 수있는 곳을 알아야합니다. 유닉스에서, 고전적인 리소스는 '매뉴얼 페이지'('수동 페이지'를 의미하며, 일반적으로 '-man'troff/nroff 매크로 패키지로 포맷 됨). 요즘 웹을 사용하는 경향이 있습니다. 예를 들어 The Open Group의 POSIX man 페이지가 있습니다.

(헤더가 라이브러리에서 분리되어 있습니다, 하나의 라이브러리에있는 함수가 사용하는 많은 헤더가있을 수있는 그림으로 표준 C 라이브러리를 참조하십시오.).

+0

데비안과 우분투 및 다른 파생 된 시스템은'manpages-posix' 및'manpages-posix-dev' 패키지에서 POSIX 맨 페이지를 사용할 수 있습니다. 이렇게하면'man 3 pthread_cancel'과'man 3posix pthread_cancel'을 쉽게 비교할 수 있습니다 . 나는 둘 다 내 손끝에있다. – sarnold

1

당신이 얻을 수있는 이클립스 자주 사용하는 다양한 헤더 파일을 자동으로 삽입합니다. 하지만 : C를 배우고 싶다면 어떤 것을 포함 시킬지 찾아내는 것이 좋습니다.

모든 학습과 마찬가지입니다. 반복함으로써 배우는 —을 배우십시오.

표준 C 라이브러리

헤더 파일을 직관적으로 이름을 지정하고 표준 기능의 관리 목록을 가지고 있습니다하지 — 거대한 것을하고있다.

this과 같은 목록을 읽고 읽을 수 있습니다. 포함 등이 필요할 때 읽으십시오.

언제 그리고 무엇을 포함해야하는지 정말로 생각할 때. 그것을 자동화하십시오.

1

헤더 파일에 정의 된 인터페이스를 사용하고 있으므로 헤더 파일이 포함됩니다. 포함 할 표준 세트가 있기 때문에가 아닙니다. 그렇다면 필요한 인터페이스는 어떻게 결정합니까?

  1. 중 헤더 파일의 헤더 파일이나 설명을 찾아 인터페이스의 배우들을 통해보고, 또는
  2. 사용 '때마침 SEARCH_TERM'또는 '남자 interface_function'두 가지 기본 옵션이 있습니다.

초보자로서, 옵션 # 1 /usr/include에서 좋은 시작 — 모습이거나 '는 C 표준 라이브러리'(유사 또는 무언가)라는 책을 찾을 것입니다.

+0

'/ usr/include'에있는 머티리얼의 헤더를 쓰는 법을 배우는 것에 신중해야합니다. 이 헤더에는 일반적으로 수년 동안 축적 된 수많은 크래프트 (cruft)와 많은 표준의 여러 버전이 포함되어 있으며이를 모두 처리하려고합니다. 그렇게하기 위해, 그들은 거의 선명도의 모델이 아닙니다. 그들은 종종 가장 복잡하고 불투명 한'# ifdef'와'#define'의 둥지 중 일부입니다. 즉, 그들은 특정 기능의 정의 여부와 방법을 찾는 곳입니다. 정의가 사용되는 첫 번째 (또는 두 번째, 때로는 백 번째) 눈짓에서 항상 명확한 것은 아닙니다. –

0

참조 설명서 (예 : this one)에는 모든 라이브러리 기능과 관련 헤더 파일이 나열된 부록이 있습니다. 비슷한 목록을 보려면 C language standard 온라인을 확인하십시오.