코딩 스타일 가이드
이 가이드는 TuyaOpen 개발자가 통일된 코딩 규칙을 적용하여 코드의 가독성과 유지 관리성을 높이도록 안내합니다. TuyaOpen의 스타일은 일부 수정 및 단순화를 적용한 Linux 커널 코딩 스타일을 기반으로 합니다.
디렉터리 및 파일
디렉터리와 파일은 소문자로 작성하고 내용을 나타내는 이름을 사용합니다. 여러 의미를 결합하는 명령은 밑줄 _로 연결하며 이름은 세 구성 요소를 넘지 않도록 합니다.
헤더 파일
C 헤더는 여러 번 포함되는 것을 막는 심볼을 정의해야 합니다. 매크로 이름은 파일 이름과 일치시키고 대문자와 이중 밑줄을 사용합니다.
#ifndef __TCP_TRANSPORTER_H__
#define __TCP_TRANSPORTER_H__
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
} // extern "C"
#endif
#endif /* __TCP_TRANSPORTER_H__ */
C++ 환경에서도 C 함수가 올바르게 동작하도록 헤더에서 extern "C"를 사용합니다. 헤더의 모든 내용은 매크로 보호 영역 안에 두세요.
파일 헤더 설명
파일 헤더에는 파일 설명, 버전 및 저작권 주석을 포함합니다.
/**
* @file tcp_transporter.h
* @brief Header file for TCP transporter functions.
*
* This file declares the interface for creating and destroying TCP transporters.
*
* @copyright Copyright (c) 2021-2024 Tuya Inc. All Rights Reserved.
*/
함수
함수 이름
함수 이름은 소문자와 밑줄로 구성하고 set_xxx, get_xxx처럼 주어-동사 구조를 따릅니다. 모듈 내부 함수는 이중 밑줄로 시작하고 static으로 선언하는 것이 좋습니다.
static void __function(void)
{
...
}
입력 및 반환 값
입력 파라미터가 없으면 void를 사용합니다. 함수는 반환 값을 명시하고 호출된 함수의 반환 값을 확인하며 예외를 처리해야 합니다.
static OPERATE_RET function(void)
{
char *out = NULL;
out = tal_malloc(128);
if (NULL == out) {
PR_ERR("tal_malloc Fails %d", len);
return OPRT_MALLOC_FAILED;
}
return OPRT_OK;
}
함수 선언 및 주석
외부 API는 해당 헤더 파일에 선언합니다. 함수의 목적, 파라미터, 반환 값 및 주의 사항을 설명하는 주석을 추가합니다.
/**
* @brief Controls the TLS transporter.
*
* This function is used to control the TLS transporter by sending different
* commands.
*
* @param t The TLS transporter to control.
* @param cmd The command to send.
* @param args The arguments for the command.
*
* @return The result of the operation.
*/
@brief에는 목적을 간결하게, @param에는 파라미터의 의미를, @return에는 반환 값의 의미를, @warning에는 사용 시 주의 사항을 작성합니다.
들여쓰기와 괄호
K&R 스타일을 사용하고 각 수준을 4칸 공백으로 들여씁니다. 키워드 뒤에는 공백을 두고 괄호 안쪽에는 불필요한 공백을 두지 않습니다. 반복문, do-while, 조건문 및 switch-case에도 같은 규칙을 적용하고 case 본문은 중괄호로 보호합니다.
if (condition) {
action();
}
매크로 및 열거형
매크로 이름과 enum 레이블은 대문자와 밑줄을 사용합니다. 관련 상수는 enum으로 그룹화하세요.
#define CONSTANT 0x12345
코드 서식
clang-format 14 이상을 설치하고 현재 수정한 코드를 포맷합니다.
$ clang-format -style=file -i <file>
컴파일 중 tools/hooks/pre-commit이 .git/hooks에 복사됩니다. 커밋할 때 pre-commit이 git add로 추가된 파일에 clang-format을 자동 적용합니다.