티스토리 뷰
728x90
1. Global variable은 define만 한 경우에도 값이 0으로 초기화 된다.
2. 반면 Local variable은 define만 한 경우에는 garbage value가 들어간다.
3. extern은 외부에서 해당 변수나 함수를 정의했다는 의미다.
static의 활용 - static은 storage class specifier라고 불린다.
4. global 변수로 사용하면서 특정한 함수에서만 사용하기 원하는 경우는
4-1 함수 안에서 static으로 선언하면 된다.
int main() {
func1();
func1();
func1();
func1();
}
void func1() {
static int count = 0;
printf("counter is :: \d", ++count);
}
5. 여러 파일간에 공유되는 global 변수를 정의한 파일에서만 사용하기를 원하는 경우 static을 붙인다.
// main.c 파일
#include <stdio.h>
void myFun();
int globalInt;
int main() {
globalInt = 100;
printf("Global variable is %d \n", globalInt);
myFun();
printf("Global variable is %d", globalInt);
return 0;
}
// func.c 파일
extern int globalInt;
void myFun() {
globalInt = 900;
}
5-1 위의 코드를 실행하면 아래처럼 프로젝트의 모든 파일에서 globalInt가 접근가능하다.
5-2 static을 붙이고 실행하면
#include <stdio.h>
void myFun();
static int globalInt;
int main() {
globalInt = 100;
printf("Global variable is %d \n", globalInt);
myFun();
printf("Global variable is %d", globalInt);
return 0;
}
5-3 실행 결과는 아래처럼 컴파일 에러가 발생한다.
6. 함수를 특정 파일에서만 호출하고 싶은 경우에 해당 함수에 static을 붙인다.
6-1 우선 static이 없는 함수를 생성하고 다른 파일에서 이 함수를 호출한다.
// main.c 파일
#include <stdio.h>
void myFun();
static int globalInt;
int main()
{
globalInt = 100;
printf("Global variable is %d \n", globalInt);
myFun();
printf("Global variable is %d", globalInt);
return 0;
}
void change_system_clock(int system_clock) {
printf("System clock changed to %d \n", system_clock);
}
// func.c 파일
extern void change_system_clock(int);
extern int globalInt;
void myFun() {
change_system_clock(0);
}
6-1 실행 결과는 다음과 같다.
6-2 static을 해당 함수에 붙이고 실행한다.
#include <stdio.h>
void myFun();
static int globalInt;
int main()
{
globalInt = 100;
printf("Global variable is %d \n", globalInt);
myFun();
printf("Global variable is %d", globalInt);
return 0;
}
static void change_system_clock(int system_clock) {
printf("System clock changed to %d \n", system_clock);
}
6-3 실행 결과
728x90
'Embedded Systems' 카테고리의 다른 글
Embedded Systems : 기본적인 것들 (0) | 2020.08.29 |
---|
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
TAG
- 스프링
- XML
- 자바
- Many-To-Many
- one-to-one
- RestTemplate
- 로그인
- form
- WebMvc
- 설정
- 매핑
- MYSQL
- Angular
- crud
- mapping
- 설정하기
- 스프링부트
- 상속
- 외부파일
- spring boot
- one-to-many
- Rest
- login
- jsp
- Security
- Validation
- hibernate
- Spring
- 하이버네이트
- Spring Security
250x250