2012-04-03 3 views
0

나는 다음과 같은 방법 중 하나가 정의 된 C 소스 파일이? C에 관한 나의 작은 지식에 관한 한 '무효'는 아무것도 반환하지 않습니다. 그래서, 그것은 합법적 인 성명서입니까?무효 및 반환 유형

+1

이동을 반환하는 void입니다

void static prettyPrintf(int level) 

입니다, 지금

#define QDECL static 

을 수 있었다 - 그것은으로 확장됩니다 [전화 컨벤션] (http://en.wikipedia.org/wiki/Calling_convention). 반환 유형과는 아무 관련이 없습니다. –

+0

나는 그것에 대해 들어 본 적이 없지만 __cdecl의 별명 인 것 같습니다. –

+0

내 관심사는 여기에 내가 위의 코드를 자바로 포팅하면 이것을 처리해야 하는가? – UVM

답변

1

방금 ​​QDECL의 정의를 확인했습니다. 그것은

#define QDECL __cdecl 

지금 당신의 선언이된다 여전히 무효 반환하는 함수입니다

void __cdecl prettyPrintf(int level) 

입니다.

실제로 QDECL은 함수의 반환 형식을 변경하지 않고 (이론적으로) 다른 형식을 사용할 수 있습니다. 그것은 쉽게 함수 프로토 타입은 여전히 ​​QDECL의 정의를 찾을 기능을

1

QDECL은 호출 규칙을 정의합니다. 이것은 __cdecl 또는 __stdcall과 같은 것으로 평가 될 헤더 파일 중 하나에 정의 된 매크로입니다.

이 함수의 반환 형식에는 영향을주지 않습니다. 함수는 여전히 void 함수입니다. 코멘트에서

당신의 상태 : 여기

내 관심사는 I 포트 경우 자바 위의 코드는, 내가 알아서 할 필요가 없다는 것입니다?

아니요. 이것은 코드의 서로 다른 네이티브 라이브러리 간 인터페이스를위한 문제입니다. 코드가 Java에 있으면 호출 규칙을 무시할 수 있습니다.

+0

런타임 중에 어떤 이점이 있습니까? 성능 향상이나 전문가의 코딩 스타일입니까? – UVM

+0

@UNNI 성능, 이점 또는 코딩 스타일의 문제가 아닙니다. 한 라이브러리와 다른 라이브러리 사이의 이진 계약을 정의해야합니다. 이것은 공유 라이브러리에서 익스포트되는 함수입니다. 따라서 모든 당사자는 함수를 호출 할 때 동일한 규칙을 사용해야합니다.호출 규칙은 이러한 규칙을 성문화합니다. 이것을 읽으십시오 : http://en.wikipedia.org/wiki/Calling_convention –

2

QDECL은 아마도 calling convention 힌트 (예 : __cdecl 또는 __stdcall)로 해석되는 전처리 매크로 일 수 있습니다. 이는 호출 스택에서 매개 변수를 푸시 (push) 및 정리 (clean up)하는 방법을 정의하지만 함수의 리턴 유형을 변경하지는 않습니다. 주로 클라이언트와 다른 기본 호출 규칙을 사용하는 라이브러리를 사용할 때 상호 운용성을 위해 주로 사용됩니다.