我在 Ubuntu Saucy 上,我希望有人能告诉我在想要的文件中,c 结构解引用运算符 -> 位于......当我
grep -R -> .
我明白
bash: .: Is a directory
当我省略“.”时我明白了
bash: syntax error near unexpected token `newline'
我想用另一种语言重现此功能,但谷歌也没有任何帮助。非常感谢任何帮助。
最佳答案
bash 报告该错误消息,因为在 grep -R -> .
中,>
看起来像是标准输出的重定向,因此 bash 尝试打开 。
作为一个文件,输出将写入其中。失败是因为 .
代表当前目录,而目录不能像文件一样打开。
您可以通过使用引号来避免 bash 以这种方式解释 >
,例如 grep -R "->".
。但是,grep 将 -
解释为指示命令行选项,而不是作为要搜索的模式。您可以通过用反斜杠标记 -
来避免这种情况:
grep -R "\->" .
或使用 --
告诉 grep 选项结束位置:
grep -R -- "->" .
不幸的是,这只会找到包含字符串“->”的文件;它不会区分实现 C ->
运算符的文件。并且会有许多包含该字符串的文件与您正在搜索的内容无关。
我期望 C ->
运算符将实现如下所示:
- 涉及词法分析的某些文件中的某些代码将识别字符串“->”,并通过生成一个标记来响应,该标记可能具有任意名称(由该特定代码的作者选择的名称,而不是由任何特定的强制要求)标准或规范),例如 DEREFERENCE。
- 涉及语法分析的某些文件中的某些代码将通过发出执行取消引用操作的代码(可能采用供编译器自己使用的中间语言)来处理 DEREFERENCE 标记。或者,代码可能会将
a->b
等表达式转换为(*a).b
,然后为后者发出代码。
发出此代码的过程和代码本身都不一定是单个操作。它可能涉及检查左操作数的类型,计算右操作数的偏移量,将表达式与其上下文中的事物相关联(以支持优化),以及生成实际的中间代码。该中间代码可以通过优化或编译器的其他部分进一步处理,并稍后用于生成最终的机器代码。
总之,没有一个地方可以实现 ->
。它是复杂过程的一部分,并与编译器的其他部分交互。
关于c - 在哪里可以找到 -> 解引用运算符的源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19909196/