免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

現(xiàn)代C語(yǔ)言:C23標(biāo)準(zhǔn)重大更新

 西北望msm66g9f 2024-10-22

雖然沒(méi)有固定標(biāo)準(zhǔn),但一般將C99之后的C語(yǔ)言標(biāo)準(zhǔn)稱為“現(xiàn)代C語(yǔ)言”,目前的最新標(biāo)準(zhǔn)為C23。C語(yǔ)言的演化包括標(biāo)準(zhǔn)C89、C90、C99、C11、C17和C23,C23是C語(yǔ)言標(biāo)準(zhǔn)的一次重大修訂,截至2024年3月,最新版本的gcc和clang實(shí)現(xiàn)了C23的大部分新語(yǔ)言功能,但是部分功能仍然缺失,例如:constexpr 存儲(chǔ)類說(shuō)明符,[[unsequenced]][[reproducible]] 屬性等等。以下是比較重要的變化,完整變化列表可以參閱https://en./w/c/23或ISO標(biāo)準(zhǔn)文檔。

一. 替代

<assert.h>中的static_assert()宏被替代,變成了static_assert關(guān)鍵字;<threads.h>中的thread_local()宏被替代,變成了thread_local關(guān)鍵字;<time.h>中的ctime()函數(shù)棄用,請(qǐng)使用ctime_s()替代;<time.h>中的asctime()函數(shù)棄用,請(qǐng)使用asctime_s()替代;<stdnoreturn.h>_Noreturn標(biāo)識(shí)符均棄用;<stdalign.h>中的alignas()alignof()宏被棄用,請(qǐng)直接使用_Alignas_Alignof關(guān)鍵字;

二. 新增

    • C23新增了三個(gè)十進(jìn)制浮點(diǎn)數(shù)數(shù)據(jù)類型(關(guān)鍵字):_Decimal32、_Decimal64和_Decimal128,對(duì)應(yīng)的后綴是DF、DD和DL。它們的最大值分別如下:

DEC32_MAX 9.999999E96DFDEC64_MAX 9.999999999999999E384DDDEC128_MAX 9.999999999999999999999999999999999E6144DL
    • C23可以使用二進(jìn)制字面量了,使用0b或者0B開(kāi)頭,例如:

int num = 0b1011;
    • C23的字面量可以加分隔符了,增強(qiáng)可讀性,例如:
int num2 = 100'020'050;
    • C23添加了booltrue、false三個(gè)關(guān)鍵字,可以像C++一樣定義布爾類型了:

bool choice = true;
    • C23新加了nullptr關(guān)鍵字,它是nullptr_t類型的,可以被強(qiáng)制轉(zhuǎn)換為任意指針類型(傳統(tǒng)空指針)及布爾類型(可用于邏輯判斷):

void func(int a, nullptr_t b) { //...}
func(10, nullptr);
int *a = nullptr;
if(!a) { printf('A is nullptr');}
  • C23添加了雙括號(hào)屬性(Attributes)了,常用的比如:

[[deprecated]][[nodiscard]][[noreturn]][[maybe_unused]]
  • C23新加了一些預(yù)編譯命令,常用的比如:

#elifdef#elifndef#warning:讓編譯器拋出警告#embed:讓編譯器直接內(nèi)嵌二進(jìn)制數(shù)據(jù)#ifdef FOO /* stuff if there is a defined FOO */#elifdef BAR /* stuff if there is a defined BAR */#elifndef BAZ /* stuff if there is NO defined BAZ */#else /* stuff as the last resort */#endif
static const char song[] = {    #embed <music.wav>  // 內(nèi)嵌二進(jìn)制文件數(shù)據(jù)};
  • C23增加了空初始化列表支持,也就是說(shuō):

int a[5] = { 0 };// 可以直接寫成int a[5] = {};// 等價(jià)于int a[5] = { 0, 0, 0, 0, 0 };
  • C23的宏支持__VA_OPT__了,能更方便地解決使用宏時(shí)末尾符號(hào)的問(wèn)題

  • C23給<stdio.h>中的printf()函數(shù)添加了%b和%B支持,能像打印16進(jìn)制(%x %X)一樣直接打印二進(jìn)制數(shù)據(jù)了;scanf()也增加了%b支持

  • C23給<string.h>增加了memccpy(),與memcpy()類似但遇到某個(gè)特定值時(shí)會(huì)立刻停止復(fù)制

  • C23給<string.h>增加了strdup()與strndup(),用于復(fù)制出一個(gè)新的(部分)字符串

  • C23引入了函數(shù)定義時(shí)的匿名參數(shù),如果一個(gè)參數(shù)因?yàn)槟撤N原因必須被傳遞但卻不被使用,就可以把它設(shè)置為匿名參數(shù):

int func(int num, char*){    return num + 5;}
  • C23引入了constexpr支持,可以定義編譯期變量了

constexpr int c = 10/2;
  • C23將auto關(guān)鍵字的語(yǔ)義進(jìn)行了修改。auto原本作為Storage class specifier時(shí)極少使用,因此auto在C23里變?yōu)榱俗詣?dòng)類型推導(dǎo)關(guān)鍵字。是的,C語(yǔ)言也可以使用auto推導(dǎo)了:

const char* func(){    return 'Hello!';}
auto ret = func();

  • C23增加了對(duì)“X位整數(shù)”的支持,類型關(guān)鍵字為_(kāi)BitInt(),編程時(shí)可以自由指定整數(shù)是幾位。類型對(duì)應(yīng)的字面量后綴是wb/WB和uwb/UWB例如:

// 12位無(wú)符號(hào)整數(shù)unsigned _BitInt(12) a = 0uwb;
  • <uchar.h>中加入類型char8_t,存儲(chǔ)UTF-8字符。類型對(duì)應(yīng)的字面量前綴是u8。例如:

char8_t srt[] = u8'你好!';
  • C23允許給enum(枚舉類型)指定類型了,如果不指定類型則默認(rèn)為int。例如:

enum flags: unsigned long {    err1 = 0xCOOOFFFF;    err2 = 0xC0010000;}
  • C23引入了typeof支持:

int a = 10;typeof(a) b = 5;

三. 刪除

  • <stdlib.h>中的realloc()不再支持size為0的情況,改為未定義行為;

  • C23取消了對(duì)三字母詞(Trigraph)的支持。三字母詞是一種轉(zhuǎn)義字符,由??開(kāi)頭。例如在字面量中使用??)代替]。

  • C23規(guī)定整數(shù)必須使用補(bǔ)碼存儲(chǔ),不應(yīng)再使用原碼和反碼;

  • C23決定不再支持K&R格式。K&R格式是一種老式C語(yǔ)言寫法,例如:

// K&Rint func1(a, b, c)    int a;    char* b;    int c;{        return a + c;}
// 等價(jià)于現(xiàn)代語(yǔ)法int func1(int a, char* b, int c){ return a + c;}

參考:

Modern C :https://inria.ience/hal-02383654

C23 :http://cpp./zh/c/23.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多