본문 바로가기

C lang

[C language] Geany편집기 - 3. define(전처리 정의), operator(연산자), 분기문(if-else, switch-case)

#정리

** 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;
}