게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어에서 #define V {} 를 쓸 필요가 있나요?
게시물ID : programmer_15384짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 1056회
댓글수 : 5개
등록시간 : 2016/01/10 14:17:26
시중에 나온 다시 체계적으로 배우는 c언어 포인터 라는 책을 사서보니까 263page에 아래같은 소스가 있더군요.
자기참조 구조체(링크드 리스트)인데요
첫번째 구조체 포인터를 전역변수로 만들어서 따로 HEAD로 보관하다가 자주 사용하는 student구조체 포인터를 계속 next에 써주면서 링크시키다가 
마지막 링크에는 NULL값을 넣고 출력할때는 HEAD에 보관한 포인터를 printf에 대입해서 반복문으로 NULL값이 나올때 까지 계속 출력하는 내용은 이제 이해가 되는데
문제는 #define V {} 이게 도대체 무슨 의미 인지 모르겠네요.
V가 컴파일전에 무조건{}로 치환되는데 이게 왜 있는거죠?
한번 없애고 실행해보니 잘되던데 꼭 필요한 거예요?
이 define문은 여기서 별로 있을 필요가 없는거 같은데 
이 정의문의 의미가 무엇이고 여기서 꼭 필요한 건지 알고 싶네요.
#include <stdio.h>
#include <stdlib.h>


#define OFF 0
#define ON 1
#define V {}

typedef struct lists{
char * name;
int grade;
struct lists *next;
}list;

static list *HEAD;
static list *student;

/**************************************************** */
/* MAIN                                               */
/**************************************************** */

int main()
{
   void init_node();
    void insert_node(char*,int);
    void print_node();
    void end_node();

V init_node();
    insert_node("archie",75);
    insert_node("Park Mi Kyung",94);
    insert_node("Park Une Ju",63);
    insert_node("Park Une Young",72);
    insert_node("Park Mi Ra",86);
    insert_node("Park Jung Suk",32);
 V end_node();
 V print_node();
    return 0;
}
/* *********************************************** */
/* init_node()                                      */
/* ************************************************* */
void init_node()
{
HEAD=(list*)malloc(sizeof(list));
HEAD->next=NULL;
}


/* ************************************************ */
/* insert_node()                                   */
/* *********************************************** */
void insert_node(char* name,int grade)
{
    static int flag=OFF;


    if(flag==OFF)
    {
        student=(list*)malloc(sizeof(list));
        student->name=name;
        student->grade=grade;
        student->next=NULL;
        HEAD=student;
        flag=ON;
    }
    else
        {
            list* imsi;
        imsi=(list*)malloc(sizeof(list));
    imsi->name=name;
    imsi->grade=grade;
    imsi->next=NULL;
    student->next=imsi;
    student=student->next;
        }
}
/* ************************************* */
/* end_node()                            */
/* ************************************* */
void end_node()
{
    list *imsi;
    imsi=(list*)malloc(sizeof(list));
    imsi->next=NULL;
    student->next=imsi;
}

/* ************************************ */
/* print_node()                         */
/* ************************************ */
void print_node()
{
    for(student=HEAD;student->next;student=student->next)
        printf("%d %s\n",student->grade,student->name);
}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호