【发布时间】:2021-04-23 20:00:59
【问题描述】:
我已经看到一些 Rust 代码库使用 #[repr(C)] 宏(这就是它的名字吗?),但是,我找不到太多关于它的信息,但它设置了类型布局在内存中以与“C”相同的布局。
这是我想知道的:这是一个仅限于编译器而不是语言本身的预处理器指令(即使没有任何其他用于 Rust 的编译器前端),以及为什么 Rust 甚至有内存布局与Cs不同? (只是我从来不需要用另一种语言来做这件事)。
这是一个很好的例子来说明我的意思:如果有人为 Rust 创建另一个编译器,他们是否需要实现这个宏,或者它是编译器特定的东西?
【问题讨论】:
-
github.com/rust-lang/reference/blob/…
Is repr(C) a preprocessor directive?Rust 有预处理器?你心目中的“预处理器”是什么样的? -
@KamilCuk 我认为我在这里使用了错误的术语,如果您知道正确的术语,请务必纠正我,但我的意思是编译器前端会预处理应用此宏的结构这个布局,然后进行编译/优化。
-
当然可以,这就是编译器所做的——处理文本然后生成代码。
-
are they required- 好吧,没有“防锈警察”会来惩罚你不执行它.... -
只是一个小旁注,
#pragmais part of C。虽然#pragma是预处理指令,但编译器必须在预处理器之后做出决定,因为函数中的#pragma STDC FENV_ACCESS ON只影响该函数,因此它需要知道函数何时结束,这不是预处理器所做的。跨度>