#정리
** define을 통해 변수, 함수, 조건식 등 다양한 정의가 가능하다.
** 변수 타입이 같으면 패턴변수로 동시에 선언할 수 있다.
(ex. int d1 = 10, d2 = 20, d3 = 30; //변수 모두 앞자리 d가 같으므로, 패턴변수 d로 3개 모두 지목가능.)
#define - 정의
//변수 정의에 사용
- 전역변수와 비슷하게 활용된다. - 로컬 변수의 값이 원할하게 전달되지 않을 때 사용하면 좋다. - 대문자를 이용해 작성하면 전역변수와 헷갈리지 않을 수 있다.
//함수 정의
- #define sum(a) ((a##1)+(a##2)+(a##3))//패턴변수 1,2,3을 더해라
>>printf("define sum1: %d\n",sum(d)); - #define sum2(a) printf("define sum2: %d\n",(a##1)+(a##2)+(a##3))//더한 뒤 출력해라 >> sum2(d);
//전처리 if : define(전처리)와 함께쓰는 #if문
- #if - #elif - #endif 형태로 작성한다.
#operator - 연산자
//1.(),[], ,,(연결 연산자), ., *, **, ***, ->(구조체포인터)
//2. (cast)캐스팅, ++, --. +
//3. *, /, +, - %
//4. <<, >> - 10 << 3 // 8배(2^3) - 10 >> 3 // 1/8배(2^3)
//5. == != > < >= <= - true / false 반환
//6. & | ^
- 비트연산 >> 숫자가 온다//7. && || ! (true/false)
- 비교 연산자가 논리 연산자보다 우선한다.
- 5==5 && 5==5 // 둘다 참일 때 참
- 5==5 || 5<5 //모두 거짓일 때 거짓
- !(5==5) //참이면 거짓, 거짓이면 참
//printf("%d\n", true && true);
- #include <stdbool.h> 필요//8. ? : (삼항연산자) - 0이 아니면 다 참이다.
#if문
//if(조건) - else if(조건) - else 뼈대로 작성한다.
//bool 타입 변수 사용을 위해서는 헤더선언 필요
- #include <stdbool.h>
#switch - case문
//switch(int 조건) - case 숫자값: 실행문 - break; 뼈대로 작성한다.
- 조건에는 int 타입을 필요로 하기 때문에 실수가 반환될 경우 캐스팅이 필요하다.
** define을 통해 변수, 함수, 조건식 등 다양한 정의가 가능하다.
#define - 정의
//변수 정의에 사용
- 전역변수와 비슷하게 활용된다.
- 로컬 변수의 값이 원할하게 전달되지 않을 때 사용하면 좋다.
- 대문자를 이용해 작성하면 전역변수와 헷갈리지 않을 수 있다.
--예문 코드 보기--
#include <stdio.h>
#include <string.h>
#define ARR_LENGTH 10
#define LED 4
//#undef LED //정의 취소 - 변수가 없어지면서 Error
int main(int argc, char **argv)
{
printf("define...\n");
//전처리, 즉,컴파일러에게 먼저 일을 시키는 것 (java의 preHandle()과 비슷하다)
printf("LED...%d\n",LED);
char name[ARR_LENGTH];//숫자 대신 define 값을 사용할 수 있다.
//printf("name length...%d\n",strlen(name));//오류는 안나지만 값이 할당이 안 된 상태라서, 쓰레기 값이 들어와 출력 값이 이상할 수 있다.
printf("name length...%d\n",sizeof(name));
return 0;
}
-------------------------------------
** 변수 타입이 같으면 패턴변수로 동시에 선언할 수 있다.
(ex. int d1 = 10, d2 = 20, d3 = 30; //변수 모두 앞자리 d가 같으므로, 패턴변수 d로 3개 모두 지목가능.)
//함수 정의
- #define sum(a) ((a##1)+(a##2)+(a##3))//패턴변수 1,2,3을 더해라
>>printf("define sum1: %d\n",sum(d));
- #define sum2(a) printf("define sum2: %d\n",(a##1)+(a##2)+(a##3))//더한 뒤 출력해라
>> sum2(d);
#include <stdio.h>
//define으로 함수 정의
#define sum(a) ((a##1)+(a##2)+(a##3))//패턴변수의 1,2,3을 더해라
#define sum2(a) printf("define sum2: %d\n",(a##1)+(a##2)+(a##3))//더한 뒤 출력해라
#define sum3(a) ((a##x)+(a##y))//패턴변수의 x,y를 더해라
#define sum4(a) printf("define sum4: %d\n",(a##x)+(a##y))//더한 뒤 출력해라
int main(int argc, char **argv)
{
printf("define...\n");
//변수 타입이 같으면 동시에 선언할 수 있다.
int d1 = 10, d2 = 20, d3 = 30;
printf("sum: %d\n",d1+d2+d3);
printf("define sum1: %d\n",sum(d));//변수 모두 앞자리 d가 같으므로, 패턴변수 d로 3개 모두 지목가능.
sum2(d);
//mission
int dx = 200, dy=300;
printf("sum: %d\n",dx+dy);
printf("define sum3: %d\n",sum3(d));
sum4(d);
return 0;
}
-------------------------------------
//전처리 if : define(전처리)와 함께쓰는 #if문
- #if - #elif - #endif 형태로 작성한다.
#include <stdio.h>
//#define LED 10
#define LED 12
int main(int argc, char **argv)
{
printf("define...\n");
//define과 함께 쓰는 if문으로 "전처리if"라고도 한다.
//define 변수를 조절하고 싶다면 #if로 해야한다.
#if LED ==10
printf("LED on 10....%d\n",LED);
#elif LED ==12
printf("LED on 12....%d\n",LED);
#endif
return 0;
}
-------------------------------------------6교시 -------------------------------------------
#operator - 연산자
//1.(),[], ,,(연결 연산자), ., *, **, ***, ->(구조체포인터)
//2. (cast)캐스팅, ++, --. +
//3. *, /, +, - %
//4. <<, >>
- 10 << 3 // 8배(2^3)
- 10 >> 3 // 1/8배(2^3)
//5. == != > < >= <=
- true / false 반환
//6. & | ^
- 비트연산 >> 숫자가 온다
//7. && || ! (true/false)
- 비교 연산자가 논리 연산자보다 우선한다.
- 5==5 && 5==5 // 둘다 참일 때 참
- 5==5 || 5<5 //모두 거짓일 때 거짓
- !(5==5) //참이면 거짓, 거짓이면 참
//printf("%d\n", true && true);
- #include <stdbool.h> 필요
//8. ? : (삼항연산자)
- 0이 아니면 다 참이다.
--예문 코드 보기--
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(int argc, char **argv)
{
printf("operator...\n");
//1.(),[], ,,(연결 연산자), ., *, **, ***, ->(구조체포인터)
//2. (cast)캐스팅, ++, --. +
char strnum[2] = "5";
printf("(int)strnum: %d\n", atoi(strnum));
int su=3;
printf("++su: %d\n", ++su);
printf("--su: %d\n", --su);
//3. *, /, +, - %
printf("10 * 3: %d\n", 10 * 3);
printf("10 / 3: %d\n", 10 / 3);
printf("10 + 3: %d\n", 10 + 3);
printf("10 - 3: %d\n", 10 - 3);
printf("10 %% 3: %d\n", 10 % 3);
//4. <<, >>
printf("10 << 3: %d\n", 10 << 3); // 8배(2^3)
printf("10 >> 3: %d\n", 10 >> 3); // 1/8배(2^3)
//5. == != > < >= <=
printf("10 == 3: %d\n", 10 == 3);
printf("10 != 3: %d\n", 10 != 3);
printf("10 > 3: %d\n", 10 > 3);
printf("10 < 3: %d\n", 10 < 3);
printf("10 >= 3: %d\n", 10 >= 3);
printf("10 <= 3: %d\n", 10 <= 3);
//6. & | ^ (비트연산 - 숫자가 온다)
printf("10 & 3: %d\n", 10 & 3);
printf("10 | 3: %d\n", 10 | 3);
printf("10 ^ 3: %d\n", 10 ^ 3);
//7. && || ! (true/false) - 비교 연산자가 논리 연산자보다 우선한다.
printf("5==5 && 5==5: %d\n", 5==5 && 5==5); // 둘다 참일 때 참
printf("5>5 || 5<5: %d\n", 5==5 || 5<5); //모두 거짓일 때 거짓
printf("!(5==5): %d\n", !(5==5));//참이면 거짓, 거짓이면 참
// #include <stdbool.h> 필요
printf("%d\n", true && true);
//8. ? : (삼항연산자)
int num =100; //0이 아니면 다 참이다.
printf("%d\n",num?1000:2000);
num=0;
printf("%d\n",num?1000:2000);
return 0;
}
#if문
//if(조건) - else if(조건) - else 뼈대로 작성한다.
//bool 타입 변수 사용을 위해서는 헤더선언 필요
- #include <stdbool.h>
#include <stdio.h>
#include <stdbool.h>
int main(int argc, char **argv)
{
printf("if else ...\n");
bool x =true;
if(x){
printf("Good ...\n");
}
double avg = 99.88;
char *grade = "A";
if(avg>=90){
grade = "A";
}else if(avg>=80){
grade = "B";
}else {
grade = "F";
}
printf("grade:%s\n",grade); // >> 99.88=A
return 0;
}
#switch - case문
//switch(int 조건) - case 숫자값: 실행문 - break; 뼈대로 작성한다.
- 조건에는 int 타입을 필요로 하기 때문에 실수가 반환될 경우 캐스팅이 필요하다.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
printf("switch case break...\n");
//int x = 90;
double avg = 99.88;
char *grade = "A";
//char grade[2] = "A";
switch((int)avg/10){//casting 필요
case 10: case 9:
grade = "A";
//strcpy(grade,"A");
break;
case 8:
grade = "B";
//strcpy(grade,"B");
break;
case 7:
grade = "C";
//strcpy(grade,"C");
break;
default:
grade = "F";
//strcpy(grade,"F");
break;
}
printf("grade: %s\n",grade);
return 0;
}