gpt4 book ai didi

c - bash中 "variable indirection"在C中对应或最接近的概念是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:06 25 4
gpt4 key购买 nike

我正在阅读 What is indirect expansion? What does ${!var*} mean?关于 bash 中的变量间接寻址(一般情况,不是异常(exception)情况)。

我对 C 比 bash 更熟悉。

bash中的“变量间接寻址”在C语言中有对应的概念吗?

或者 C 语言中与 bash 中的“变量间接寻址”最接近的概念是什么?

最佳答案

您的问题不清楚,变量(和环境)的概念在 C、bash、Scheme、Python 或 Javascript 中非常不同。

您可能想熟悉一些 Lisp 或 Scheme(例如阅读 SICP ),然后阅读 Queinnec 的 Lisp In Small Pieces (详细解释了 Lisp 解释器和编译器)。另请阅读斯科特的 Programming Languages Pragmatics .然后您将对变量的概念有更广泛的了解(您可能会研究一些编程语言的 operational semantics 和/或 denotational semantics)。

首先,C是一种低级语言。它有指针、指针算法、寻址运算符(一元 &)。它的变量仅在编译时存在(在运行时,大部分位置在存储中 - 例如在堆中或调用堆栈或全局数据段中)。查看ACSL用于不完全描述某些 C 函数行为的规范。

在 Linux 上,您可以使用 dlsym(3) 从名称中获取全局 变量或函数的地址。 ,您可能会使用 dladdr(3) 从其地址获取全局变量或函数的名称

另请阅读 homoiconic语言(C 不是)和 reflection (C 没有)和 type introspection (C 没有;但请参阅 C++ 中的 RTTI)。

一些编程语言(但不是 C)是显式的 & reifying他们的环境(将变量映射到值)和他们的 continuations .在标准 C 中,call stack不可检查或内省(introspection)(这对 garbage collection 很有用)。参见 GNU libc backtraces函数(它们不能用可移植的 C 编写)。方案有call/cc .

请注意,具有可自省(introspection)调用堆栈的语言可以编译成 C 或 C++(参见我的 MELT DSL 作为示例),本质上是通过将每个调用框架具体化为某个本地 struct .. ..

另请阅读 halting problemRice's theorem .在优化编译器或 static program analyzers 方面存在内在限制可以实现(复制自this我的其他回答)。另见 J.Pitrat's blog以及有关元知识和自反/内省(introspection)人工智能系统的书籍。

关于c - bash中 "variable indirection"在C中对应或最接近的概念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34109172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com