2014-09-22 2 views
0

인라인 함수를 표시하는 것은 컴파일러에 대한 요청 일 뿐이므로 일부 컴파일러가 여러 정의 오류 (인라인 요청이 거부 된 경우)를 생성 할 수 있는지 궁금합니다. 인라인 요청이 수락되면)?헤더 파일에있는 인라인 자유 함수의 이식성

그렇다면 free 함수를 인라인이 아닌 정적으로 표시하는 것이 더 좋습니다. 그러면 각 TU에 함수의 고유 한 복사본이 있고 컴파일러 관련 문제가 발생하지 않을 것입니다.

미리 감사드립니다.

+0

Nope; 빌드 도구가 함수를 인라인하지 않기로 선택하더라도 모든 것이 완료되고 완료 될 때 하나의 정의 만 작성해야합니다. – dlf

답변

1

inline 제안 사항은 함수 호출을 실제 정의로 대체하는 부분에만 해당됩니다. inline은 표준 승인 방식으로 One 정의 규칙을 안전하게 우회 할 수있는 유일한 방법입니다. 그러나 모든 함수 정의가 동일해야합니다.

좋은 읽기 : 내 이전의 대답 :

Should I define static inline methods in header file?

2

그것은 "오직 요청"아니에요 - 연결에 미치는 영향, 하나의 정의 규칙을 편안 허용 여러 번역 단위에서 동일 정의 는 잘 정의되고 이식 가능합니다.

컴파일러가 어떤 함수에 대한 호출을할지 어떨지에 상관없이 그것은 단지 "요청"일 뿐이며, 이는 그들이 선언되었는지 여부에 관계없이 inline입니다. 거의 모든 최적화와 마찬가지로 "유사"규칙이 적용됩니다. 프로그램 동작 및 정확성은 최적화의 적용 여부에 의존해서는 안됩니다.

static으로 신고하는 것은 좋지 않습니다. 기껏해야 여러 개의 동일한 기능으로 프로그램을 확장 할 것입니다. 최악의 경우 일관된 주소를 갖는 함수 또는 번역 단위 사이의 정적 변수를 공유하는 함수에 의존하는 코드를 중단합니다.

관련 문제