c - 들여쓰기에 관하여

버려진의 이미지

뭐 답이 없는 문제겠습니다만 그래도 고수분들의 고견을 듣고 싶습니다 :)
{}의 위치 문제인데요.. 윈도 플밍할때는 몰랐는데 리눅스로 오면서 c스타일의 코드들을 많이 접하다 보니

if(...){
...
}

이런식의 들여쓰기가 많더군요. 저는

if(...)
{
...
}

이렇게 써왔거든요. 왠지 일관성에 문제가 있어 보여서 위에것은 지양했거든요? 함수도

void Func(){
...
}

이러면 이상하니까 +_+;; 그런데 do...while문일때는 조금 달라 보이더군요

do
{
...
}while(...)

이러면 왠지 do가 허전해보이고, while도 } 와 같은 줄에 써야 할지 다음 줄에 써야 할지 +_+; 문제가 생기더군요. 일관성을 적용해서

do{
...
}while(...)

이렇게 쓴다면 마찬가지로 if문도

if(...){
...
}

이렇게 써야 할테고. :P

그리고 함수를 쓸때요

int main()

이것과

int
main()

이것. 후자를 쓰는건 이해가 잘 안됩니다 +_+; 마찬가지로 일관성을 적용하면 헤더파일은.. 꽤나 산만하게 되고 +_+
들여쓰기에 관한 고견 부탁드립니다.

jemiro의 이미지

GNU쪽 문서중에 ...
코딩 스타일에 관해 정의 해논게 있습니다..
오픈소스도 프로젝트 별로 스타일이 다른게 현실이니..

GNU Programming .... 였었는데.. 프린트 해서 열심히 봤었지요.
검색해보시면 쉽게 ㅤㅊㅏㄺ으실수 있으니 참고해보세요..

저 같은 경우에는...
함수는 다음줄에 조건문이나 루프문은 같은 줄에 시작합니다.

int func()
{
int i;
for (i = 0; i < 10; i++) {
printf("%s\n", i);
}

return 0;
}

그리고 함수 리턴 타입을 줄로 분리하는 스타일은...
엑스 윈도 프로그래밍이나 GTK + 쪽에서 많이 사용되는 걸로 알고 있습니다.
C로 하는 gui 코드들이 보면...
리턴 타입니이나 인수들들의 타입이나 변수명들이 대체로 기니깐..

this_is_very_long_return_type_name *
func(long_argument_name *pointer,
second_long_arg name,
int number)
{
this_is_very_long_return_type_name *nice_ptr;

return ptr;
}

뭐 대충 이런씩의 코드들이죠..
이름들이 길어지니깐 , 위의 스타일로 정리를 하하는것이
더 깔끔하게 보이더군요 이해하기도 쉽고..

계속 코딩하다보면 마음에 드는 스타일이 생기겠죠...

버려진의 이미지

http://www.gnu.org/prep/standards_toc.html
GNU Coding Standards라는게 있었군요 :lol:
gnu홈페이지는 오픈소스 프로젝트들을 찾는데밖에 이용 안하다 보니 - -;;
대충 훑어봤는데 들여쓰기쪽은 별로 마음에 안드네요 :cry:
그래도 따라야지 gnu만세 :D

cdpark의 이미지

Jargon file의 관련 글:
http://jargon.watson-net.com/jargon.asp?w=indent+style

일관성만 지킨다면야...

맹고이의 이미지

주제와는 벗어나는듯 싶지만 질문드립니다-_-

지금 어떤 책을 보고있는데요 예제를 보면..

int main()인데..

함수 내부에 return 이 없네요..

int 를 return 하지 않아도 되나요? VC++에서 연습할땐 에러던데

다른 컴파일러에선 문제가 없는건지..

책이 잘못된걸까요?

책은.. Thinking in C++ 입니다

송지석의 이미지

컴파일시에 -wall로 경고메시지를 전부 켜주면 뭐라고 할 겁니다.

일단 C에서는 C++보다 타입체킹을 느슨하게 합니다.

main 같은 함수는 리턴 안해도 그냥 컴파일 되지요. 그냥 return; 해도 컴파일 되구요.

여담이지만 그래서 컴파일시 -wall로 해주는 것이 좋습니다.

요즘 자꾸 제 얘기만 하게 되는데.. --

예전에 프로그램이 몇시간에 한번씩 자꾸 죽는 것을 블랙박스 테스트로 잡은 적이 있는데..

소스코드도 없는 것을 objdump로 주소 찾아가며 따라간 결과..

짜신 분이

return 0;

해야 할 것을

return;

해서 세그먼트 폴트가 난 것이더군요.

그래도 컴파일러는 아무 말 없다더라는... 컴파일 옵션이 -wall이 켜있었는지는 모르겠습니다만..

저거 잡느라 한달인가 걸렸습니다. 왠만하면 저 옵션 켜고 컴파일 하시길..

hyunuck의 이미지

맹고이 wrote:
주제와는 벗어나는듯 싶지만 질문드립니다-_-

지금 어떤 책을 보고있는데요 예제를 보면..

int main()인데..

함수 내부에 return 이 없네요..

int 를 return 하지 않아도 되나요? VC++에서 연습할땐 에러던데

다른 컴파일러에선 문제가 없는건지..

책이 잘못된걸까요?

책은.. Thinking in C++ 입니다

혹시 return(0); 라는 문장이 main 함수내에 없던가요?
int main() 하고 선언하는게 정석입니다. 이게 ANSI 표준이죠.
위엣분 말씀대로 -Wall 옵션주고 컴파일하면 걸립니다.
항상 경고 옵션은 최고로 하시고 코딩하는 습관을 기르시면 좋을 듯 합니다.

sliver의 이미지

맹고이 wrote:
주제와는 벗어나는듯 싶지만 질문드립니다-_-

지금 어떤 책을 보고있는데요 예제를 보면..

int main()인데..

함수 내부에 return 이 없네요..

int 를 return 하지 않아도 되나요? VC++에서 연습할땐 에러던데

다른 컴파일러에선 문제가 없는건지..

책이 잘못된걸까요?

책은.. Thinking in C++ 입니다

main함수라는 특수한 경우에 한해 만약 return문이 없으면

return 0;이 있는 것으로 여긴다는 내용이 C++표준에 있는 것으로 알고 있습니다.

skjk의 이미지

C에선 main에서 return을 해줘야 하지만 ANSI/ISO C++에선 따로 return을 안해줄 경우 자동으로 return 0; 으로 처리되게 됩니다.

죠커의 이미지

int
foo(type a, type b)
{
     if( condition ) {
         // To Do
     } else if {
         // To Do
     }
}

함수는 다음줄로 하는 사람이 많던데요. if나 loop를 붙여서 쓰더라도...

반환형을 줄바꿔서 쓰는 것은 에디터에서 편의를 위해서 쓰는 사람이 많을겁니다. 함수 찾는게 빠르니깐요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.