
3. 공백 규정 3. 2 정렬 규정 일련의 선언 내에 있는 변수 이름의 첫 문자를 정렬해야 합니다. struct 및 union의 멤버 이름은 첫 문자를 정렬해야 합니다. 인접한 대입문들 블록의 대입 연산자는 정렬되어야 합니다. 전처리기 지시문의 #는 #if 또는 #ifdef 시퀀스 내에서 지시문 자체가 들여쓰기될 수 있지만 항상 라인의 시작 부분에 위치해야 합니다. 예시 #ifdef USE_UNICODE_STRINGS # define BUFFER_BYTES 128 #else # define BUFFER_BYTES 64 #endif … typedef struct { uint8_t buffer[BUFFER_BYTES]; uint8_t checksum; } string_t; 이유 정렬은 시각적으로 유사성을 강..

2002년작. IMDB 7.1점 www.imdb.com/title/tt0251160/ John Q (2002) - IMDb Directed by Nick Cassavetes. With Denzel Washington, Robert Duvall, Gabriela Oltean, Kimberly Elise. John Quincy Archibald takes a hospital emergency room hostage when his insurance won't cover his son's heart transplant. www.imdb.com 우리나라였음 의료 시스템을 파괴하는 행위로 절대 나올 수 없는 내용이겠지만, 미국같이 의료보험에 대한 불만이 많은 나라에서는 가능한 영웅이겠다... 싶다. 🍖🍖🍖 (3/..

3. 공백 규정 3. 1 공백 규정 if, while, for, switch, return 키워드와 같은 줄에 추가 표현이 있을 때 각 키워드 뒤에 공백 한 칸이 있어야 합니다. 각 할당 연산자 =, +=, -=, *=, /=, %=, &=, |=, ^=, ~=, !=는 항상 앞과 뒤에 공백 한 칸씩 있어야 합니다. 각 이항 연산자 +, -, *, /, %, =, ==, !=, , &, |, ^, &&, ||는 항상 앞과 뒤에 공백 한 칸씩 있어야 합니다. 각 단항 연산자 +, -, ++, --, !, ~는 피연산자와 공백 없이 붙어 있어야 합니다. 포인터 연산자 * 및 &는 선언문 내에서는 앞뒤로 공백이 있어야하지만, 선언문이 아닌 경우 피연산자와 공백없이 붙어 있어야 합니다. 삼항 연산자인 ? 와 :..

2. 주석 규정 2. 2 주석의 위치와 내용 규정 모든 주석은 명료하고 완전한 문장으로 적절한 철자법과 문법 그리고 적절한 구두점을 사용하여 작성되어야 한다. 가장 유용한 주석은 일반적으로 규모가 큰 알고리즘의 한 단계를 수행하는 코드 블록의 앞에 위치한다. 이러한 코드 블록 다음에 꼭 빈 라인을 넣어야 한다. 그리고 이 블록 앞의 주석은 들여쓰기 수준이 같아야 한다. 뻔한 코드에 주석을 달지 않도록 한다. 읽는 이가 C 언어를 안다고 가정하자. 예를 들어, 변수, 함수 이름 및 연산자에의해서 한 줄 코드의 의미가 명확하지 않지만 짧은 주석이 명확히 할 수 있는 경우에만 end-of-line 주석을 사용해야 한다. 특히, 아래와 같이 별 도움이 되지 않으면서 불필요한 주석을 사용하지 않는다. numero

2. 주석 규정 2.1 주석에서 허용하는 형식 규정 C++ 스타일의 단일 행 주석(//으로 시작하는)은 전통적인 C 스타일 주석(/* ... */)의 유용하고 수용 가능한 대안이다. 주석에는 전처리기 토큰(token)인 /*, //, \ 가 포함되지 않아야 한다. 아래 두 경우 일시적으로라도 주석을 작성해서는 안 된다. 코드 블록을 일시적으로 비활성화하려면 전처리기의 조건부 컴파일 기능을 사용한다(예: #if 0 … #endif). 디버그 출력 정보의 수준을 높이기 위해 특별히 존재하는 모든 라인 또는 코드 블록은 #ifndef NDEBUG … #endif로 둘러싸야 한다. 예시 /* The following code was meant to be part of the build... ... safety_..

1. 일반 규정 1.8 자주 사용하는 키워드 규정 선언한 모듈 외부에서 볼 필요가 없는 모든 함수와 변수는 키워드 static을 사용하여 선언해야 합니다. 적절한 경우에 키워드 const를 항상 사용해야 합니다. 사용 예는 다음과 같습니다. 초기화 이후 변하지 않는 변수를 선언할 때 수정돼서는 안될 참조 호출(call-by-reference) 함수의 매개변수를 정의할 때(예를 들어, char const *param) 수정돼서는 안될 struct나 union의 항목을 정의할 때(예를 들어, 메모리 사상 입출력 주변장치의 레지스터를 위한 구조체 오버레이에서) 상수를 생성하는 #define에 대한 대안으로 사용 적절한 경우 키워드 volatile를 항상 사용해야 합니다. 사용 예는 다음과 같습니다. 인터럽트 ..

1. 일반 규정 1.7 피해야할 키워드 규정 키워드 auto는 사용할 수 없습니다. 키워드 register는 사용할 수 없습니다. 키워드 goto는 사용하지 않는 것이 좋습니다. goto를 사용할 경우 동일한 블록내에서 이후에 선언된 레이블로만 점프합니다. 키워드 continue는 사용하지 않는 것이 좋습니다. 이유 키워드 auto는 C 언어의 불필요한 과거 기능입니다. 키워드 register는 프로그래머가 컴파일러보다 더 똑똑하다고 가정하고 있습니다. 현대 프로그래밍 관행에서 이러한 키워드를 사용해야 하는 설득력있는 이유는 없습니다. 키워드 goto와 continue는 C 언어에서 계속 사용되지만, 사용하면 코드가 엉망진창이 되는 경우가 많습니다. 특히, 구조적 프로그램의 일상적인 흐름제어에 반하는 점..

1. 일반 규정 1.6 캐스트 규정 캐스트를 사용하는 코드에서 가능한 값의 범위에 걸쳐 적절한 동작을 보장하는 방법을 설명하는 주석을 달아야 합니다. 예시 int abs (int arg) { return ((arg < 0) ? -arg : arg); } ... uint16_t sample = adc_read(ADC_CHANNEL_1); result = abs((int) sample); // WARNING: 32-bit int assumed. 이유 캐스트는 위험합니다. 위의 예제에서 부호없는 16비트 "sample" 변수는 부호가 있는 16비트 정수보다 큰 양의 값을 가질 수 있습니다. 이 경우 절대값도 부정확하게 됩니다. 따라서 int 형이 ISO C 표준에서의 16비트라면 오버플로우가 발생할 수 있습니..