일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴퓨터공학
- Yes
- 컴퓨터과학
- 네트워크
- 데이터베이스
- 파이썬
- 딥러닝
- 알고리즘
- 인공지능
- 데이터분석
- 코딩
- 프로그래밍
- 데이터구조
- 보안
- 자바스크립트
- 2
- 빅데이터
- I'm Sorry
- 머신러닝
- 소프트웨어
- 자료구조
- 컴퓨터비전
- 프로그래밍언어
- 사이버보안
- 데이터과학
- 클라우드컴퓨팅
- 버전관리
- 웹개발
- 소프트웨어공학
- 네트워크보안
- Today
- Total
스택큐힙리스트
C: 헤더 파일에서 'extern'의 사용 용도는 무엇인가요? 본문
이 말은 이미 여러 번 물어본 질문처럼 들릴지 모르지만, 이번에는 약간 다릅니다.
C 프로그래밍을 위해 Codeblocks를 사용하고 있고, 최근에는 C에서 헤더 파일을 사용하는 이유에 대해 궁금해지기 시작했습니다. 헤더 파일은 변수 구조체를 선언하거나 정의하는 데 사용된다는 것은 이해합니다. 그러나 이제 무언가를 시도해보고 지금은 혼란스러워졌습니다.
헤더 파일이라는 이름의 파일이 있습니다.
test1.h
#ifndef TEST1_H_INCLUDED
#define TEST1_H_INCLUDED
static int testvar = 233;
extern int one;
extern void show();
#endif // TEST1_H_INCLUDED
그리고 두 개의 다른 파일이 있습니다.
headertest.c
#includetest1.h
#include<stdio.h>
int one = 232;
int main()
{
testvar = 12;
printf(one의 주소는 %p이고 값은 %d입니다.,&testvar,testvar);
printf(one의 값은 %d입니다.,one);
show();
return 0;
}
headertest2.c
#include test1.h
#include<stdio.h>
extern int one;
extern void show()
{
//extern int one;
testvar = 34;
printf(\ucc38\uc5ec \ub450 \uc704\uc5d0 \uc811\uadfc\ud568 \ud589\uc744 %p\uc774\ub098 \uac12\uc740 %d\uc785\ub2c8\ub2e4.,&testvar, testvar);
printf(one\uc758 \uac12\uc740 %d\uc785\ub2c8\ub2e4., one);
}
\uc804\uc1a1 \uac00\ub2a5\ud55c \uc778\uc2a4\ud1a0\uc5b4\ub85c \uc720\ud6a8\ud558\ub294 \ud615\uc2dd\uc758 \ud3f4\ub9ac\uace4\uc5d0\uc11c \uc774 HTML \ud615\uc2dd\uc744 \ud55c\ubc88 \ucef4\ud30c\uc77c\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc2e4\ud589\ud558\uc5ec \ubc30\ud398\uc778\uc73c\ub85c \ubcc0\uacbd\ud574\uc8fc\uc138\uc694.
\uc9c0\uae08 \uc774\uc804\uc5d0 \uc815\uc758\ud55c \ubc30\ud398\uc778\uc758 '\ubbf8\uc218' \ubc0f '\ubbf8\uc218' \ud568\uc744 \uc801\uc6a9\ud55c \uacbd\uc6b0 \uc2a4\ud2b8\ub9ac\ub85c\uc6b4 \uc2a4\ud0dd\ub144 \ud30c\uc77c test1.h\uc5d0\uc11c '\uc0ac\uc6a9' \ud558\ub294 \uacbd\uc6b0 \uc624\ub514\uc624\ub97c \ucc98\ub9ac\ud588\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c '\uacf5\uae09 \ubc30\ud398\uc778' \ud568\uc744 \ub9cc\ub4e4\uc5b4 \ub370\uc774\ud130\ub97c \uc54c\uc544\ubcf4\uc5ec\uc8fc\ub294 \ubc29\ubc95\uc774\uba70 \ub208\uc744 '\uc0ac\uc6a9'\ud558\ub294 '\ud63c\uc790'\ub97c \uc54c\uc544\ubcf4\uc5ec\uc8fc\uae30 \uc804\uc5d0\ub294 \ubc30\ud398\uc778 \ud615\uc2dd\uc774 \uc544\ub2d9\ub2c8\ub2e4! \uc774\uac70 \uac19\uc740 \uc801\uc5b4\uc8fc\uc9c0\ub9cc \uc694\uc18c \ubcc0\uacbd\uc744 \ud558\ub824\ub294 \uc9c0\uc778\ud55c \uc7a5\ubc14\uad6c\ub2c8 \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
\uc548\ub155, \ub2e4\uc74c \uc694\uc18c\ub85c
답변 1
/* C++ iostreams를 통해 ISO C stdio를 정의합니다.
저작권 (C) 1991, 1994-2008, 2009, 2010 Free Software Foundation, Inc.
이 파일은 GNU C Library의 일부입니다.
GNU C Library는 자유 소프트웨어로, 재배포하거나
GNU Lesser General Public License에서 정의하는 조건에 따라
수정할 수 있습니다. (라이선스의 2.1 버전 또는 그 이후 버전 선택 가능)
GNU C Library는 유용하게 사용될 수 있지만,
이미 묵시적인 보증이나 상업성, 특정 목적에의 적합성은 보증하지 않습니다.
GNU Lesser General Public License에서 자세한 내용을 확인하십시오.
GNU C Library와 함께 GNU Lesser General Public License을
받은 훈련소프트웨어 재단, 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA로 보고하십시오. */
/*
* ISO C99 표준: 7.19 입출력 <stdio.h>
*/
#ifndef _STDIO_H
#if !defined __need_FILE && !defined __need___FILE
# define _STDIO_H 1
# include <features.h>
__BEGIN_DECLS
# define __need_size_t
# define __need_NULL
# include <stddef.h>
# include <bits/types.h>
# define __need_FILE
# define __need___FILE
#endif /* FILE이 필요하지 않음. */
#if !defined __FILE_defined && defined __need_FILE
/* C++이 만족하도록 안에 정의합니다. */
struct _IO_FILE;
__BEGIN_NAMESPACE_STD
/* 스트림의 불투명한 유형. 다른 곳에서 사용하는 정의입니다. */
typedef struct _IO_FILE FILE;
__END_NAMESPACE_STD
#if defined __USE_LARGEFILE64 || defined __USE_SVID || defined __USE_POSIX \
|| defined __USE_BSD || defined __USE_ISOC99 || defined __USE_XOPEN \
|| defined __USE_POSIX2
__USING_NAMESPACE_STD(FILE)
#endif
# define __FILE_defined 1
#endif /* FILE이 정의되지 않음. */
#undef __need_FILE
#if !defined ____FILE_defined && defined __need___FILE
/* 스트림의 불투명한 유형. 다른 곳에서 사용하는 정의입니다. */
typedef struct _IO_FILE __FILE;
# define ____FILE_defined 1
#endif /* __FILE이 정의되지 않음. */
#undef __need___FILE
#ifdef _STDIO_H
#define _STDIO_USES_IOSTREAM
#include <libio.h>
#if defined __USE_XOPEN || defined __USE_XOPEN2K8
# ifdef __GNUC__
# ifndef _VA_LIST_DEFINED
typedef _G_va_list va_list;
# define _VA_LIST_DEFINED
# endif
# else
# include <stdarg.h>
# endif
#endif
#ifdef __USE_XOPEN2K8
# ifndef __off_t_defined
# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif
# define __off_t_defined
# endif
# if defined __USE_LARGEFILE64 && !defined __off64_t_defined
typedef __off64_t off64_t;
# define __off64_t_defined
# endif
# ifndef __ssize_t_defined
typedef __ssize_t ssize_t;
# define __ssize_t_defined
# endif
#endif
/* `fgetpos'와 `fsetpos'의 두 번째 인수의 형식입니다. */
__BEGIN_NAMESPACE_STD
#ifndef __USE_FILE_OFFSET64
typedef _G_fpos_t fpos_t;
#else
typedef _G_fpos64_t fpos_t;
#endif
__END_NAMESPACE_STD
#ifdef __USE_LARGEFILE64
typedef _G_fpos64_t fpos64_t;
#endif
/* `setvbuf'에 대한 세 번째 인수의 올 수 있는 값입니다. */
#define _IOFBF 0 /* 완전한 버퍼링. */
#define _IOLBF 1 /* 줄 버그래서 우리는 헤더 파일을 가지고 있는 것입니다.
답변 2
'extern' 키워드는 C 프로그래밍 언어에서 헤더 파일에서 사용되는 중요한 요소입니다. 이 키워드는 변수와 함수를 선언할 때 사용되며, 해당 변수와 함수가 다른 소스 파일에서 정의되거나 선언되었음을 알려줍니다.
'extern' 키워드는 컴파일러에게 해당 변수 또는 함수가 현재 소스 파일에서 정의되지 않았으며, 다른 소스 파일에서 사용할 수 있음을 알려줍니다. 이를 통해 여러 소스 파일 간에 변수와 함수를 공유하고, 코드의 모듈성과 재사용성을 증가시킬 수 있습니다.
헤더 파일은 일반적으로 함수의 프로토타입(prototype)과 전역 변수의 선언을 포함합니다. 프로토타입은 함수의 이름, 매개 변수 및 반환 값에 대한 정보를 제공하는데 사용됩니다. 이는 함수를 호출하기 전에 컴파일러에게 함수에 대한 정보를 제공하므로, 함수를 올바르게 사용할 수 있게 합니다.
전역 변수는 프로그램의 여러 부분에서 사용되는 변수입니다. 이 변수는 여러 소스 파일에서 공유될 수 있지만, 각 소스 파일에서 정의되거나 선언될 수 있습니다. 이때 'extern' 키워드를 사용하여 전역 변수가 정의되지 않았음을 알려주면, 컴파일러는 해당 변수가 다른 소스 파일에서 사용될 것임을 알게됩니다.
헤더 파일에 'extern' 키워드를 사용함으로써 기능적으로 연관된 소스 파일 간에 변수와 함수를 공유할 수 있습니다. 이는 프로젝트의 복잡성을 줄이고, 중복 코드를 피하며, 단일 소스 파일로 코드를 정리하는 데 도움이 됩니다. 또한, 소스 파일 간의 의존성을 관리하는 데 도움이 되어 코드 유지보수성을 향상시킵니다.
'extern' 키워드의 사용은 C 프로그래밍에서의 효율성과 모듈성을 개선하는 데 중요한 역할을 합니다. 헤더 파일에서 'extern' 키워드를 적절하게 사용함으로써 코드의 구조와 가독성을 높이고, 프로그램의 유지 및 보수를 용이하게 할 수 있습니다.
[Keyword Phrases: extern, 헤더 파일, C 프로그래밍, 프로토타입, 전역 변수, 공유, 모듈성, 코드 유지보수성]