>  기사  >  백엔드 개발  >  Go C 소스 코드의 슬래시와 중간점은 함수 네임스페이스 지정 및 연결에 어떻게 기여합니까?

Go C 소스 코드의 슬래시와 중간점은 함수 네임스페이스 지정 및 연결에 어떻게 기여합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-08 12:11:01585검색

How do slashes and middots in Go’s C source code contribute to function namespacing and linking?

Go의 C 소스에서 함수 이름과 프로토타입의 슬래시와 점

race.c 파일의 예시와 같은 Go의 C 소스 코드, 유효성에 대한 의문을 제기하는 비표준 문자 사용을 포함합니다.

C 표준으로의 확장

Go에 사용되는 C 컴파일러는 Plan 9 C 컴파일러에 뿌리를 두고 있으며, 식별자에서 UTF-8 문자를 지원하여 표준을 확장합니다. 주목할만한 확장 중 하나는 middot 문자(·)의 특수 처리입니다.

Middot과 네임스페이스 분리

middot는 Go의 내부 연결 프로세스에서 네임스페이스 구분 기호 역할을 합니다. UTF-8 식별자를 사용하여 C 파일을 컴파일할 때 중간점은 개체 파일에서 점(.)으로 변환됩니다. Go 링커는 이 점을 네임스페이스 구분 기호로 해석합니다.

BOM 없이 UTF-8로 작성된 다음 C 코드를 고려하세요.

<code class="c">void ·Bar1() {}
void foo·bar2() {}
void foo∕baz·bar3() {}</code>

이 코드를 컴파일하면 다음 기호가 생성됩니다.

$ go tool 8c example.c
$ go tool nm example.8
T "".Bar1
T foo.bar2
T foo∕baz.bar3

"Bar1()에는 Go 코드에 표시되도록 대문자 B가 있습니다. 결과 기호 측면에서 Go 함수 "func Bar1() {}"과 동일합니다.

"Empty" 네임스페이스

"" 네임스페이스는 다음과 같습니다. 자리 표시자로 사용되는 특수 네임스페이스입니다.

<code class="go">import examp "path/to/package/example"

func main() {
    examp.Bar1()
}</code>

과 같이 이 네임스페이스를 사용하여 패키지를 가져올 때 링커는 가져오는 동안 ""를 실제 패키지 경로로 바꿉니다. 따라서 연결된 바이너리에서 다음 기호를 찾을 수 있습니다.

T path/to/package/example.Bar1

결론

Go의 C 소스에 있는 슬래시와 중간점은 표준을 확장하여 다음을 제공합니다. 네임스페이스를 지정하고 함수 이름을 구별하는 방법입니다. 이 규칙은 Go 애플리케이션 구축 및 연결을 용이하게 합니다.

위 내용은 Go C 소스 코드의 슬래시와 중간점은 함수 네임스페이스 지정 및 연결에 어떻게 기여합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.