Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- web
- Algorithm
- Python
- 따라하며 배우는 C언어
- DP
- php
- udemy
- server
- C언어
- BFS
- String
- 생활코딩
- 종만북
- JavaScript
- graph
- 정수론
- dfs
- 따배씨
- 백준
- BASIC
- BOJ
- Math
- 인프런
- Algospot
- Cleancode
- 따라하면서 배우는 C언어
- C
- programmers
- greedy
- sorting
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 12.8 정적 변수의 외부 연결 본문
따배씨 - 따라하며 배우는 C언어
12강 Storage Classes, Linkage and Memory Management
12.8 정적 변수의 외부 연결 external linkage
- 여러 파일로 작성된 코드를 각각의 파일을 complier 가 따로따로 complie 하여 obj 파일을 만들고, 실행파일을 만들기 전에 linker 가 연결
- external linkage 를 갖는 변수들도 연결
// main.c
#include <stdio.h>
#include "second.c"
/*
Static variable with external linkage
- File scope, external linkage, static storage duration
- External storage class
- External variables
*/
int g_int = 7; // static variable 은 complier 가 0으로 알아서 초기화 해줌
double g_arr[1000] = {0, 0, }; // 하지만 초기화 하는것이 권장
/*
Initializing External Variables
*/
int x = 5; // ok, constant expression
int y = 1 + 2; // ok, constant expression
size_t z = sizeof(int); // ok, sizeof is a consant expression
//int x2 = 2 * x; // not ok, x is a variable // 변수가 들어간 값으로 초기화 안됨
void func(){
printf("g_int in func() %d %p\n", g_int, &g_int);
g_int += 10;
}
int main(){
/*
defining declaration vs referencing declaration
*/
//extern double g_arr[];
//extern int g_int; // extern 을 사용해 file scope의 변수가 scope 에서 선언되는 것을 방지 가능
//int g_int = 123; // hiding global g_int, func() 에서는 global g_int 가 사용됨
printf("g_int in main() %d %p\n", g_int, &g_int);
g_int += 1;
func();
fun_sec();
return 0;
}
//////////////////////////
//second.c
//
// second.c
// studyC
//
// Created by 이주호 on 2021/04/05.
//
#include <stdio.h>
//extern int g_int = 777; // file scope 에서는 초기화 가능, 하지만 각각의 파일에서 모두 초기화 하였을 때 Linkin Error
void temp(){
//extern int g_int = 777; // extern 변수는 block scope 초기화 불가
extern int g_int;
g_int += 1000;
}
void fun_sec(){
temp();
extern int g_int;
g_int += 7;
printf("g_int in fun_sec() %d %p\n", g_int, &g_int);
}
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 12.10 변수의 저장 공간 분류 요약 정리 ~ 12.11 함수의 저장 공간 분류 (0) | 2021.06.14 |
---|---|
[따배씨] 12.9 정적 변수의 내부 연결 (0) | 2021.06.14 |
[따배씨] 12.7 블록 영역의 정적 변수 Static (0) | 2021.06.13 |
[따배씨] 12.6 레지스터 변수 (0) | 2021.06.13 |
[따배씨] 12.5 자동 변수 (0) | 2021.06.13 |
Comments