프로그램 제작시, 에러 코드 할당 관련 질문입니다.

cococo의 이미지

음...
제목 적는게 왜 이렇게 힘든지...
나날이 어휘력이 떨어짐을 느끼고 있습니다.

에.
그래서요.
상황을 설명드리면...

프로그램을 만들잖아요?
그럼, 각 상황에 따라 에러 코드가 발생하지요?
음... 프로그램을 잘 못 짜서 발생하는 에러가 아니고,
[이러이러한 상황은 에러다] 라고 인위적으로 정의한 상태를 말하는 겁니다. 예를들면 입력값이 1-10까지만 있도록 해서, 11이 입력으로 들어오면 "에러다!" 라는 식이죠.

기본적으로 모든 함수가 int형 return값을 가지도록 할 생각인데요. 문제는, 당연하겠지만 모든 함수가 다 다른 에러값을 가져야 한다는 겁니다.

음.... 제가 봐도 글이 잘 ... -_-;; 코드로 설명합죠.

int fna()
{

if (errorstate) return -2;
};

int fnb()
{
if (errorstate) return -3;
};

int fnb()
{
if (errorstate1) return -4;
if (errorstate2) return -5;
};

int main()
{
fna();
fnb();
fnc();
}

뭐.... 이런 식이 되겠네요.
포인트는, [프로그램 안에서 쓰이는 모든 함수가, 다 다른 리턴 값을 가지도록 하는 방법] 에 대한 질문입니다.
(아... 코드 쓰고 나서 정리하니까 잘되네요?? 새로운 발견... ^^)

일단 가장 단순히 생각해 본게, DEFINE에 각각의 에러 값을
#define FNnameERRORNo 1
처럼 정해서, 각각의 함수에 대해 모든 값을 선언해 놓는 건데요.
그렇게 해 버리면 중간에 함수를 바꾸던가 생성하면 그때마다 값을 추가해 줘야 하잖아요. 사람이 일일이 쓰니까 값이 겹칠지도 모르구요.

그러지 않고, 뭔가 자동화 할 수 있는 방법은 없을까요?

아. 글구요. 리턴값으로 음수만 할 수 있나요?
정 안되면 emum 써볼까 했는데, 이거 보니까 값이 1부터 시작하더라구요.
C로 만들고 있는데.... 좋은 아이디어나, 고견 있으신 분(아..같은소린가. -_-; ) 답변 부탁드립니다.

그럼... 행복하세요.

lifthrasiir의 이미지

ckbcorp wrote:
음...
제목 적는게 왜 이렇게 힘든지...
나날이 어휘력이 떨어짐을 느끼고 있습니다.

에.
그래서요.
상황을 설명드리면...

프로그램을 만들잖아요?
그럼, 각 상황에 따라 에러 코드가 발생하지요?
음... 프로그램을 잘 못 짜서 발생하는 에러가 아니고,
[이러이러한 상황은 에러다] 라고 인위적으로 정의한 상태를 말하는 겁니다. 예를들면 입력값이 1-10까지만 있도록 해서, 11이 입력으로 들어오면 "에러다!" 라는 식이죠.

기본적으로 모든 함수가 int형 return값을 가지도록 할 생각인데요. 문제는, 당연하겠지만 모든 함수가 다 다른 에러값을 가져야 한다는 겁니다.

음.... 제가 봐도 글이 잘 ... -_-;; 코드로 설명합죠.

int fna()
{

if (errorstate) return -2;
};

int fnb()
{
if (errorstate) return -3;
};

int fnb()
{
if (errorstate1) return -4;
if (errorstate2) return -5;
};

int main()
{
fna();
fnb();
fnc();
}

뭐.... 이런 식이 되겠네요.
포인트는, [프로그램 안에서 쓰이는 모든 함수가, 다 다른 리턴 값을 가지도록 하는 방법] 에 대한 질문입니다.
(아... 코드 쓰고 나서 정리하니까 잘되네요?? 새로운 발견... ^^)

일단 가장 단순히 생각해 본게, DEFINE에 각각의 에러 값을
#define FNnameERRORNo 1
처럼 정해서, 각각의 함수에 대해 모든 값을 선언해 놓는 건데요.
그렇게 해 버리면 중간에 함수를 바꾸던가 생성하면 그때마다 값을 추가해 줘야 하잖아요. 사람이 일일이 쓰니까 값이 겹칠지도 모르구요.

그러지 않고, 뭔가 자동화 할 수 있는 방법은 없을까요?

아. 글구요. 리턴값으로 음수만 할 수 있나요?
정 안되면 emum 써볼까 했는데, 이거 보니까 값이 1부터 시작하더라구요.
C로 만들고 있는데.... 좋은 아이디어나, 고견 있으신 분(아..같은소린가. -_-; ) 답변 부탁드립니다.

그럼... 행복하세요.

에러 상황에는 특정한 변수를 설정하고 invalid한 값만 반환한 뒤 사용자가 그 변수를 읽을 수 있게 하는 방법(예를 들어서, SDL의 경우 SDL_SetError와 SDL_GetError 함수)을 많이 본 것 같습니다.

그리고 enum에 들어 가는 각각의 item에는 숫자 값을 줄 수 있습니다. 예를 들어서 enum { A = -8, B, C, D = 0, E } 식으로 한다면 -8, -7, -6, 0, 1이 할당되겠죠.

- 토끼군

cococo의 이미지

만들어 본건 아니고, 머리로만 생각해 본 건데요.
자동화 하는 방법이 대충 두가지 정도 머리에 떠오르더군요.

프로그램 시작할때 Init함수가 있는데, 거기서 프로그램 시작에 필요한 변수 설정등을 합니다.
거기에서...

1. 댓글 주신 거 보고 생각해 봤는데요,
간단히, int SetError( char *) / int GetError( char *) 를 만들고, SetError는, 해당 문자열을 에러 테이블에 등록하고, 등록할 때 문자열에 대해 -1에서부터 1씩 감소하는 index를 자동으로 부여하게 하면 어떨까요? GetError는 물론 문자열 기준으로 검색해서, 문자열에 해당하는 인덱스를 반환하게 하는 거죠.

이렇게 하면, 초기에 자기가 만든 함수만 전부 등록해 주고, 이름 규칙만 지키면 비교적 간단히 만들 수 있겠는데요.
문제는 메모리죠. 전부 텍스트니까.... -_-; 뭐, 많다면 많고 적다면 적은 용량이지만, 대충 한 함수당 30byte(이름+ 4byte int )라고 잡으면 , 함수 100개당 3kbyte... 흠...

2. int SetError( void *, int type), int GetError(void *, int type) 로 만들구요.
에러 테이블에 등록할 때, 등록 기준이 문자열이 아니라, 함수 포인터라면 , 하나의 함수에 12byte( 함수 포인터 4byte + type 4byte(같은 함수에 두개 이상의 에러 코드가 필요한 경우도 있음) + return value int)니까 , 메모리는 더 절약할 수 있을 듯 한데요.

문제는, 이렇게 해 버리면 함수 포인터이기 때문에, 프로그램 시작시마다 바뀌는 어드레스를 다룰 수가 없다는 거죠. -_-;;;;;

흠... 뭔가 다른 방법이 있을 듯 한데...

emum은... 역시, 번호를 자동 부여한다는 것 이외에는 메리트가 없으니, 되도록 안 쓰고 싶은데 말이죠....

....
........
............
음........
뭔가 방법이 있을 것 같은데....

답변 주신 [토끼군]님. 감사합니다. ^^

댓글 달기

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