• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

4.2 extern의 존재 유무

23.06.06 23:51 작성 23.06.06 23:51 수정 조회수 350

1

선생님께서 45분 쯤에 말씀하셨던 코드들을 좀 더 이해해보고 싶어서 이렇게 해보았습니다.

<Header File constant.h>

#pragma once

namespace Constants {

extern const double pi(3.141592);

extern const double gravity(9.8); }

 

<test.cpp>

#include <iostream>

#include "constant.h"

void doSomething() {

using namespace std;

cout << "In test.cpp " << Constants::pi << endl;

}

 

<main.cpp>

#include<iostream>

#include "constant.h"

using namespace std;

void doSomething();

int main() {

cout << "In main.cpp file " << Constants::pi << endl;

doSomething();

return 0; }

 

여기서 궁금한 점이 헤더파일 안에 있는 const 변수들 앞에 extern이 없으면 아무런 문제가 없지만,

extern을 붙이면 문제가 발생합니다..에러.jpg왜 extern을 붙이기만 하면 오류가 발생하는 것일까요...?

extern linkage도 결국에는 전역 변수 중 하나인데 말입니다...

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2023.06.07

안녕하세요, 답변 도우미 Soobak 입니다.

선언과 정의가 분리되지 않았기 때문입니다.
헤더 파일에 extern 상수를 선언을 함과 동시에 초기화를 하면, 이 헤더 파일이 여러 소스 파일에서 포함되었을 때 해당 상수가 여러 번 정의되었다고 받아들이게 됩니다.
따라서 링킹 시점에서 다중 정의 에러가 발생하게 됩니다.