문제

C에서 이름을 바르는 기호를 부르는 방법?

module.name:version

void* function(TypeSig); // Type of the function

C. Calling Convention은 동일합니다. 그것은 단지 내가 내보내는 기호 내부의 버전과 모듈 경로에서 맹글해야하며, C와 동일한 식별자 규칙이 있으므로 밑줄 만 사용할 수는 없습니다.

도움이 되었습니까?

해결책

IIUC, 당신은 자신의 언어를 정의하고 있으며 적절한 이름 Mangling 알고리즘을 찾고 있습니다.

Intel et.al.을 사용하고 싶을 수도 있습니다. Itanium 이름 Mangling 알고리즘, 모든 플랫폼에서 G ++에서 사용합니다. 특정 사례의 경우 C ++ 선언이 마치 마치 각 이름을 담을 수 있습니다.

namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
  void *function(int){}
}}}

그것은 맹글 할 것입니다

_ZN6module4name4V1_08functionEi

모든 기호 가이 알고리즘을 사용하므로 서로 충돌 할 수 없습니다. 그들은 또한 불리는 표준 C 함수와 충돌 할 수 없습니다. _ZN6module4name4V1_08functionEi, _z (또는 _uppercase)로 시작하는 모든 이름은 구현 (C)에 예약되어 있으므로. G ++에서 편리한 호출성을 원한다면이 정확한 규칙을 사용할 수 있습니다. 그렇지 않으면 당신은 Z와 다른 편지를 선택합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top