반응형
안녕하세요. 훈츠 입니다. 드디어 앞으로 한번만 더 정리하면 C언어 문법을 마무리 하게 되었습니다. 사전 지식이 있어서 그런지 생각보다 빠르고 쉽게 정리 할수있었네요. ㅎㅎ 기타 문법에 대해 정리해 보도록 하겠습니다.
enum 열거형
- 역활 : 문자열이 정수형 상수를 대신 하도록 한다.
- 형식
- enum 태그 { 문자열1, 문자열2, ...}; : 초기값이 없으면 0부터 1씩 증가한 값으로 설정 됩니다.
- enum 태그 { 문자열1 = 초기값, 문자열2, ...}; : 초기값이 있으면 설정값 부터 1씩 증가한 값으로 설정 됩니다.
- ex) enum COUNT { ZERO, ONE, TWO };
- enum COUNT Count;
- printf("%d ", Count = TWO };
#include <stdio.h>
#include <conio.h>
#include <memory.h>
#include <string.h>
#include <stdlib.h>
typedef struct _POINT {
int x;
int y;
}PT;
typedef enum _COUNT {
ZERO, ONE, TWO
}COUNT;
int main() {
COUNT count; //Enum 형선언
count = ONE;
printf("%d \n",count);
PT p;
p.x = TWO; //구조체PT 에 Enum 값 쓰기
printf("%d \n", p.x);
_getch();
return 0;
}
GOTO & Lable
- 역활 : 제어를 레이블이 있는 위치로 이동시켜 실행 하게 합니다.
- 레이블 lable : 제어를 옮길 위치를 나타냅니다.
- goto 문 주의 사항 및 사용 예
- 많은 goto문은 제어를 복잡하게 합니다.
- 사용예 : 중첩된 for 문을 빠져 나갈때 goto 문 사용. break는 for 문 한단계 만 빠져나가집니다.
- 형식
- goto 레이블명;
- 레이블명 : 실행문;
- goto STOP;
- STOP : printf("STOP 라인 입니다. ");
활용 예시
int main() {
int i, j;
for(i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (i == 1) {
goto STOP;
}
printf("i:%d, j:%d \n", i, j);
}
}
STOP: {
printf("종료되었습니다. \n");
}
_getch();
return 0;
}
union 공용체
네트워크 프로그램 할때, 혹은 메모리가 작은 아두이노, 라지베리파이 데이터를 사용할때 유니온을 사용합니다.
- 역활 : 기억 장소를 서로 다른 데이터형이 공유, 사용은 구조체와 동일 합니다.
- 형식: 태그는 대문자로 사용
- union 태그 {
- int nVar;
- char cVar[4];
- };
- union 태그 {
//union
union DATA {
struct _IP {
int a1, a2, a3, a4;
} IpPart;
int nIp[4];
};
int main() {
union DATA Data;
printf("ip를 입력하세요 : \n");
int i;
for (i = 0; i < 4; i++) {
printf("i %d : ", i);
scanf_s("%d", &Data.nIp[i]); //입력은 Data.nIp[n] 에 받았지만
}
//출력은 Data.IpPart.a 에 출력합니다.
printf("%d.%d.%d.%d ", Data.IpPart.a1, Data.IpPart.a2, Data.IpPart.a3, Data.IpPart.a4);
_getch();
return 0;
}
전처리기 지시문
- 역활
- 컴파일 전에 파일 내용이나 소스 내용을 삽입, 수정하기 위한 역활을 합니다.
- 지시문
- 빈도수 높은 : #define, #if , #ifndef, #endif , #include
- 빈도수 낮은 : #error, #elif, #else, #line, #undef
- #define
- 역활 : 매크로 상수와 함수를 생성하는 역활
- 매크로 상수 형식 : 문자열이 상수를 대신하는 형식
- 매크로 함수 형식 : 간소화 된 함수 형식
- 역활 : 매크로 상수와 함수를 생성하는 역활
매크로 상수 예제
#include <stdio.h>
#define PI 3.14
#define MAX 20
int main() {
char strName[MAX] = "C language";
printf("%.2f \n%s \n", PI, strName);
_getch();
return 0;
}
매크로 함수 예제
#define Multi(x,y) (x*y)
#define PRINT_D(x) printf("%d \n",x)
#define PRINT_S(x) printf("%s \n",x)
#define MAX(X,Y) (X >Y ? X : Y)
#define MIN(X,Y) (X <Y ? X : Y)
int main() {
PRINT_D(Multi(3, 5));
PRINT_D(MAX(5, 10));
PRINT_D(MIN(5, 10));
//if 문의 간결식
int x, y, result;
x = 10;
y = 5;
result = x > y ? x : y;
PRINT_S("IF문 간결식 결과");
PRINT_D(result);
_getch();
return 0;
}
#if, #ifdef, ifndef, #endif
- #if 는 if문 기능이 같습니다.
- #ifdef 는 어떤 변수가 #define 되어있는지 알아보는 기능입니다.
- #ifndef 는 #ifdef와 반대로 정의되어 있지 않으면 발생하는 전처리기 입니다.
#define VALUE 10
int main() {
//#if 예시
#if VALUE == 10
printf("VALUE 값은 10이 맞습니다. \n");
#elif VALUE ==20
printf("VALUE 값은 20이 맞습니다. \n");
#endif // A == 10
//#ifdef 예시
#ifdef VALUE
printf("VALUE 값이 정의되어 있습니다. \n");
#else
printf("VALUE 값이 정의되어 있지 않습니다. \n");
#endif
//#ifndef 예시
#ifndef PI
#define PI 3.14
#endif // !PI
printf("%f ", PI);
_getch();
return 0;
}
'컴퓨터 언어 > C' 카테고리의 다른 글
[C] C언어 8일차 분할 컴파일 (0) | 2020.03.17 |
---|---|
[C] C언어 8일차 기타 문법2 (지역, 전역, 정적 변수 사용 범위) (0) | 2020.03.17 |
[C] C언어 7일차 구조체와 TypeDef (0) | 2020.03.16 |
[C] C언어 7일차 포인터2 (0) | 2020.03.16 |
[C] C언어 6일차 포인터 (0) | 2020.03.15 |