C에서 일반적으로 사용되는 명명 규칙은 무엇입니까? 적어도 두 가지가 있다는 것을 알고 있습니다.
- GNU / Linux / K & R with lower_case_functions
- ? 이름? UpperCaseFoo 함수 사용
여기서 만 C에 대해 이야기하고 있습니다. 대부분의 프로젝트는 C를 사용하는 소형 임베디드 시스템입니다.
다음 프로젝트에 사용할 계획입니다.
C 명명 규칙
Struct TitleCase
Struct Members lower_case or lowerCase
Enum ETitleCase
Enum Members ALL_CAPS or lowerCase
Public functions pfx_TitleCase (pfx = two or three letter module prefix)
Private functions TitleCase
Trivial variables i,x,n,f etc...
Local variables lower_case or lowerCase
Global variables g_lowerCase or g_lower_case (searchable by g_ prefix)
답변
여기서 가장 중요한 것은 일관성입니다. 즉, 다음과 같이 요약 할 수있는 GTK + 코딩 규칙을 따릅니다.
- 대문자로 된 모든 매크로 및 상수 :
MAX_BUFFER_SIZE
,TRACKING_ID_PREFIX
. - 카멜 케이스의 구조체 이름과 typedef :
GtkWidget
,TrackingOrder
. - 구조체에서 작동하는 함수 : 클래식 C 스타일 :
gtk_widget_show()
,tracking_order_process()
. - 포인터 : 여기에 멋진 것은 없습니다 :
GtkWidget *foo
,TrackingOrder *bar
. - 전역 변수 : 전역 변수를 사용하지 마십시오. 그들은 사악합니다.
- 거기에 있지만 직접 호출해서는 안되는 함수, 사용이 모호한 것 등 : 처음에 하나 이상의 밑줄 :
_refrobnicate_data_tables()
,_destroy_cache()
.
답변
“구조 포인터”는이를 다루기 위해 명명 규칙 절이 필요한 엔티티가 아닙니다. 그들은 단지 struct WhatEver *
. 영리하고 “명백한”typedef와 관련된 포인터가 있다는 사실을 숨기지 마십시오. 목적이없고 더 이상 입력 할 수 없으며 선언과 액세스 사이의 균형을 파괴합니다.
답변
첫째로 C에는 공개 / 개인 / 가상 기능이 없습니다. 그것은 C ++이고 다른 규칙을 가지고 있습니다. C에서는 일반적으로 다음이 있습니다.
- ALL_CAPS의 상수
- 구조체 또는 함수 이름에서 단어를 구분하는 밑줄, C에서 카멜 케이스를 거의 볼 수 없습니다.
- 구조체, typedef, 공용체, 멤버 (조합 및 구조체의) 및 열거 형 값은 일반적으로 첫 글자를 대문자로 만드는 C ++ / Java / C # / etc 규칙이 아닌 소문자 (내 경험상)이지만 다음에서 가능하다고 생각합니다. C도.
C ++는 더 복잡합니다. 여기서 진짜 믹스를 보았습니다. 클래스 이름 또는 소문자 + 밑줄에 대한 카멜 케이스 (내 경험상 낙타 케이스가 더 일반적 임). 구조체는 거의 사용되지 않습니다 (일반적으로 라이브러리에 필요하기 때문에, 그렇지 않으면 클래스를 사용합니다).
답변
알다시피, 저는 단순하게 유지하고 싶지만 명확하게 … 그래서 C에서 제가 사용하는 것은 다음과 같습니다.
- Trivial Variables :
i,n,c
, etc … (단 하나의 문자. 하나의 문자가 명확하지 않으면 로컬 변수로 만드십시오) - 지역 변수 :
lowerCamelCase
- 전역 변수 :
g_lowerCamelCase
- 상수 변수 :
ALL_CAPS
- 포인터 변수 :
p_
접두사 에 a 를 추가 합니다. 전역 변수의 경우gp_var
지역 변수p_var
의 경우 const 변수가p_VAR
됩니다. 먼 포인터를 사용하는fp_
경우p_
. - Structs :
ModuleCamelCase
(Module = 전체 모듈 이름 또는 2-3 자 약어이지만 여전히CamelCase
.) - 구조체 멤버 변수 :
lowerCamelCase
- 열거 형 :
ModuleCamelCase
- 열거 형 값 :
ALL_CAPS
- 공공 기능 :
ModuleCamelCase
- 개인 기능 :
CamelCase
- 매크로 :
CamelCase
내 구조체를 typedef하지만 태그와 typedef 모두에 동일한 이름을 사용합니다. 태그는 일반적으로 사용되지 않습니다. 대신 typedef를 사용하는 것이 좋습니다. 또한 캡슐화를 위해 공용 모듈 헤더에 typedef를 전달하여 정의에서 typedef의 이름을 사용할 수 있습니다.
전체 struct
예 :
typdef struct TheName TheName;
struct TheName{
int var;
TheName *p_link;
};
답변
C #, Java, C, C ++ 및 객관적인 C 로 동시에 코딩하면서 저는 삶을 단순화하기 위해 매우 간단하고 명확한 명명 규칙을 채택했습니다.
우선, 그것은 최신 IDE (예 : eclipse, Xcode …)의 힘에 의존하며, 마우스를 가져 가거나 ctrl을 클릭하여 빠른 정보를 얻을 수있는 가능성을 가지고 있습니다. 그것을 받아들이고, 접두사, 접미사 사용을 억제했습니다. 및 단순히 IDE에서 제공하는 기타 마커.
그런 다음 컨벤션 :
- 모든 이름은 가지고있는 것을 설명하는 읽기 쉬운 문장이어야합니다. “이건 내 컨벤션”처럼.
- 그런 다음 문장에서 관례를 얻는 4 가지 방법 :
- 매크로, 열거 형 멤버의 경우 THIS_IS_MY_CONVENTION
- ThisIsMyConvention for file name, object name (class, struct, enum, union …), function name, method name, typedef
- this_is_my_convention 전역 및 지역 변수,
매개 변수, 구조체 및 공용체 요소 - thisismyconvention [선택 사항] 매우 지역적이고 임시적인 변수 (for () 루프 인덱스와 같은)
그리고 그게 다야.
그것은 준다
class MyClass {
enum TheEnumeration {
FIRST_ELEMENT,
SECOND_ELEMENT,
}
int class_variable;
int MyMethod(int first_param, int second_parameter) {
int local_variable;
TheEnumeration local_enum;
for(int myindex=0, myindex<class_variable, myindex++) {
localEnum = FIRST_ELEMENT;
}
}
}
답변
나는 낙타 케이스와 밑줄 분리를 혼합하지 않는 것이 좋습니다 (구조 멤버에게 제안한 것처럼). 이것은 혼란 스럽습니다. 당신은 생각할 것입니다, 헤이 내가 가지고 get_length
있기 때문에 아마도 내가 있어야 할 것이고 make_subset
당신은 그것이 실제로 makeSubset
. 최소한 경악의 원칙을 사용하고 일관성을 유지하십시오.
CamelCase는 구조체, typedef 및 enum과 같은 이름을 입력하는 데 유용합니다. 그래도 그게 전부입니다. 나머지 (함수 이름, 구조체 멤버 이름 등)는 underscore_separation을 사용합니다.
답변
다음은 CamelCase의 모듈 이름, 밑줄, CamelCase의 함수 또는 파일 범위 이름입니다. 예를 들면 :
Bluetooth_Init()
CommsHub_Update()
Serial_TxBuffer[]