티스토리 뷰

- const


  : 상수표 같은 읽기 전용 변수에 사용


  : 혹 const 안붙인 상수 변수중 멤버 하나만 바꿔도, .const/.bss에 메모리 이중으로 잡히고 초기화때 복사도 함


  : const char *A; A = "sample"(OK); *A = 'c'(X);  A는 상수문자 포인터므로, A가 가리킨 *A는 상수문자이므로 변경불가


  : char * const A = "sample"; A[1] = 'i'(OK); A++(X);  A는 상수 (문자포인터)므로, 주소값이 상수로 변경불가


- volatile


  : 외부장치/인터럽트에 의해 변경되는 메모리, 딜레이를 위한 루프 등 일반적인 컴파일러가 변경할 코드를 못 건드리게 함


  : 데이터가 휙 날아가거나 일시적이기 때문에 (volatile의 뜻), 컴파일러가 최적화 안함


  : volatile int i;  for (i=0; i<10000; i++);  딜레이를 위한 코드인데, volatile이 없으면 릴리즈 컴파일러는 제거해 버린다.


  : volatile int A; A =100; do_external_something(); A=200;  외부장치가 함수에서 A를 이용하는데,


    volatile이 없으면 컴파일러가 A를 대입하는 위치를 바꾸거나 둘 중에 하나를 없앨 수도 있다.


- static


  : 함수나 글로벌변수 앞에 쓰이면, 해당 파일에서만 보인다는 얘기 (OBJ에 static 함수 이름은 사라짐)


  : 로컬변수 앞에 쓰이면, 함수호출에서 리턴할 때 그 값을 정적으로 보관했다 다시 쓴다는 얘기


  : FILE A, static void function_A_1(); FILE B, function_A_1(); 하면 컴파일 에러


  : funtion() {  static int i=0;  i++;  ...}  funtion() 호출할 때마다 i는 1씩 증가함


- extern


  : 다른 파일에 선언된 변수를 참조해서 쓴다는 얘기


  : 공용 헤더에 extern을 안 붙이고 변수를 선언하면, 여기저기 메모리가 잡히므로 어떤 컴파일러는 에러


  : 하나의 소스 파일에서만 extern을 떼고, 나머지는 다 붙여야 함


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함