我在哪里可以找到 - >的源代码。解除引用运算符?

时间:2013-11-11 14:51:49

标签: c struct dereference

我在Ubuntu Saucy上,我希望有人能在想要文件中告诉我c struct dereference运算符 - >在......我是

grep -R -> . 

我得到了

 bash: .: Is a directory

当我省略'。'时我得到

bash: syntax error near unexpected token `newline' 

id喜欢用另一种语言重现此功能,但谷歌也没什么......非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

您的grep编写不正确:

grep -R -> . 

它在做什么?像这样:

grep -R - > . 

现在可能会更清楚了一下:它会查看“ - ”(这可能是stdin,我不确定grep,但许多工具使用 - 表示stdin)。它将把结果写成“。”除了是一个目录(具体而言是当前目录)。所以它失败了。

如果你想搜索 - >运算符,您可以使用:

grep -R -- "->" . 

“ - ”是一个相当标准的Unix东西,意思是“在此之后停止处理选项”,并将“ - >”放入在引号中应该阻止shell将其解释为两个标记(stdin加上重定向)。

无论如何,这一切都不重要,因为你永远找不到运营商的源代码 - >。它是在语言中定义的,实现它的源代码完全在您的编译器中。所以,如果你真的想要,请下载你的编译器的源代码并在那里grep ...即使这样,通过grepping“ - >”也可能找不到它。

答案 1 :(得分:0)

运算符不是库类或函数,它没有“定义”(除非我们讨论重载运算符)。

编译器解析符号并创建适当的代码,但不是仅仅替换“ - >”用某种方法。

答案 2 :(得分:0)

-中的grep指定了一个新的命令选项。所以,你需要逃避它。有一个方便的grep语法grep -- "->"将搜索->

但是,我怀疑你会找到任何东西,因为运算符不是方法。

答案 3 :(得分:0)

bash报告该错误消息,因为在grep -R -> .中,>看起来像标准输出的重定向,所以bash尝试打开.作为文件,输出将被写入。这失败是因为.代表当前目录,并且无法以与文件相同的方式打开目录。

您可以使用引号(例如>)来避免bash以这种方式解释grep -R "->" .。但是,然后grep将-解释为指示命令行选项,而不是作为要搜索的模式。您可以通过使用反斜杠标记-来避免这种情况:

grep -R "\->" .

或使用--告诉grep选项结束的位置:

grep -R -- "->" .

不幸的是,这只会找到包含字符串“ - >”的文件;它不会区分实现C ->运算符的文件。并且会有许多包含该字符串的文件与您要搜索的内容无关。

我希望C ->运算符的实现方式如下:

  • 词法分析中涉及的某些文件中的某些代码会识别字符串“ - >”,并会通过生成一个令牌来响应,该令牌可能具有任意名称(由此特定代码的作者选择,不是任何名称特殊标准或规范),如DEREFERENCE。
  • 语法分析中涉及的某些文件中的某些代码将通过发出执行取消引用操作的代码(可能是编译器自己使用的中间语言)来处理DEREFERENCE令牌。或者,代码可能会将a->b等表达式转换为(*a).b,然后为后者发出代码。

发出此代码的过程和代码本身都不一定是单个操作。它可能涉及检查左操作数的类型,计算右操作数的偏移量,将表达式与其上下文中的事物相关联(以支持优化),以及生成实际的中间代码。该中间代码可以通过优化或编译器的其他部分进一步处理,稍后将用于生成最终的机器代码。

总之,没有一个地方可以实现->。它是复杂过程的一部分,并与编译器的其他部分进行交互。