'C Language/C basis'에 해당되는 글 4건

  1. 2016.04.27 #04 typedef
  2. 2016.04.27 #03 구조체와 포인터
  3. 2016.04.27 #02파일분할과 헤더파일
  4. 2016.04.27 #01 선행처리기

#04 typedef

View Comments

#04 typedef

 *typedef 는 타입 정의한다.
=>typedef (타입) (변경할이름)
     - typedef int INT
      INT a = 10; 과같이 사용가능

*예제가 갑
typedef stuct point {
     int x; 
     int y;
     struct point *p
}Point;

Point a = {1,3};
Point b = {100,200};
a.p = &b;
printf("%d %d",a.p->x,a.p->y);
or
printf("%d %d",(*a.p)->x,(*a.p)->y);
*구조체 기반 callby value, callby reference

typedef struct point{

int x;
iint y;
}Point;

void showpoint (Point pos){
     pos.x = 100;
     pos.y = 200;
     printf("%d %d\n",pos.x,pos.y);//결과가 100,200
};
//main

point a = {1,2};
point b = {100,200};
showpoint(a);
printf("%d %d",a.x,a.y);//결과가 1,2

- callbyValue로  pos에 a 의복사가 일어난다. 복사된 데이터기때문에 실제 값이 바뀌지 않는다.

typedef struct point {

int x;
int y;

};

void showposRef (Point *pos){

     (*pos).x=100;
     pos->y = 200;
     printf("%d %d",pos->x,pos->y); //100,200나옴

};

//main

Point a= {10,20};

showposRef(&a);

printf("%d %d",a.x,a.y); // 100,200 나옴 바뀜 

- callbyRef임으로 실제 주소값이 넘어감으록 값이 바뀐다.


*구조체 복사
Point a= {1,2};
Point b; 
b=a;
b에 a 가 복사된다.

*union 과 struct

typedef struct sbox{
int x;
double z;
int y;
}Point;
typedef union ubox{
int x;
int x;
double z;

}UBOX;

