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