我查看了go运行时中的runtime.c文件
/usr/local/go/src/pkg/runtime并看到了以下函数定义:
void
runtime∕pprof·runtime_cyclesPerSecond(int64 res)
{...}和
int64
runtime·tickspersecond(void)
{...}有很多像这样的声明
void runtime·hashinit(void);在runtime.h中。
我以前没有见过这种C语法(特别是带斜杠的语法看起来很奇怪)。这是std C的一部分还是某种plan9方言?
发布于 2013-04-28 11:10:10
∕和·以及朋友仅仅是随机的Unicode字符,有人决定将其放入函数名中。晦涩难懂的Unicode字符(编辑:Annex D of the C99 standard (pages 452-453 of this PDF)中列出的;另请参阅here)在C标识符中与A或7一样合法(无论如何,在支持Unicode的普通编译器中)。
Char| Hex| Octal|Decimal|Windows Alt-code
----+------+------+-------+----------------
∕ |0x2215|021025| 8725| (null)
· | 0xB7| 0267| 183| Alt+0183在函数名中放置看起来像运算符但不像运算符的字符(特别是U+2215 ∕,与U+2F / (除法)非常相似)可能是一种令人困惑的做法,因此我个人建议不要这样做。显然,Go团队中的一些人认为,无论他们有什么理由将它们包含在函数名称中,都超过了混淆的可能性。
(编辑:应该注意的是,附录D并没有明确允许U+2215 ∕。正如所讨论的here,这可能是一个扩展。)
发布于 2013-04-28 11:34:38
它是Go包路径的特殊内部语法。例如,
runtime∕pprof·runtime_cyclesPerSecond
是包路径runtime∕pprof中的函数runtime_cyclesPerSecond。
“∕”字符是Unicode分隔斜杠字符,用于分隔路径元素。“·”字符是Unicode中间的点字符,用于分隔包路径和函数。
https://stackoverflow.com/questions/16259087
复制相似问题