C에서 이런식으로 프로그램을 사용하고 싶습니다.

la9527의 이미지

Data(INT, CHAR, INT, INT, ...);

함수의 Arg의 개수에 상관 없이 함수를 사용하고 싶고,
함수의 Arg개수와, Arg의 첫번째 내용이 무엇인지 두번째의 내용이 무엇인지 알수 있는 함수가 있으면 답변 부탁 드립니다.

제가 생각하기에는 va_start(), va_arg() 를 이용하면 될것 같은데..
잘 되지 않네여.. ^^; 이 방법이 맞는지 모르겠습니다..

그럼 글을 읽어 주셔서 감사합니다.

ㅡ,.ㅡ;;의 이미지

la9527 wrote:
Data(INT, CHAR, INT, INT, ...);

함수의 Arg의 개수에 상관 없이 함수를 사용하고 싶고,
함수의 Arg개수와, Arg의 첫번째 내용이 무엇인지 두번째의 내용이 무엇인지 알수 있는 함수가 있으면 답변 부탁 드립니다.

제가 생각하기에는 va_start(), va_arg() 를 이용하면 될것 같은데..
잘 되지 않네여.. ^^; 이 방법이 맞는지 모르겠습니다..

그럼 글을 읽어 주셔서 감사합니다.

함수의 가변인자 사용은 되는것입니다. 님이 이미 알고 있는듯 하네요..
그러나 함수인자의 내용(?) 을 아는함수??
미리내용을 안다는건....... 점쟁이만 알수 있습니다..ㅡ,.ㅡ;;

입력받은 내용을 안다는건... 그저 님이 생각한게 맞는데요..


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

la9527의 이미지

예를 들어서 다시 설명드려야 될것 같네여.^^;;


void foo(char *fmt, ...)
{
                   va_list ap;
                   int d;
                   char c, *p, *s;

                   va_start(ap, fmt);
                   while (*fmt)
                        switch(*fmt++) {
                        case 's':           /* string */
                             s = va_arg(ap, char *);
                             printf("string %s\n", s);
                             break;
                        case 'd':           /* int */
                             d = va_arg(ap, int);
                             printf("int %d\n", d);
                             break;
                        case 'c':           /* char */
                             /* need a cast here since va_arg only
                                takes fully promoted types */
                             c = (char) va_arg(ap, int);
                             printf("char %c\n", c);
                             break;
                        }
     va_end(ap);
}

int main(void)
{
	foo("%d%d%d",1,2,1);
	return 0;
}

이런것이 전부는 아니지만 예를 들어서 설명한것인데..
이렇게는 가능할것 같은데..

함수를 불러 들여서 쓸때..

int main(void)
{
	foo(1,2,1);
	foo(1,2,1,2,2);
	return 0;
}

이런 방법으로 사용할수 있을까여?
가능한지 궁금합니다.
참 한가지 int 형만을 사용하거든여.. 변수는 가변값이고.. ^^;

없으면 모 위의 방법으로 사용하면 될것 같지만,
그래도 보기 좋은게 좋잖아여. ^^

그럼 다시 한번 부탁 드립니다.

bugiii의 이미지

마지막을 나타내는 무엇인가가 인자로 제공되어야 합니다. 예를 들자면

1. printf 류의 format 처럼 문자열안에 뒤쪽 인자들과 일치하는 인식자
2. 인자중에 인자의 총 개수를 나타내는 인자
3. 마지막 인자를 특정 값 ( NULL 등 ) 으로 주어주는 것

이런것중에 하나를 선택하시면 될 듯합니다. int 형만을 쓰는 함수라고 하셨으니 첫번째 인자를 인자의 총 개수를 나타내는 것으로 하는 2번이 좋겠습니다.

lsj0713의 이미지

가변인자함수는 다음과 같은 특성을 갖습니다.

1. 몇개의 인자를 받았는지 함수 내부에서 알 수 없다
2. 각 인자가 어떤 타입인지 함수 내부에서 알 수 없다.

그런고로 printf함수처럼 포맷 문자열이나 기타의 방법으로 함수 내부에 어떤 인자들이 들어가는지 알려주던지, 아니면 맨 마지막 인자에다가 특별한 값을 주던지 해야 됩니다. 위에분이 제시하신 방법중에 하나를 선택하시면 되겠습니다.

la9527의 이미지

잘 찾아보니 문서에도 답이 있더군요. ^^;

몇개의 인자를 받았는지 함수 내부에서 알 수 없다라는 것이 안타까울 따름이네여.

답변주신분들에게 감사드립니다. ^^

choissi의 이미지

com+의 varient 형이나
php zend 엔진에서 변수를 다루는 모습을
보면, 답을 얻지 않을까요?

typedef union _zvalue_value {
        long lval;                       /* long value */
        double dval;                 /* double value */
        struct {
                char *val;
                int len;
        } str;
        HashTable *ht;            /* hash table value */
        zend_object obj;
} zvalue_value;


struct _zval_struct {
        /* Variable information */
        zvalue_value value;             /* value */
        zend_uchar type;        /* active type */
        zend_uchar is_ref;
        zend_ushort refcount;
};

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

댓글 달기

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