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 |