Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 지역 범위(로컬 스코프)의 구조체란 무엇일까?

구조체(Structure)는 서로 다른 자료형의 변수들을 하나의 이름으로 묶어 관리할 수 있게 해주는 사용자 정의 자료형입니다. 관련 있는 데이터를 하나의 단위로 그룹화하면 코드의 가독성과 유지보수성이 크게 향상됩니다.

구조체 선언의 일반적인 형식

구조체는 다음과 같은 형식으로 선언합니다.

struct 태그이름{
    자료형 멤버1;
    자료형 멤버2;
    자료형 멤버n;
};

여기서 struct는 구조체를 정의할 때 사용하는 키워드이며, 태그이름(tagname)은 구조체의 이름을 지정합니다. 멤버1, 멤버2 등은 구조체를 구성하는 개별 데이터 항목을 의미합니다.

예제 1: 구조체 정의하기

다음은 책 정보를 저장하는 book 구조체를 정의한 예입니다.

struct book{
    int pages;
    char author[30];
    float price;
};

예제 2: 지역 범위에서 구조체 사용하기

C 언어에서 구조체는 함수 외부(전역 범위)뿐만 아니라 함수 내부(지역 범위)에서도 선언할 수 있습니다. 함수 안에서 선언된 구조체는 해당 함수 내에서만 유효하며, 함수가 종료되면 더 이상 사용할 수 없습니다.

다음 프로그램은 manager() 함수 내부에 지역 범위의 구조체를 선언하여 사용하는 방법을 보여줍니다.

#include<stdio.h>
struct{
    char name[20];
    int age;
    int salary;
    char add[30];
}emp1,emp2;
int manager(){
    struct{ //지역 범위에서 선언된 구조체
    char name[20];
    int age;
    int salary;
    char add[50];
}manager ;
manager.age=27;
if(manager.age>30)
    manager.salary=650000;
else
    manager.salary=550000;
return manager.salary;
}
int main(){
    printf("emp1의 이름을 입력하세요:");
    scanf("%s",emp1.name);
    printf("\nemp1의 주소를 입력하세요:");
    scanf("%s",emp1.add);
    printf("\nemp1의 급여를 입력하세요:");
    scanf("%d",&emp1.salary);
    printf("\nemp2의 이름을 입력하세요:");
    scanf("%s",emp2.name);
    printf("\nemp2의 주소를 입력하세요:");
    scanf("%s",emp2.add);
    printf("\nemp2의 급여를 입력하세요:");
    scanf("%d",&emp2.salary);
    printf("\nemp1의 급여는 %d입니다",emp1.salary);
    printf("\nemp2의 급여는 %d입니다",emp2.salary);
    printf("\n관리자의 급여는 %d입니다",manager());
    return 0;
}

핵심 포인트

  • 전역 범위의 익명 구조체를 이용해 emp1, emp2 변수를 선언했습니다.
  • manager() 함수 내부에는 비슷한 필드를 가진 별도의 지역 구조체가 선언되어 있으며, 이 구조체는 오직 해당 함수 안에서만 접근할 수 있습니다.
  • manager() 함수는 나이가 30보다 크면 650000, 그렇지 않으면 550000을 급여로 반환합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

emp1의 이름을 입력하세요:Bob
emp1의 주소를 입력하세요:Hyderabad
emp1의 급여를 입력하세요:500000
emp2의 이름을 입력하세요:Hari
emp2의 주소를 입력하세요:Chennai
emp2의 급여를 입력하세요:450000
emp1의 급여는 500000입니다
emp2의 급여는 450000입니다
관리자의 급여는 550000입니다