C언어> 값을 가져오는 함수의 구현 형태에 대한 의문이 있습니다.

radiocallas의 이미지

배열을 선언하고 그 값을 함수를 코딩하는데, 의문 점이 생겨서 이렇게 질문 드립니다.

'Number_to_ASCII(int nCode)' 함수와 'nASCII_Code[10]'배열은 내부 함수에서만 사용할 생각입니다.(배열 내용을 업데이트 하지 않습니다.)

그렇다면 아래의 형태중에 어떤 형태가 바람직한 형태일까요?(성능이나 코드관리등과 관련해서요.)

아니면, 아래의 경우 보다 나은 형태는 어떤것인가요?

그밖에 조언해주실 말씀 있으시면 조언 부탁드립니다. ^^

1------------------------------------------------------------------------------------------------

BYTE nASCII_Code[10]={ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

BYTE Number_to_ASCII(int nCode)
{
return nASCII_Code[nCode];
}

2------------------------------------------------------------------------------------------------

static BYTE nASCII_Code[10]={ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

BYTE Number_to_ASCII(int nCode)
{
return nASCII_Code[nCode];
}

3------------------------------------------------------------------------------------------------

BYTE Number_to_ASCII(int nCode)
{
BYTE nASCII_Code[10]={ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
return nASCII_Code[nCode];
}

4------------------------------------------------------------------------------------------------

BYTE Number_to_ASCII(int nCode)
{
static BYTE nASCII_Code[10]={ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
return nASCII_Code[nCode];
}
// 이것이 지금 제가 사용하는 것입니다.
// 제가 이렇게 사용한 이유는 static으로 선언하면 함수에서 한번만 초기화를 하기 때문에, 여러번 호출할 때마다 불필요하게
// 반복되는 초기화를 하지 않기 위해서 선언했습니다.
// 그리고 배열을 함수 안에 넣은 이유는 외부에서 이 배열에 접근할 이유가 없다고 판단해서 이렇게 넣었습니다.

------------------------------------------------------------------------------------------------

물론 이코드가

BYTE Number_to_ASCII(int nCode)
{

return (nCode+'0');
}
이렇게도 처리가 가능지만요. 데이터와 함수의 구현의 형태가 어떤것이 좋은건지 궁금해서 질문드립다. ^^;;

------------------------------------------------------------------------------------------------

kewlbear의 이미지

그런 경우엔 저도 4번 처럼 합니다.

ssehoony의 이미지

저라면 1번 방식을 택하겠습니다.
4번 처럼 static 을 변수에 사용하게 되면
컴파일러가 실제 static 변수를 구현하기 위해
변수 초기화 여부 flag 를 구고 if 문으로 매번 초기화 여부를 검사게됩니다.
즉 1번보다 매 함수 호출시에 if 한번의 오버헤드가 추가로 발생한다는 의미지요.

IDNed의 이미지

1번을 하신다면 nASCII_Code 변수선언 앞뒤에 namespace{}를 붙여 이름 공간을 한정시키는 것이 좋습니다.
2번의 효과인데요... 2번은 이미 비표준으로 되었고 namespace가 표준입니다.


namespace
{
   BYTE nASCII_Code[10]={ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
}

이렇게 하시면 이름공간 한정이 됩니다.

p.s. code BBcode를 활용합시다! ^0^

doldori의 이미지

Quote:
2번의 효과인데요... 2번은 이미 비표준으로 되었고 namespace가 표준입니다.

internal linkage를 뜻하는 static은 아직까지는 표준입니다.
deprecated feature일 뿐이죠. 즉 차기 표준에서는 표준에서 제외될 수도 있으므로
사용을 피하라는 의도를 나타내는 것입니다.
물론 C++0x에서도 계속 표준으로 남아 있을 수도 있습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.