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 중국어 웹사이트의 기타 관련 기사를 참조하세요!