簡體   English   中英

為什么volatile不屬於sig_atomic_t

[英]Why is volatile not part of sig_atomic_t

在我的平台上(X86,Fedora,gcc 9.1.1), sig_atomic_t是一個普通的int

在C ++標准中, sig_atomic_t始終與volatile限定符一起使用。
我理解為什么需要volatile ,但為什么它不屬於那種類型呢?

就像是:

using sig_atomic_t = volatile int;

這是從C繼承的.C定義雖然允許sig_atomic_t是volatile限定的,但不需要它。 我看過的標准文檔(N1570)中的所有示例用法都是作為volatile sig_atomic_t給出的。

這些天最好使用std:atomic可行時 <atomic>頭中指定的其他功能。 (另請參閱cppreference上的sig_atomic_t 。)

C89說是的

即使存在異步中斷,也可以作為原子實體訪問的對象的整數類型。

volatile未指定,可能是因為在制定第一個標准時,限定符是新事物。

C99增加了“可能有揮發性的資格。

我認為它從那時開始具有向后兼容性,並且“無人問津”,因為信號處理是大多數項目的一個相對較小的部分。

也有人可能在不需要volatile的上下文中使用它(例如,存儲用於與信號處理程序通信的標志的副本)和非GNU C(再次,向后兼容性),基本上不可能映射類型到該類型的不太合格的版本,這使得選擇省略限定符的實現更靈活。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM