亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
1387
2022-05-25
目錄
前言
一、官方標準證明(C89、C99、C11)
二、代碼證明
三、一些教材上的錯誤的用法來源 與 K&R(非正式)標準
四、參考博文
五、C語言各個版本PDF下載
前言
筆者之前看到一些教材關于自動類型轉換章節的知識點寫到:1.float型數據參與運算時,先轉換為double型數據再計算;2.float型數據 與 int型數據運算,先將兩者轉換為double型,再運算。與筆者的實操結果不符,于是經過充分的查閱后,發現上述知識點已經是30年前過時老掉牙的用法了。今天筆者通過官方標準、代碼證明、錯誤來源 來充分證明。
一、官方標準證明(C89、C99、C11)
距今為止,C語言官方標準共發展了四代:C89、C99、C11、C17
C89、C99、C11這三代標準中均對于float + float → float 、 int + float → float 作出了明確說明。由于筆者暫未找到C17官方標準文檔,再加之C17相較于C11未發生語法改動,因此本文暫不作C17標準的討論。
1.C89
首先,C89是由美國國家標準協會(ANSI)在 1989年正式公布的標準,該標準定義了C語言和C標準庫。
p.s:
國際標準化組織(ISO)采用了這套C標準,因此ISO C和ANSI C是完全相同的標準。
ANSI于1989年批準該標準,因此通常稱之為C89。
ISO于1990年批準該標準,因而又有C90的叫法。
C89標準中的6.2.1.5章節中有說明:float + float → float 、 int + float → float。如下:
由于我國的C標準采用的是此版本,所以相當于C89的官方中文翻譯版。
2.C99
在后來1999年出臺的C99標準中關于float + float →float、 int + float → 的規定并無變化。(翻譯放在英文原文的下方)
3.C11
2011年出臺的C11標準中6.3.1.8章節中自動類型轉換的規定與C99標準的此部分規定完全一致:
綜上,C89、C99、C11標準中對于float + float → float、 float + int → float 的說明都是一樣的。
因此,自動類型轉換規則應該是下圖這樣的:(C99標準的unsigned與long的混合情況暫不重要 不討論- -)僅供參考歡迎補充
二、代碼證明
編譯器為DEV C++,采用標準為C99。
測試代碼如下:
/* 編譯器:DEV C++ 采用標準:C99 */ #include
三、一些教材上的錯誤的用法來源 與 K&R(非正式)標準
float + float → double,int + float → double的用法來源于由C語言設計者丹尼斯·里奇于1978 年出版的《The C Programming Language》第 1 版。筆者暫未找到第一版的資源。
此時的 C 語言還沒有統一的標準,來自C語言之父的《The C Programming Language》第 1 版可算作“正式”的標準,所以此時的 C 也稱為“K&R” C。
當時的教材就是根據這本書作為標準而編寫的。
10年后的1988年,C語言之父丹尼斯·里奇出版了《The C Programming Language》第 2版(如下面的四張圖),書中將原用法更改為float + float → float , int + float → float 。(原文:修改了“普通算術類型轉換”,特別地,“整型總是轉換為unsigned 類型,浮點數總是轉換為 double 類型”已更改為“提升到最小的足夠大的類型”。)
1989年,考慮到標準化的重要,ANSI(American National Standards Institute)制定了第一個 C 標準,在1989年被正式采用(American National Standard X3.159-1989),故稱為 C89,也稱為 ANSI C。
該標準隨后被 ISO 采納,成為國際標準(ISO/IEC 9899:1990)。
最后,筆者想吐槽一句:30多年前早已被廢棄的用法,這都1202年了,一些教材居然還不修改 ~~
四、參考博文
1. 出現矛盾:c語言中float會自動轉換為double? - 知乎
https://www.zhihu.com/question/51829080/answer/1219171602
2.C語言標準—C89、C99、C11、C17、C2x ...
https://blog.csdn.net/lu_embedded/article/details/115535432
3.C2x將成為C語言的下一個ISO標準?:
https://blog.csdn.net/cpongo4/article/details/89030403
4.c語言之標準(K&RC 、c89、c99、c11)
https://blog.csdn.net/qq_31029351/article/details/53290990
5.如何使DEV C++支持C99標準?
https://blog.csdn.net/qq_40834200/article/details/104714963
五、C語言標準各個版本PDF下載
【阿里云盤】
https://www.aliyundrive.com/s/ZfaViMu1Xru
【百度網盤】
鏈接:https://pan.baidu.com/s/1g6nrTMWUtWr-6VdzGeAjMw
提取碼:1234
--來自百度網盤超級會員V1的分享
C 語言
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。