본문 바로가기
소프트웨어 개발(SW Dev)/Rule(CERT C)

CERT C - DCL 규칙 목록

by flowhistory 2024. 11. 7.

DCL : Declarations and Initialization (DCL) - 선언과 초기화

 

변수와 포인터 선언에 관련된 내용을 다루는 카테고리입니다.
변수와 포인터의 초기화, 선언 방법 등에 대한 규칙이 포함되어 있습니다.

 

Rule
Number
Rule Definition 비고
DCL20-C 함수에 매개변수가 없을 때 void를 명시적으로 지정 매개변수가 없는 함수는 선언과 정의에서 void 매개변수를 명시적으로 선언해야 합니다.
함수가 인자를 받지 않을 때 명시적으로 void를 지정하는 것을 목표로 합니다.
C 언어에서 함수를 선언할 때, 인자가 없는 함수를 정의할 때에도 void를 명시적으로 지정해야 합니다.
이는 코드의 가독성과 명확성을 높이기 위한 것입니다.
 
예를 들어:
void myFunction(void); /* 명시적으로 void를 지정 */
 
이렇게 하면 함수가 인자를 받지 않음을 명확하게 표현할 수 있습니다.
만약 void를 생략하면 C 언어에서는 인자가 없는 것으로 간주되지만, 명시적으로 void를 사용하는 것이 좋은 습관입니다.
DCL30-C 객체를 선언할 때 적절한 storage duration을 지정해야 한다 객체의 "storage duration"은 객체의 수명을 결정하는 요소입니다.
storage duration은 다음과 같이 4가지 유형으로 나뉩니다:
1. static: 프로그램 실행 동안 메모리가 보장되는 객체입니다.
2. thread: 스레드별로 메모리가 보장되는 객체입니다.
3. automatic: 함수 내에서 지역 변수로 사용되는 객체입니다.
4. allocated: 동적으로 할당된 객체입니다.
C 표준에 따르면 객체의 수명은 프로그램 실행 중 메모리가 예약되어 있는 기간입니다.
객체는 존재하며, 고정된 주소를 가지며, 수명 동안 마지막 저장된 값을 유지합니다.
객체의 수명을 벗어난 상태에서 해당 객체를 참조하면 정의되지 않은 동작이 발생합니다.
포인터의 값은 해당 객체의 수명이 끝날 때 불확정 상태가 됩니다.
따라서 객체의 수명을 벗어난 상태에서 객체에 접근하려고 시도하는 것은 정의되지 않은 동작으로 이어질 수 있으며, 취약점을 노출시킬 수 있습니다.
DCL36-C 연결 분류(linkage classification) 충돌이 발생하는 식별자를 선언하지 않음 서로 다른 연결 분류(linkage classification)를 가진 변수, 함수가 충돌없이 선언되어야 합니다.
 
C 언어에서 링크 분류는 다음과 같이 결정됩니다:
파일 범위 식별자(identifier)의 선언에 static 저장 클래스 지정자가 포함되어 있으면 해당 식별자는 "내부 링크(internal linkage)"를 가집니다.
, 같은 범위(scope) 내에서 여러 번 선언된 식별자가 동일한 객체 또는 함수를 참조하도록 하는 링크 분류를 피해야 합니다.
이는 코드의 일관성과 정확성을 유지하기 위한 것입니다.

 

728x90

'소프트웨어 개발(SW Dev) > Rule(CERT C)' 카테고리의 다른 글

CERT C - INT 규칙 목록  (0) 2024.11.09
CERT C - EXP 규칙 목록  (0) 2024.11.08
CERT C - PRE 규칙 목록  (0) 2024.10.24
CERT C 규칙 카테고리(표)  (0) 2024.10.24
CERT C 규칙 카테고리 설명  (0) 2024.03.07

댓글