본문 바로가기
Programming/C

9. 함수와 변수

by 기딩 2023. 10. 19.
728x90

global, local 변수

  • 전역변수는 int 변수할당하면 컴파일러가 초기값 0로 설정, 지역변수는 garbage
  • 지역변수 : 함수 동안에만 살아있음 ex) 매개변수
  • 다른 블록에 같은 변수명 선언해도 다른 변수임. I.e. 다른 메모리
  • static 정적변수 :

 

생존기간 by 변수 선언 위치, 저장 유형 지정자

  • 정적할당 static allocation : 프로그램 실행 동안 유지
  • 자동할당 automatic allocation : 블록 나가면 소멸

 

저장 유형 지정자

  • 대부분의 지역변수는 auto가 디폴트
  • register : 고속의 메모리 사용
  • static : 프로그램 실행 동안 살아있음
  • extern : 다른 파일의 전역변수 가져올 때
  • volatile : 최적화로 인한 코드 생략 막기
  • 언제 지역/전역변수 사용?
    -> 웬만하면 지역변수(자동 저장 유형) 쓰기
    • 함수 호출 끝나도 변수 값 유지해야 하면 → 지역 정적
    • 많은 함수에서 공유되어야 하면 → 외부 참조 변수

 💡 sum, add 같은 언어는 assembly어
     더 저급 언어가 디셈블리어 : C언어를 짤 수 있는 기계어

 

💡 레지스터 쓰는 경우 거의 없음

 

💡 volatile은 알아야 함!
     a=100,200,300;하면 컴파일러가 100,200했던 건 알아서 지워서 최적화함.
     최적화하지 못하고 유지하는 게 volatile(껐다켰다 가능) 하드웨어 제어시 사용

 

아두이노 IDE

void setup() {
//  pinMode(13, OUTPUT);
  DDRB = 0x20; //myDDRB
}

void loop() {
//  digitalWrite(13, HIGH);
  PORTB = 0x20; //myPORTB
  delay(500);
//  digitalWrite(13, LOW);
  PORTB = 0x0;
  delay(100);

}

비주얼스튜디오  p.387

#include <stdio.h>

void save(int amount) 
{
	static int sum = 0;
	if (amount >= 0)
		printf("%d \\t\\t", amount);
	else
		printf("\\t %d \\t", - amount);

	sum += amount;
	printf("%d \\n", sum);
}

int main(void) 
{
	printf("================================\\n");
	printf("입금 출금 잔고\\n");
	printf("================================\\n");

	save(10000);
	save(50000);
	save(-10000);
	save(30000);

	printf("================================\\n");
	return 0;
}
  • 외부 연결 : 외부의 전역 변수를 extern 이용해서 연결
  • 함수 앞 static : 파일 안에서만 사용할 수 있음 → 다른 파일에서 쓰는 거 막을 수 ㅇ
  • 가변 매개변수 : 매개변수 개수가 자유로움 ← 함수(매개, …) // 잘 안 씀

//함수 선언 시 자료 유형만 적어주고 매개변수명 안 적어줘도 됨 (int, int)
//함수 정의 시 (int x, int y) 적어주면 됨

 

- 순환 recursion 재귀용법 : 함수 안에 자신을 호출
// 잘 안 씀

 


이진수 형식으로 출력하기

#include <stdio.h>

void print_binary(int x);

int main(void)
{
    print_binary(8);
}

void print_binary(int x)
{
    if (x > 0)
    {
        print_binary(x / 2);
        printf("%d", x % 2);
    }
}
// x마다 메모리 저장해뒀다가 다시 돌아감
728x90

'Programming > C' 카테고리의 다른 글

15. 스트림과 파일 입출력  (1) 2023.10.19
13. 구조체  (0) 2023.10.19
12. 문자열  (0) 2023.10.19
11. 포인터  (1) 2023.10.19
10. 배열  (0) 2023.10.19