2013-04-28 82 views
2

我一直在寻找在旅途中运行时runtime.c文件,看到下面的函数定义:在</p> <pre><code>/usr/local/go/src/pkg/runtime </code></pre> <p>的语法和语义转到编译器运行

void 
    runtime∕pprof·runtime_cyclesPerSecond(int64 res) 
    {...} 

int64 
runtime·tickspersecond(void) 
{...} 

并且有很多声明像

void runtime·hashinit(void); 

in runtime.h。

我之前没有看到过这个C语法(特别是那个斜杠似乎很奇怪)。 这是标准C还是一些plan9方言的一部分?

+0

太晚了,但http://stackoverflow.com/questions/13475908/slashes-and-dots-in-function-names-and-prototypes – 2013-04-28 14:33:29

回答

5

·和朋友只是随机的Unicode字符,有人决定把它放在函数名中。模糊的Unicode字符(编辑:Annex D of the C99 standard (pages 452-453 of this PDF)中列出;另请参阅here)在C标识符中的含义与A7(在您的平均Unicode编译器中无论如何)一样合法。

Char| Hex| Octal|Decimal|Windows Alt-code 
----+------+------+-------+---------------- 
∕ |0x2215|021025| 8725|   (null) 
· | 0xB7| 0267| 183|  Alt+0183 

把看起来像运营商,但不是字符(U + 2215 ,特别是类似于U + 2F /(师)过于紧密)的函数名称可以是一个令人困惑的做法,所以我会亲自劝告它。很显然,Go团队中的某个人决定,无论他们将功能名称中包含它们的原因是否超出了混淆的可能性。

编辑:应当注意的是,U + 2215 没有明确由附件D允许如所讨论的here,这可能是一个扩展。)

+1

@downvoter:解释?如果你通知我这个问题,我可以修复它。 – michaelb958 2013-04-28 03:23:40

+0

我不是downvoter,但并非所有的unicode字符在标准(ANSI)C标识符合法。看[这里](http://stackoverflow.com/a/13476074/532430)。 – thwd 2013-04-28 22:38:56

+0

@Tom感谢您的链接。我会编辑。 – michaelb958 2013-04-28 23:19:14

6

这是Go的用于转到包特殊内部语法路径。例如,

runtime∕pprof·runtime_cyclesPerSecond

在包路径runtime∕pprof功能runtime_cyclesPerSecond

''字符是Unicode分割斜杠字符,它将路径元素分开。 '·'字符是Unicode中间点字符,它将程序包路径和函数分开。