//main
SBOX s;
UBOX u;
printf("%p %p %p ",&s.x,&s.y,&s.z);
//주소가 4 4 8 단위씩 뛴다.
printf("%p %p %p ",&u.x,&u.y,&u.z);
//주소가 8사이즈로 멈춰있다. 가장크게 잡혀있음.
printf("%d %d",sizeof(SBOX),sizeof(UBO);
//sbox는 4+4(패딩)+8+4+4(패딩) 24바이트
//Ubox는 가장큰 double 8바이트


*유니온의 활용

typedef struct dbs{
   
unsigned int a;
   
unsigned int b;
}DBS;

typedef struct uboxs{
   
int insertNum;
   
DBS *p ;
}UBOXs;
//main   
   
UBOXs ubox;
   
scanf("%d",&(ubox.insertNum));
    pritntf("upper %d %d",ubox.p->a,ubox.p->b);


*enum


enum{
do,re,me};

//main
do =0 re =1 me = 2

enum{
do=3,
re,
me = 5
} ;
//main 3,4,5  re는 앞의 상수에 +1

typdef enum doreme{
doo,re,mee
}DOREME;


'C Language > C basis' 카테고리의 다른 글

#03 구조체와 포인터  (0) 2016.04.27
#02파일분할과 헤더파일  (0) 2016.04.27
#01 선행처리기  (0) 2016.04.27

0 Comments (+add yours?)

Leave a Reply

Tracbacks (+view to the desc.)

#03 구조체와 포인터

View Comments

#03 구조체와 포인터

*예제가 갑이다

struct point{

int x;

int y;

};


//main


struct point a ={1,2};

struct point b = {100,200};


//포인터 p는 a 의 주소를 가진다.

struct point *p = &a;


printf("%d %d",(*p).x,(*p).y);

혹은

printf("%d %d",p->x,p->y); 

로 출력할수있다.


*구조체와  포인터
struct numbers {

int num1;

int num2;

};

struct point{

int x;

int y;

struct numbers num;

};


//main


struct nubmers a=  {1,2};

struct point b ={100,200,&a};


printf("%d %d %d %d",b.x,b.y,b.num->num1,b.num->num2);//100 200 1 2

*구조체와 자기자신포인터

struct point {

int x;

int y;

struct point p;

};


//main

struct point a = {2,4};

struct point b = {1,3};

a.p = &b;

printf("%d %d",a.p->x,a.p->y);//1 3





'C Language > C basis' 카테고리의 다른 글

#04 typedef  (0) 2016.04.27
#02파일분할과 헤더파일  (0) 2016.04.27
#01 선행처리기  (0) 2016.04.27

0 Comments (+add yours?)

Leave a Reply

Tracbacks (+view to the desc.)

#02파일분할과 헤더파일

View Comments

#02파일분할과 헤더파일


*컴파일러는 파일단위로 컴파일!! 정의되어있지 않다면 에러를 뱉을수밖에없다.


*외부선언 및 정의사실을 컴파일러에게 알려줘야한다. 그 예약 키워드는 ? ==>  extern

fun.c
     extrn int num;//==>extern때문에 컴파일러가 num이 외부에있음을 인지한다. 에러를 발생시키지않는다.

"외부에  정의되어 있을테야. 그러니 일단 넘어가자"

**static

*함수내에서만 접근 가능. 전역변수와 마찬가지로 한번 메모리에저장되면 종료시까지 소멸되지 않음.

*함수 밖에 static 변수가 선언되면 외부소스파일에서 접근이 불가능한다. 현재 파일에서만 접근가능하다
     -static int num =0;//외부에서접근 불가 extern안먹힘

*함수자체에 static선언이 가능하다. 변수와 기능이동일하다.
     -static void MinCnt(void) =>외부에서 호출 불가.


**헤더파일을 include하는 두가지 방식

*#include<헤더>
=>표준헤더파일을 포함시킬때, 파일이 저장된 디렉토리에서 헤더파일을 찾음.

*#include "헤더"
=>프로그래머가 정의한 헤더파일을 포함할때, 문장을 포함하는 소스파일이 저장된 디렉토리에서 파일을 찾게됨

*절대경로로 접근도가능하긴함.

*구조체의 정의는 파일단위로만 그선언이 유효. 
=>즉 다른고셍서 필요하면 다른소스에서 꼭 선언해줘야됨.==>구조체 헤더파일 하나만들고 그거 include해서 사용

*헤더를 중복삽입할수있어,다음과같이 체크를 해주는 매크로를 적용한다.

#ifndef __CALCUS_H__


#define __CALCUS_H__


(definition for Calcus)


#endif


'C Language > C basis' 카테고리의 다른 글

#04 typedef  (0) 2016.04.27
#03 구조체와 포인터  (0) 2016.04.27
#01 선행처리기  (0) 2016.04.27

0 Comments (+add yours?)

Leave a Reply

Tracbacks (+view to the desc.)

#01 선행처리기

View Comments



#01선행처리기 


**선행처리기 => 컴파일 이전의 처리

*소스 -> 선행처리기-> 선행처리된 소스 -> 컴파일러 -> 오브젝트파일 -> 링커 -> 실행파일

*선행처리기에서 단순히 #define 된 정보를 치환한다.

*모든 매크로에는 괄호가 들어가는게 선행처리될때 오해의 소지가 없다.

*두줄에 정의되려면 \ 를 사용하면 되고 아래와같이사용하면됨
     #define SQUARE(Z) \

     ((Z)*(Z))


**특징
*매크로함수는 일반함수에비해 속도가 빠름. 
     -함수의경우 별도의메모리공간 & 호출된함수의 이동 및 반환, 그러나 매크로는 바로치환.

*자료형에따라 별도로 함수를 정의하지 않아도도미.
     -전달되는 인자의 자료형에 구분받지 않아 의존적이지 않음.

*정의하기 까다롭다.
*디버깅하기 쉽지않다. => 선행처리후 컴파일러에의해 에러가감지됨으로, 값이 잘못됬지만 찾기위해선 논리적 혹 계산적 이슈를 체크해야함.

**뭐가 적당하냐
-작은크기의함수
-호출빈도수가 높은함수


**매크로 if문
#if num==0 //num 이 0 이면

#elif num==1

#endif


#ifdef Add //Add가정의되어있다면.

#endif


#ifndef Add //Add가 정의되어 있지 않다면

#endif



*문자열 치환
#define JOBS(a,b) #a "job is" #b

=>JOBS(pk,coder)


*##

#define setNum(a,b) a##00##b

=>setNum(10,20) ==> 100020




'C Language > C basis' 카테고리의 다른 글

#04 typedef  (0) 2016.04.27
#03 구조체와 포인터  (0) 2016.04.27
#02파일분할과 헤더파일  (0) 2016.04.27

0 Comments (+add yours?)

Leave a Reply

Tracbacks (+view to the desc.)

Newer Entries Older Entries