我在Ubuntu Saucy上,我希望有人能在想要文件中告诉我c struct dereference运算符 - >在......我是
grep -R -> .
我得到了
bash: .: Is a directory
当我省略'。'时我得到
bash: syntax error near unexpected token `newline'
id喜欢用另一种语言重现此功能,但谷歌也没什么......非常感谢任何帮助。
答案 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 ->
运算符的实现方式如下:
a->b
等表达式转换为(*a).b
,然后为后者发出代码。发出此代码的过程和代码本身都不一定是单个操作。它可能涉及检查左操作数的类型,计算右操作数的偏移量,将表达式与其上下文中的事物相关联(以支持优化),以及生成实际的中间代码。该中间代码可以通过优化或编译器的其他部分进一步处理,稍后将用于生成最终的机器代码。
总之,没有一个地方可以实现->
。它是复杂过程的一部分,并与编译器的其他部分进行交互。