매크로
반복적인 일들을 쉽게 하기 위해 만들어 놓은 것.
- 함수
- 한번 호출하면 사라져버린다
- 매크로
- 전처리기에서 처리한다 (#이 붙는다)
- 따라서 모든 프로그램에 공통적으로 들어가게 할 수 있다
- 전처리기에서 처리한다 (#이 붙는다)
1. 변수처럼 선언
#define N 10
앞으로 나오는 모든 N은 10으로 치환할 거다
2. 함수처럼 선언
#define SQR(X) X*X
앞으로 나오는 모든 X라는 인자를 받게 되면 X*X를 수행할 거다
EX
#define N 10
#define SQR(X) X*X
SQR(N); // = SQR(10); -> 10*10 -> 100을 출력
SQR(N+2); // X = N+2 -> 10+2*12+2 -> 32 ⭐
- SQR(N);
- 모든N은 10이므로 SQR(10);
- 10*10
- 100을 출력
- SQR(N+2);
- X = N+2 ⭐
- 매크로일때만 이처럼 특수하므로 주의하자
- 함수라면 12로 가는 게 맞다!!
- 10+2*12+2
- 연산자 우선순위에 의해 10 + (2*12) + 2
- 32를 출력
- X = N+2 ⭐
Struct로 선언하는 구조체
C에서는 객체를 만들지 못하니까 구조를 묶어서 내가 정의한 변수로 만들 수 있다 (사용자 정의 타입 객체)
여러 변수들을 모아서 하나의 객체를 구성할 때 사용하는 것
struct 구조체명 //구조를 만들겠다
{
멤버변수 1;
멤버변수 2;
}
구조체 정의 및 사용
기본적인 사용
//정의방법
struct person
{
char *name;
int age;
};
//사용방법
struct person user1; //user1이라는 person형식 변수 생성
user1.name = "h user";
print("%s", user1.name); //h user 출력
선언 생략
//정의방법
struct person
{
char *name;
int age;
} test; // test라는 인스턴스 생성
//사용방법
test.name = "h user";
test.age = 40;
print("%s : %d", test.name, test.age);
포인터에 담아보기 ->
//정의방법
struct person
{
char *name;
int age;
};
//사용방법
struct person *p; //포인터 변수로 생성할 때
p -> name = "test_2";
p -> age = 40;
print("%s : %d", p->name, p->age);
EX
struct list { //list라는 구조체를 생성
int *fp; // fp라는 정수형 포인터변수
} data, *p; // data, *p의 내용은 *fp이다
int x[] = { 100, 200, 300, 400 };
// 정수형 x 배열 생성
p = &data; // data의 주소값을 p에 넣는다
p -> fp = x + 1; // p의 fp 값에 x+1을 넣는다
printf("%d", *(++p->fp)); //p의fp에 ++한것의 값