2013-04-25 3 views
0

getCPUusage()과 같은 함수 호출시 Windows 또는 Linux 용 getCPUusage() 함수로 리디렉션되는 API를 만들고 싶습니다. 그래서 나는 접착제 파일 api.h을 사용하고 있습니다 : inline를 사용하여 더 나은 솔루션이 될 것입니다 경우API에 대한 인라인 함수 사용

getCPUusage() { 
    #ifdef WIN32 
     getCPUusage_windows(); 
    #endif 
    #ifdef __gnu_linux__ 
     getCPUusage_linux(); 
    #endif 
} 

그래서 나는 내 자녀로부터 전화가 더 큰 것, 궁금해.

제 질문은 다음과 같습니다.이 상황에서 모든 호출에 인라인 함수를 사용하는 것이 더 좋습니까?

+0

http://stackoverflow.com/questions/1759300/when-should-i-write-the-keyword-inline-for-a-function-method 가능한 중복 –

+0

누락 된 사실을 알고 계십니까? #endif 's? –

+0

그래, 그게 예일 뿐이야, 미안. – Xaltar

답변

1

프로그램의 유스 케이스에 따라 다릅니다. 소비자가 여전히 C++ 인 경우 인라인은 센스가 있습니다. 그러나 C, Pascal, Java ... 내부에서 재사용하고 싶다고 가정합니다.이 경우 인라인은 사실이 아닙니다. 호출자는 lib를 통해 다소 안정적인 이름을 내 보내야하지만 헤더 파일에서는 그렇지 않습니다. Windows에서 당신이 __dllexport 키워드를 적용 할 필요하면서 리눅스에 대한 해방이 아니라 투명 - 그 inline

0

대답에 적용 할 수 없습니다 : 예, 아마 가치가없는 참으로 더 효율적이지만 :

당신이 만약 이 함수를 클래스에 넣으면 헤더 파일 만 있기 때문에 상황에 "인라인"키워드를 적어 둘 필요는 없습니다 (설명에 따르면 cpp 파일이 없습니다). (헤더 파일의) 클래스 정의 내에 구현 된 함수는 컴파일러에서 자동으로 인라인 함수로 간주됩니다. 그러나 이것은 컴파일러에게만 "힌트"입니다. 컴파일러가 더 효율적인 것으로 판명되면 컴파일러는 함수를 비 - 인라인으로 만들기로 결정할 수 있습니다. 당신과 같은 작은 함수의 경우, 실제 인라인 함수를 생성 할 가능성이 높습니다.

이러한 기능을 클래스에 넣지 않으면 인라인을 추가해야한다고 생각하지 않습니다. 위에서 말했듯이 "힌트"일 뿐이며 "힌트"가없는 현대 컴파일러도 있습니다. 어쨌든 인라인하는 기능을 알아낼 것입니다. 인간은 컴파일러가 어쨌든이 것들에 대해 잘못 될 가능성이 훨씬 큽니다.

+2

불행히도이 함수를 .h 파일에두면,'inline'으로 선언해야합니다. 그렇지 않으면 같은 심볼에 대해 두 번 (또는 그 이상)의 정의에 대한 링크 타임 오류가 발생합니다 – Dewfy

+0

@Dewfy 그는 그가 어쨌든 (누가이 함수가 클래스 또는 네임 스페이스의 일부가 아니라고) 말하지 않을 것이라고 생각하는 동일한 이름을 사용합니다 (어쨌든 문제를 일으킬 것입니다). 그는 분명히 그가 "api.h"라는 파일을 사용하고 있다고 말한다. 즉, 그가 별도로 기능을 구현하는 소스 파일이 없다는 의미입니다. – Aleph

+0

여기에 작성한 것은 클래스 멤버 함수에 적용되지만, @Dewfy는 자유 함수에 대해서는 false라는 점을 지적합니다. –