2012-06-29 6 views
1

Linux 플랫폼에서 C 언어로 프로그래밍하고 있습니다. 헤더 파일에 선언 순서와 #defines을 알고 싶습니다. 내 헤더 파일은 누구도 날을 제안 해주십시오 수있는 다음과 같은 일을 포함 예를 들어헤더 파일의 선언 및 #define 순서가 우선적입니다.

어떻게이 모든 배열 정말 도움이 될 수

등 모든 선언, 매크로, exteren 선언과 같은 기능을 배치 할 수있는 완벽한 주문해야 이러한 것들은 가독성 및 코딩 표준 측면에서 헤더 파일에 적절하게 포함됩니다. #define

#include <pthread.h>     // Including Header files 
#include <signal.h> 

#define IMAGE_DIRECTORY     "Abcdefgh..." // Providing #defines 
#define FAILED_TO_RECOGNIZE    "Xykbkksk..." 
#define PROGRESS_FRAME_COLOR   "#8e8ea1" 
#define FRAME_BG_COLOR     "#7c90ac"  

#define PRINT_FUNCTION_NAME fprintf(stderr, 
        "CTRL IN FUNCTION : %s\n",__func__); // Macro like functions 
typedef struct {           
     int userId;          // Structure 
     char name[32], rollNo[32]; 
     char class[16], section[16]; 
     unsigned long Id; 
}data_type; 

int noOfUsersList=0, usersListCount=0;     // Global variables 
+0

내부적으로'/ usr/include/pthread.h '를 보시면 그 방법을 알 수 있습니다. –

답변

1

매크로 정의가 하지 선언은 다음과 같습니다

다음은 샘플 헤더 파일 (필자는 적절한 순서에 따라 다음 작업 준비 할)입니다. 유일한 요구 사항은 사용하기 전에 매크로를 정의해야한다는 것입니다. 컴파일 단위가 끝날 때까지 정의 된 상태를 유지하거나 명시 적으로 #undef (또는 재정의 ...).

#define PRINT_FUNCTION_NAME() fprintf(stderr, \ 
    "CTRL IN FUNCTION: %s @%s:%d\n", __func__, __FILE__, __LINE__) 

공지 빈 형식 매크로 인수 (즉, 첫 번째 ()) 및 종료 세미콜론의 부족 :

내 문체 규칙은 "기능"구문처럼, 같은 것을 필요로 문 같은 매크로를 정의하는 것입니다 (왜냐하면 을 준 기능 호출로 사용하기 때문입니다 (예 : PRINT_FUNCTION_NAME(); 문). 디버그 메시지에 __FILE____LINE__도 사용하십시오.

는 종종 성명과 같은 매크로있는이 모습처럼 문을 가지고 있으며, 항상이 문으로 사용할 수있는 구문이기 때문에} while(0) (AN의 다음 한 부분으로 포함 do{뭔가 if 또는 else 분기 등). <ncurses.h>에서 예 :

#define getsyx(y,x) do { if (newscr) { \ 
      if (is_leaveok(newscr)) \ 
      (y) = (x) = -1; \ 
      else \ 
      getyx(newscr,(y), (x)); \ 
     } \ 
     } while(0) 
+0

pls 내 모든 말을 헤더 파일에 선언하는 것처럼 받아들이지 않는다 ... 나는 선언문, 매크로 같은 기능이있을 수 있다는 것을 의미한다. – john

+0

안녕하세요 Basile ... 귀중한 포인트를 언급 해 주셔서 감사합니다. 하지만 내 주요 관심사는이 모든 것의 순서입니다. 예를 들어 헤더 파일을 먼저 포함시킨 다음, 무엇을 ... 다음에 무엇을 ... 이렇게 할 수 있습니다. – john

+0

* 요구 사항은 사용을 사용하기 전에 매크로가'# define'-d 헤더 (아마도'# include'-d 헤더)에 있어야한다는 것입니다. 나머지는 코딩 스타일 또는 기타 * 규칙입니다. 'gcc -C -E -H'를 사용하여 사전 처리 된 양식을 얻을 수 있습니다. –

4

나는 년 동안이 일을하지 않은하지만 주로 유닉스, MS.DOS을 위해 개발 때 OS는 NetWare 및 Windows에서 동시에 나는이 연습이 개발/:

  1. 언어 #include를
  2. 운영 시스템은 다른 서브 시스템, 예로부터
  3. 인클루드 #include를 X11.
  4. 내 응용 프로그램 #includes.
  5. 이 소스 파일에 대한 내 로컬 # 정의.
  6. 이 파일에 대한 내 자신의 전달 선언.

어쩌면 당신은 (1)과 (2)를 뒤집을 수 있지만 꽤 많은 수의 컴파일러와 운영 체제에서 가장 잘 작동하는 것으로 나타났습니다.

1

코딩 스타일은 주관적이며 개인적으로 아래에 설명 된 규칙과 방법을 사용하지만 내 자신의 의견이며 절대적인 진실은 아닙니다. 그러나 그들은 오랜 경험과 어떤 경우에는 널리 인정 된 코딩 표준 (MISRA, CERT 등)을 기반으로합니다.

규칙 :

  • C 프로그래밍은 모든 모듈은 .H 파일과 .c 파일 구성 "코드 모듈"에서 이루어집니다.
  • .h 파일은 공개로 간주되어야하므로 #include는 항상 .h 파일에 있고 .h 파일에 있어서는 안됩니다. 모듈을 사용하려는 사람이 어떤 종속성이 있는지 알고 싶습니다.
  • C에서 non-const 전역 변수를 사용할 이유가 없으므로 const가 아닌 전역 변수와 외부 변수를 둘 곳은 나와 관련이 없습니다.
  • .h 파일에는 정의가 없어야합니다. 이것은 나쁜 프로그램 디자인 일뿐만 아니라 해결하기 어려운 수많은 링커 오류를 만드는 훌륭한 방법이기도합니다. .H 파일에서

는 다음과 같은 항목이 명시된 순서대로 표시 할 수 있습니다 : 헤더 가드의

  • 시작. (#ifndef MYHEADER_H ...)
  • 라이브러리 #includes.
  • 기타 #includes.
  • 컴파일러 옵션과 같은 특정 컴파일러 설정이 #pragma로 설정됩니다.
  • #defines로 공개 숫자 상수.
  • 공개 매크로.
  • 은폐 데이터 형식을 비롯한 공용 형식 정의입니다.
  • 공용 상수 선언 (extern const으로 선언).
  • 인라인 함수 정의 (드문 특수한 경우 가능하면 피하십시오).
  • 함수 프로토 타입.
  • 헤더 가드의 끝. .c 파일에서

#endif는 다음과 같은 항목이 명시된 순서대로 표시 할 수 있습니다 :

  • 가 자신의 해당 .H 파일의 포함합니다.
  • #defines의 개인 숫자 상수입니다.
  • 비공개 매크로.
  • 해당 .h 파일에서 불완전한 형식으로 선언 된 은폐 형 형식의 정의.
  • 개인 유형 정의.
  • 공개 상수의 정의 (.h 파일에 extern const로 선언 됨).
  • 개인 상수 (static const)의 정의.
  • 파일 범위의 개인 변수 정의 (static).
  • 개인 기능 선언 (static type func (type param);으로 선언)
  • .h 파일에 선언 된 공용 함수의 정의.
  • 개인 기능의 정의.