일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩
- 데이터과학
- 웹개발
- 파이썬
- Yes
- 빅데이터
- 소프트웨어
- 자바스크립트
- 보안
- 데이터베이스
- 네트워크보안
- 네트워크
- 머신러닝
- 딥러닝
- 자료구조
- 클라우드컴퓨팅
- 사이버보안
- 컴퓨터과학
- 인공지능
- 알고리즘
- 버전관리
- 데이터구조
- 소프트웨어공학
- 컴퓨터비전
- 데이터분석
- 프로그래밍
- 프로그래밍언어
- I'm Sorry
- 컴퓨터공학
- 2
- Today
- Total
스택큐힙리스트
C와 C++에서의 정적 및 외부 전역 변수 본문
나는 2개의 프로젝트를 만들었고, 첫 번째는 C로 작성되었으며 두 번째는 C++로 작성되었다. 두 프로젝트 모두 동일한 동작을 한다.
C 프로젝트:
header.h
int varGlobal=7;
main.c
#include <stdio.h>
#include <stdlib.h>
#include header.h
void function(int i)
{
static int a=0;
a++;
int t=i;
i=varGlobal;
varGlobal=t;
printf(호출 #%d:\ni=%d\nvarGlobal=%d\n\n,a,i,varGlobal,t);
}
int main() {
function(4);
function(6);
function(12);
return 0;
}
C++ 프로젝트:
header.h
int varGlobal=7;
main.cpp
#include <iostream>
#include header.h
using namespace std;
void function(int i)
{
static int a=0;
int t=i;
a++;
i=varGlobal;
varGlobal=t;
cout<<호출 #<<a<<:<<endl<<i=<<i<<endl<<varGlobal=<<varGlobal<<endl<<endl;
}
int main() {
function(4);
function(6);
function(12);
return 0;
}
전역 변수는 기본적으로 extern이며 C에서는 기본적으로 static입니다. 그러므로 C++ 코드가 작동하는 이유는 무엇인가요?
즉, int varGlobal=7;은 static int varGlobal=7;과 같으며, static 변수는 해당 파일에서만 사용할 수 있다는 것이 맞나요?
답변 1
전역 변수는 기본적으로 C와 C++에서 extern
이나 static
으로 선언되지 않습니다.
변수를 static
으로 선언하면 현재 소스 파일에 제한됩니다. extern
으로 선언하면 변수가 존재하지만 다른 곳에서 정의되었음을 의미하며, 다른 곳에서 정의되어 있지 않은 경우 (extern
키워드 없이) 링크 에러 (심볼을 찾을 수 없음)가 발생합니다.
해당 헤더를 포함한 여러 개의 소스 파일이 있는 경우 코드가 깨지게 됩니다. 링크 시간에 varGlobal
에 대한 여러 참조가 생기기 때문입니다. static
으로 선언하면 여러 개의 소스 파일과 함께 동작하지만, 각 소스는 자체 varGlobal
을 갖게 됩니다.
C++에서만 가능한 것은 헤더에서 변수를 const
로 선언하는 것입니다. 아래와 같이:
const int varGlobal = 7;
그리고 링크 시간에 문제없이 여러 소스에 포함하십시오. 상수를 위해 이전의 C 스타일 #define
을 대체하는 것이 아이디어입니다.
여러 소스에서 보이는 전역 변수가 필요하고 const
가 아닐 경우, 헤더에 extern
으로 선언한 다음 소스 파일에서 extern 키워드 없이 정의하십시오:
여러 파일에서 포함된 헤더:
extern int varGlobal;
소스 파일 중 하나에서:
int varGlobal = 7;
답변 2
C 및 C++에서의 static과 extern 전역 변수C 및 C++는 다양한 프로그래밍 언어 중 가장 많이 사용되는 언어 중 하나입니다. 이들 언어에서 전역 변수는 프로그램의 여러 부분에서 접근할 수 있는 변수입니다. 전역 변수는 애플리케이션의 전체 범위에서 공유되는 데이터를 저장하는 데 사용됩니다. C 및 C++에서는 static 및 extern 예약어를 사용하여 전역 변수의 특성을 정의할 수 있습니다.
1. static 전역 변수
static 키워드는 C 및 C++에서 전역 변수의 지역화(localization)를 의미합니다. static 전역 변수는 선언된 파일에서만 접근 가능하며, 다른 파일에서는 접근할 수 없습니다. 이는 전역 변수의 범위를 제한하여 변수 충돌 문제를 방지합니다. static 전역 변수는 선언 시 초기화되며, 초기 값은 프로그램 실행 중에 변하지 않습니다. 함수 내부에서도 static 지역 변수를 사용할 수 있습니다. static 전역 변수는 다른 파일에서 동일한 이름을 가진 전역 변수와 충돌하지 않고 사용할 수 있습니다.
예를 들어, 다음 코드는 static 전역 변수의 선언 및 사용 예를 보여줍니다.
```c
// 파일 1
#include
static int num = 10; // static 전역 변수 선언
void printNum() {
printf(Number: %d\n, num);
}
```
```c
// 파일 2
#include
extern int num; // 외부 파일에 정의된 static 전역 변수를 사용하기 위해 extern 키워드 사용
int main() {
printNum(); // static 전역 변수 출력
return 0;
}
```
2. extern 전역 변수
extern 키워드는 C 및 C++에서 다른 파일에 선언된 전역 변수를 참조하는 데 사용됩니다. extern을 사용하여 변수를 선언하면 현재 파일에서 해당 변수를 정의하지 않고, 다른 파일에서 정의한 변수를 사용할 수 있습니다. 이로써 다른 파일에 선언된 전역 변수를 사용하여 데이터를 공유할 수 있습니다. 일반적으로 extern은 헤더 파일에 변수를 선언할 때 주로 사용됩니다.
다음은 extern 전역 변수의 선언 및 사용 예입니다.
```c++
// 파일 1
extern int num; // 다른 파일에 정의된 전역 변수 사용을 위해 extern 키워드 사용
void setNum(int value) {
num = value; // 외부 변수에 값 할당
}
```
```c++
// 파일 2
#include
int num; // 전역 변수 정의
extern void setNum(int value); // 외부 파일에서 정의된 함수 사용
int main() {
setNum(20); // 외부 변수 값 설정
printf(Number: %d\n, num); // 외부 변수 값을 출력
return 0;
}
```
이와 같이 C 및 C++에서 static 및 extern 전역 변수는 프로그래머들에게 유용한 기능을 제공합니다. static 전역 변수는 파일 범위에서만 접근할 수 있고, 다른 파일에서는 접근할 수 없으므로 프로젝트 관리에 도움을 줍니다. extern 전역 변수는 다른 파일에서 정의된 변수를 참조하여 데이터를 공유할 수 있도록 해줍니다. 이러한 특성들은 C 및 C++에서 전역 변수를 효과적으로 사용할 수 있도록 도와줍니다.
문서 최적화(SEO)를 고려하여 작성된 이 기사는 C 및 C++에서 static과 extern 전역 변수에 대한 이해를 돕기 위해 제공되었습니다. 지속적인 학습과 경험을 통해 프로그래머들은 이러한 기능들을 효율적으로 활용하여 코드의 유지 관리를 개선할 수 있을 것입니다.