首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数名和原型中的斜杠和点?

函数名和原型中的斜杠和点?
EN

Stack Overflow用户
提问于 2012-11-20 22:58:54
回答 2查看 2.9K关注 0票数 18

我是个C新手,在查看Go的源码树时,我发现了这个:

https://code.google.com/p/go/source/browse/src/pkg/runtime/race.c

代码语言:javascript
复制
void runtime∕race·Read(int32 goid, void *addr, void *pc);
void runtime∕race·Write(int32 goid, void *addr, void *pc);

void
runtime·raceinit(void)
{
    // ...
}

斜杠和点(·)是什么意思?这是有效的C吗?

EN

回答 2

Stack Overflow用户

发布于 2012-11-21 01:03:03

这似乎不是标准的C,也不是C99。特别是,即使在C99模式下,它的gccclang都会抱怨点。

这段源代码是由Part 9编译器套件(特别是OS X上的./pkg/tool/darwin_amd64/6c )编译的,它是由Go构建系统引导的。根据this document的说法,在第8页的底部,9计划及其编译器根本不使用ASCII码,而是使用Unicode。在第9页的底部,它指出,任何具有足够高的码位的字符都被认为是有效的,可以在标识符名称中使用。

根本没有预处理的魔力-函数的定义与函数的声明不匹配,只是因为它们是不同的函数。例如,void runtime∕race·Initialize();是一个外部函数,其定义出现在./src/pkg/runtime/race/race.go中;对于void runtime∕race·MapShadow(…)也是如此。

后面出现的函数void runtime·raceinit(void)是一个完全不同的函数,因为它实际上调用了runtime∕race·Initialize();

票数 5
EN

Stack Overflow用户

发布于 2012-11-21 10:56:34

go编译器/运行时是使用最初为plan9开发的C编译器编译的。当您从源代码构建Go时,它将首先构建plan9编译器,然后使用这些编译器构建go。

plan9编译器支持unicode函数名1,Go开发人员在其函数名中使用unicode字符作为伪命名空间。

1看起来这实际上可能是符合标准的:g++ unicode variable name,但gcc不支持unicode函数/变量名。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13475908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档