是否可以使用挥发性标签?像这样:
volatile coroutine:
或
coroutine volatile:
或者甚至
coroutine: volatile
我想要一个不会被优化触及的标签。那可能吗? GCC扩展是可以接受的。
答案 0 :(得分:1)
volatile
限定符的含义在C 2011(N1570)5.1.2.3中指定6:“严格按照抽象机的规则评估对易失性对象的访问。这是可观察到的行为。该计划。“
此规范不适用于标签,因为标签不是对象,也不是标签。
理论上,语言可以扩展,以便volatile
可以应用于标签。要做到这一点,您需要指定它的含义。说它意味着“不被编译器优化篡改”是不够的,因为它不清楚,使用未定义的术语(“篡改”),并使用不适用的术语(C标准适用于C实现,而不适用于编译器。单词“编译器“甚至没有出现在标准的规范部分。”。
答案 1 :(得分:0)
简短回答:否。
更长的答案:标签只用于指定跳转目标。它们不应保存在寄存器或高速缓冲存储器中(涉及volatile
的事物)。