1.전역변수
전역변수가 많아질수록 프로그램은 복잡해진다
최소한으로 써야됨
실행파일의 크기를 증가시킴
int A;
int B = 1;
|
초기화 |
Ex |
BSS |
X |
A |
Data |
O |
B |
A는 값을 지정하지않았으므로 비트 0값이 들어감
BSS는 실행파일 크기에 영향 미치지 않음
1 2 3 4 5 6 7 8 9 | #include <stdio.h> //int a[1024*1024]; // 4Mbyte int a[1024*1024] = {1, }; int main() { return 0; } |
3번 : 값을 넣지 않았으므로 BSS 값이 크게 늘어나지는 않음
4번 : 계산한것과 같이 약 4M가량 크기가 증가함
결과 :
지역변수
선언된 함수내에서만 접근가능
static 붙이면 함수혹은 c파일 내부에서만 전역변수로써 사용 가능
사전에 협의되지 않은 전역변수는 static을 사용하는게 좋음
test.c
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> static int a; //전역변수 선언 void test(void) { printf("test : a = %d \n",a); a = 777; printf("test : a = %d \n",a); return; } | cs |
main.c
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int a; int main(void) { printf("main: A = %d \n", a); test(); printf("main: A = %d \n", a); return 0; } | cs |
main.c와 test.c를 각각 컴파일해서 obj 파일 생성후
gcc -o 옵션으로 smart 실행파일 생성
결과 :
static 선언시
test 내부에서 지역변수 a가 값이 설정되었으므로
main에서는 test의 a값이 적용되지 않음
static을 함수에 선언시
에러가 생김
2.레지스터변수 :
변수는 보통 컴퓨터의 메모리에 저장된다. 그러나 운이 좋으면 레지스터 변수는 CPU 레지스터 또는 더 일반적으로 가장 빠른 메모리에 저장되는데, 보통 변수보다 더 빠르게 접근하고 계산될 수 있다
권장하지 않음
3.재귀함수
내부에서 자기자신을 호출하는 함수
종료시점 중요(탈출)
권장하지 않음
RecursiveFunc.c
num의 값이 0이 되면 탈출함
num의 값은 1씩 감소함
RecursiveFactorial.c
n팩토리얼 n!일때
if문에 의해 n의 값이 1일때 1을 반환
나머지는 n * (n-1)*(n-1)*.... 계산
1 = 1
2*(2-1) = 2
3*(3-1)*(2-1) = 6
4*(4-1)*(3-1)*(2-1) = 24
9*(9-1)*(8-1)*(7-1)*(6-1)*(5-1)*(4-1)*(3-1)(2-1) = 362880
4.배열
둘이상의 변수를 모아놓은것
다수의 데이터를 저장하고 처리하기위한 것
ArrayAccess.c
배열에 들어간 모든값 더한결과
ArrayInit.c
배열 사이즈 계산해서 출력
arr1,arr2,arr3 각각 길이를 계산 해서 길이만큼 각각 출력
출력 :
5.포인터
메모리주소 값을 저장하기 위한 변수
PointerOperation.c
배열의 주소에 해당하는 값을 찾아서 계산함
결과:
비주얼 스튜디오 디버그 모드
메모리 주소 고정
디버그 실행시 iNum의 메모리 주소의 쓰레기값을 볼수 있음
디스어셈블리 : 어셈블리 코드로 된 화면
직접 적은 주소가 리틀 엔디언(Little-endian)으로 저장된것을 확인할수 있음
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160331-업무일지-허도경-로봇제어-터미널 (0) | 2016.04.06 |
---|---|
20160405_장진웅_업무일지_로봇제어_시리얼제어2 (0) | 2016.04.05 |
20160404_장진웅_업무일지_로봇제어_시리얼제어 (0) | 2016.04.05 |
20160330-업무일지-허도경-로봇제어-터미널 (0) | 2016.04.05 |
20160401_김도관_업무일지_C언어 기초및 라즈베리파이_Non-Canonical (0) | 2016.04.05 |
20160331_김도관_업무일지_C언어 기초및 라즈베리파이 시리얼통신_Canonical (0) | 2016.04.05 |
20160330-업무일지-이보원 라즈베리파이 명령어 실습 (0) | 2016.04.05 |
20160329 업무보고 이보원 라즈베리파이 벡업 하기 및 visual studio 실습 (0) | 2016.04.05 |