C언어_11

gimmicks_u·2022년 3월 31일
0

C언어

목록 보기
11/13
post-thumbnail

구조체

구조체란 하나 이상의 서로 다른 종류의 변수들을 묶어서 새로운 자료형을 정의하는 것이다.

struct student
{
    char name[10];
    int age;
    int height;
};
  • student : 구조체 이름
  • name, age, height : 구조체 멤버
[구조체 변수명].[구조체 멤버]
st1.name

멤버에 접근시 .을 사용하는데, 이를 직접접근이라고 한다.

#include <stdio.h>
#include <string.h>

struct student
{
    char name[10];
    int age;
    int height;
}st1;

int main(void)
{
    strcpy(st1.name, "James");
    st1.age = 25;
    st1.height = 178;
    printf("이름 = %s, 나이 = %d, 키 = %d\n", st1.name, st1.age, st1.height);
    return 0;
}
이름 = James, 나이 = 25, 키 = 178

전처리기

소스파일 -(전처리)> 전처리파일 -(컴파일)> 목적파일 -(링크)> 실행파일

#이 붙은 전처리문은 컴파일러에서 처리하지 않고, 전처리기에서 처리된다.

전처리기 지시자의 종류

  • 헤더파일 선언 : #include
  • 매크로 정의 : #define
  • 조건부 컴파일 : #ifdef

매크로

#define 전처리기 지시자를 사용하여 매크로를 사용

#include <stdio.h>
#define PI 3.14

int main(void)
{
    double area;
    double radius;
    fputs("반지름을 입력하시오 :", stdout);
    scanf("%lf", &radius);
    area = radius * radius * PI;
    printf("원의 넓이는 %lf입니다.\n", area);
    return 0;
}
반지름을 입력하시오 :30
원의 넓이는 2826.000000입니다.

선언 시 유의사항

  • 이름 중간에 공백 불가
  • 이름 시작 시 숫자 불가
  • 이름 변수와 구분하기 위해 대문자 사용

매크로 상수를 배열 선언 시 배열의 길이로 사용할 수 있다.

#include <stdio.h>
#define SIZE 5

int main(void)
{
    char str[SIZE] = "LOVE";
    int i;
    for(i = 0; i < SIZE; i++)
    {
        printf("배열의 요소 %d은 %c\n",i , str[i]);
    }
    return 0;
}
배열의 요소 0는 L
배열의 요소 1는 O
배열의 요소 2는 V
배열의 요소 3는 E
배열의 요소 4는 

매크로의 중첩 선언

이미 선언한 매크로를 또 다른 매크로에서 사용할 수 있다.

#include <stdio.h>
#define A 5
#define B A + 10

int main()
{
    printf("A = %d\n", A);
    printf("B = %d\n", B);
    printf("B * 2 = %d\n", B * 2);
    return 0;
}
A = 5
B = 15
B * 2 = 25

생각대로라면 B * 2가 30이 나와야 하지만, 컴파일러는 단순치환 하여 A + 10 * 2로 인식하기 때문에, 25가 나온다. 이를 방지하기 위해 괄호를 사용한다.

#include <stdio.h>
#define A 5
#define B (A + 10)

int main()
{
    printf("A = %d\n", A);
    printf("B = %d\n", B);
    printf("B * 2 = %d\n", B * 2);
    return 0;
}
A = 5
B = 15
B * 2 = 30

매크로함수

자료형에 독립적이고 함수의 경우처럼 루틴을 호출하는 것이 아닌 단순 치환하는 것이므로 더욱 빠르지만, 복잡해지는 경우 쓰지 않는 것이 좋다.

profile
Done is better than perfect

0개의 댓글