관리 메뉴

Value Creator의 IT(프로그래밍 / 전자제품)

#23 Qt 코딩 스타일 본문

1. 프로그래밍/3) QT

#23 Qt 코딩 스타일

valuecreatort 2019. 7. 23. 19:44
반응형

들여쓰기

 

들여쓰기는 4칸의 공백(space)을 둔다.

탭이 아닌 공백이다. (에디터에 탭을 공백으로 바꾸는 옵션이 있다면 켜 놓도록 하자)

 

변수 선언

 

변수는 한 라인에 한개 씩 선언한다.

짧거나 의미 없는 이름은 피하자. (예 : "a", "rbarr", "nughdeget")

한글자 변수명은 카운터나 임시변수에서 목적이 분명할 때 사용 할 수 있다.

변수 선언은 미리 선언하지 않고 필요한 곳에서 선언 한다.

 

[잘못된 예]

int a, b;

char *c, *d;

 

[올바른 예]

int width;

int height;

char *nameOfThis;

char *nameOfThat;

 

변수명과 함수명은 소문자로 시작한다. 연속 단어의 경우 첫 글자는 대문자로 한다.

약어는 사용하지 않는다.

 

[잘못된 예]

short Cntr;

char ITEM_DELIM = '\t';

 

[올바른 예]

short counter;

char itemDelimiter = '\t';

 

클래스는 대문자로 시작한다. 공용 클래스(Public classes)의 경우 대문자 'Q'로 시작하며 공용 함수는 소문자 'q'로 시작한다.

Qt 소스를 작성하는 개발자만 해당. :)

class QRgb;

qRgb()

 

약어의 경우 전부 대문자로 사용하는 것이 아니라 camel-case 규칙에 따라 첫 글자만 대문자를 사용한다.

잘못된 예 : QXMLStreamReader

올바른 예 : QXmlStreamReader

 

공백 (Whitespace)

 

Statements 그룹 사이에는 빈 줄 하나를 넣는다.

항상 한 줄의 빈 줄을 사용한다. (두줄 이상 금지)

키워드와 중괄호 사이에는 공백 하나를 둔다.

 

[잘못된 예]

if(foo){

}

 

[올바른 예]

if (foo) {

}

 

포인터와 참조는 타입과 '*' 또는 '&' 사이에 공백을 하나 둔다. 다만 '*' 또는 '&'과 변수 사이에는 공백없이 붙여 쓴다.

char *x;

const QString &str;

const char * const y = "hello";

 

단항 연산자는 앞뒤에 공백을 둔다.

a = b + c;

형변환 연산자 뒤에는 공백이 없다.

가능하다면 C스타일의 형변환은 피한다.

[잘못된 예]

char* blockOfMemory = (char*) malloc(data.size());

 

[올바른 예]

char *blockOfMemory = reinterpret_cast(malloc(data.size()));

 

한 줄에 여러 statements를 두지 말자

제어문의 Body는 새로운 줄로 시작한다.

[잘못된 예]

if (foo) bar();

 

[올바른 예]

if (foo)

bar();

 

중괄호(Braces)

 

if ~ else 와 같이 중괄호가 연결되어 사용 되는 경우 아래와 같은 규칙으로 사용한다.

[잘못된 예]

if (codec)

{

}

else

{

}

 

[올바른 예]

if (codec) {

} else {

}

 

예외 : 함수나 클래스 선언의 경우 중괄호를 라인의 처음에서 시작한다.

static void foo(int g)

{

qDebug() << "foo : %i", g);

}

 

class Moo

{
};

 

명령문이 두줄 이상일 때에만 중괄호를 사용하자

[잘못된 예]

if (address.isEmpty()) {

return false;

}

 

for (int i=0; i<10; ++i) {

qDebug("%i", i);

}

 

[올바른 예]

if (address.isEmpty())

return false;

 

for (int i=0; i<10; ++i)

qDebug("%i", i);

 

예외 : 조건문이 여러줄에 걸쳐 있을 경우 명령문이 한줄이어도 중괄호 사용 가능

if (address.isEmpty()) || !isValid()

|| !coded) {

return false;

}

 

예외 : if ~ else 문중 한쪽만 명령어가 여러개 인 경우 if, else절 모두 중괄호를 사용한다.

[잘못된 예]

if (address.isEmpty())

return false;

else {

qDebug("%s", qPrintable(address));

++iter;

}

 

[올바른 예]

if (address.isEmpty()) {

return false;

} else {

qDebug("%s", qPrintable(address));

++iter;

}

 

[잘못된 예]

if (a)

if (b)

...

else

...

 

[올바른 예]

if (a) {

if (b)

...

else

...

}

 

명령어 줄이 비었을 때 중괄호 사용

[잘못된 예]

while (a);

 

[올바른 예]

while (a) {}

 

괄호

 

표현식을 그룹화 할 때 괄호를 사용한다.

[잘못된 예]

if (a && b || c)

 

a + b & c

 

[올바른 예]

if ((a && b) || c)

 

(a + b) & c

 

Switch 문

 

case 라벨은 switch 와 같은 열에 위치한다.

case 의 끝에는 break 문(또는 return)이 있어야 하며 그렇지 않을 경우(break가 없는) case 문이 바로 나오지 않는 다면 주석을 달아 break가 없음을 알린다.

 

switch (myEnum) {

case Value1:

doSomething();

break;

case Value2:

case Value3:

doSomethingElse();

// fall through

default:

defaultHandling();

break;

}

 

Jump 문(break, continue, return, 그리고 goto)

 

jump 문 뒤에는 'else'를 사용하지 않음

[잘못된 예]

if (thisOrThat)

return;

else

somethingElse();

 

[올바른 예]

if (thisOrThat)

return;

somethingElse();

 

예외 : 코드가 대칭적으로 되어 있는 경우 가독성을 위해 else를 사용할 수 있다.

 

Line Break

 

한 줄에 100칸 이상 사용하지 말자.

단항 연산자가 여러 줄에 걸쳐 있을 경우 맨 앞에 사용 하자. 일부 창 크기가 작은 에디터에서 가려져 실수로 빠뜨릴 수가 있다.

[잘못된 예]

if (longExpression +

otherLongExpresstion +

otherOtherLongExpression {

}

 

[올바른 예]

if (longExpression

+ otherLongExpresstion

+ otherOtherLongExpression {

}

반응형
Comments