예 링커 오류가 발생합니다 : 코드 위왜 컴파일러가 자동으로 자유롭게 정의 된 함수를 인라인하지 않습니까? 대신
// header.h
void foo() // function definition in the file
{
}
// file1.cpp
#include"header.h"
...
// file2.cpp
#include"header.h"
...
이 링커 오류가 발생합니다. 컴파일러가 inline foo()
을 자동으로 만들면 링커 오류가 발생하지 않는다고 가정합니다.
제 질문은 언어 관점입니다. 왜 컴파일러가 자동으로 inline
이되지 않습니까? 어떤 변화가있을 것인가?
다른 질문 : "컴파일러가 정의 된 모든 자유 함수 앞에 inline
이 있다고 가정하면 어떤 문제가 발생할 수 있습니까?"
모든 무료 함수 앞에 키워드'inline'을 가정하는 컴파일러는 어떻습니까? – iammilind
@iammilind 그런 다음 우연히 같은 이름의 두 가지 (다른) 기능을 사용하자 마자 오류 대신 일관성없는/잘못된 동작이 발생합니다. 헤더에 정의를 넣지 말고 (어쨌든 조직을위한 좋은 방법), 포함 경비원을 추가하십시오 (헤더 당 세 줄임). – delnan