5. 데이터형 규정 5. 1 명명 관례 규정 구조체(structure), 유니언(union) 및 열거(enumeration)를 포함한 모든 새로운 데이터형의 이름은 소문자와 단어 내부의 밑줄로만 구성되어야 하며 ‘_t‘로 끝나야 한다. 모든 새로운 구조체, 유니언형 및 열거형은 typedef 통해 명명되어야 한다. 모든 public 데이터형의 이름은 모듈 이름과 밑줄을 앞에 붙여야 한다. 예시 typedef struct { uint16_t count; uint16_t max_count; uint16_t _unused; uint16_t control; } timer_reg_t; 이유 데이터형 이름과 변수 이름은 종종 유사합니다. 예를 들어, 주변장치에서 타이머 제어 레지스터 세트가 'timer_reg' 이..
4. 모듈 규정 4. 3 소스 파일 규정 각 소스 파일에는 하나의 entity를 제어하는 적절한 동작만 포함해야 한다. entity의 예로는 캡슐화된 데이터 타입, 활성 객체, 주변장치 드라이버(예: UART), 통신 프로토콜 또는 계층(예: ARP) 등이 있다. 각 소스 파일에는 다음 섹션의 일부 또는 전부가 열거된 순서대로 구성되어야 한다. 주석 블록, #include문, 데이터 유형, 상수 및 매크로 정의, 정적 데이터 선언, private 함수 프로토타입, public 함수 몸체 그리고 private 함수 몸체. 각 소스 파일은 컴파일러가 public 함수와 해당 프로토타입이 일치하는지 확실히 할 수 있도록 동일한 이름의 헤더 파일을 포함해야 한다(예: 파일 adc.c에는 #include "adc..
4. 모듈 규정 4. 2 헤더 파일 규정 각 소스 파일에 대해 정확하게 하나의 헤더 파일이 있어야 하며, 항상 동일한 루트 이름을 가져야 한다. 각 헤더 파일은 아래의 예와 같이 다중 include에 대응하기 위한 전처리기를 포함해야 한다. 헤더 파일에는 (프로토타입 또는 매크로, #define 및 typdefs를 통해) 다른 모듈과 비교해 엄격하게 알릴 필요가 있는 프로시저, 상수 및 데이터 형식만 표시해야 한다. 헤더 파일에 (extern을 사용한) 어떤 변수도 선언하지 않는 것이 선호되는 관행이다. 어떤 변수에 대한 저장 공간도 헤더 파일에서 할당되어서는 안된다. public 헤더 파일은 private 헤더 파일을 #include 할 수 없다. 예시 #ifndef ADC_H #define ADC_H..
4. 모듈 규정 4. 1 명명 관례 규정 모든 모듈 이름은 소문자, 숫자 및 밑줄로 구성되어야 합니다. 헤더 및 소스 파일 이름에 공백을 사용하면 안됩니다. 모든 모듈 이름은 앞 8자에 의해 고유해야 하며 헤더 및 소스 파일 이름에 대해 각각 .h와 .c로 끝나야 합니다. 모듈의 헤더 파일 이름은 C 또는 C++ 표준 라이브러리의 헤더 파일 이름을 공유해서는 안 됩니다. 예를 들어 모듈의 이름은 “stdio” 또는 “math“로 지정해서는 안됩니다. main() 함수를 포함하는 모듈은 소스 파일 이름의 일부로 “main”라는 단어를 포함해야 합니다. 예시 /** @file crc.h * * @brief Compact CRC library for embedded systems for CRC-CCITT, C..
3. 공백 규정 3. 6 출력되지 않는 문자 규정 가능하면 모든 소스 코드 라인은 'CR'-'LF'(0x0D 0x0A)가 아닌 단일 문자 'LF'(ASCII 0x0A)로만 끝나야 한다. 소스 코드 파일에서 허용되는 또다른 출력되지 않는 문자는 form feed 문자 'FF'(ASCII 0x0C)뿐이다. 예시 출력되지 않는 문자는 나타낼 수 없습니다. 이유 다중 문자 'CR'-'LF'는 단일 문자 'LF'보다 다중 플랫폼 개발 환경에서 문제를 일으킬 가능성이 높습니다. 이러한 문제중 하나는 유닉스 플랫폼의 다중 라인 전처리기 매크로와 관련있습니다. 시행 에디터 프로그램은 LF를 사용하도록 설정되어야 합니다. 또한 자동화된 도구는 빌드 중에 모든 새 소스코드 또는 수정된 소스코드 파일을 스캔하여 CR-LF ..
3. 공백 규정 3. 5 탭 규정 탭 문자(ASCII 0x09)를 소스 코드 파일 내에 사용하지 말아야 한다. 예시 // When tabs are needed inside a string, use the ‘\t’ character. #define COPYRIGHT “Copyright (c) 2018 Barr Group.\tAll rights reserved.” // When indents are needed in the source code, align via spaces instead. void main (void) { // If not, you can encounter // all sorts // of weird and // uneven // alignment of code and comments....
3. 공백 규정 3. 4 들여쓰기 규정 각 들여쓰기 수준은 줄의 시작부터 4의 배수로 정렬되어야 합니다. switch문 내에서 case 라벨은 정렬되어야 하며, 각 case 블록의 내용은 그 위치에서부터 한 번 들여써야 합니다. 코드 라인이 너무 길어서 최대 라인 폭 내에 맞지 않을 때는 가능한 한 가장 읽기 쉽게 두 번째 라인과 후속 라인을 들여쓰십시오. 예시 sys_error_handler(int err) { switch (err) { case ERR_THE_FIRST: ... break; default: ... break; } // Purposefully misaligned indentation; see why? if ((first_very_long_comparison_here && second_v..
3. 공백 규정 3. 3 빈 줄 규정 한 줄에는 한 문장만 넣는다. 각 코드 블록 앞뒤에 빈 줄이 있어야 한다. 코드 블록의 예로는 반복문과, if…else 및 switch문, 연속적인 선언문 등이 있다. 각 소스 파일은 코드 끝에 종료를 알리는 주석과 그 다음 빈 줄이 있어야 한다. 예시 /** @file crc.h * * @brief Compact CRC library for embedded systems for CRC-CCITT, CRC-16, CRC-32. * * @par * COPYRIGHT NOTICE: (c) 2000, 2018 Michael Barr. This software is placed in the * public domain and may be used for any purpose..