亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C+多字符文字

C+多字符文字

C++
森林海 2019-06-28 14:52:29
C+多字符文字我不知道C和C+允許multicharacter literal*不是“c”(類型)INT在C和焦耳在C+中),但“tralivali”(類型)INT!)enum{     ActionLeft = 'left',     ActionRight = 'right',     ActionForward = 'forward',     ActionBackward = 'backward'};標準說:C99 6.4.4.4p10:“包含多個字符(例如‘ab’)的整數字符常數的值,或包含不映射到單個字節執行字符的字符或轉義序列的值,都是實現定義的?!蔽野l現它們被廣泛地應用于C4發動機..但我認為,當我們談論平臺無關的序列化時,它們是不安全的。這也可能令人困惑,因為看起來像字符串。那么,多字符文字的使用范圍是什么,它們對某些東西有用嗎?它們在C+中只是為了與C代碼兼容嗎?它們是否被認為是一個糟糕的特征后藤接線員還是不接線員?
查看完整描述

3 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

我不知道它的使用范圍有多廣,但是“實現定義”對我來說是一個很大的危險。據我所知,這可能意味著實現可以選擇忽略您的字符指定,只要它愿意,只分配正常的增量值。它可能會做一些“更好”的事情,但您不能在編譯器(甚至編譯器版本)中依賴這種行為。至少“Goto”有可預見的(如果不受歡迎的)行為.

反正那是我的2c。

編輯:關于“執行-定義”:

從…Bjarne Stroustrup的C+詞匯表:

定義的實現-C+語義的一個方面是為每個實現定義的,而不是在標準中為每個實現指定的。一個例子是int的大小(必須至少為16位,但可以更長)。盡可能避免實現定義的行為。另請參見:未定義的。TC+PL C.2。

還有.。

未定義-C+語義的一個方面不需要合理的行為。一個例子是取消引用值為零的指針。避免未定義的行為。另見:實現定義。TC+PL C.2。

我相信這意味著評論是正確的:它至少應該編譯,盡管沒有具體說明。還請注意定義中的建議。


查看完整回答
反對 回復 2019-06-28
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

它使在內存轉儲中選擇值變得更容易。

例子:

enum state { waiting, running, stopped };

v.V.

enum state { waiting = 'wait', running = 'run.', stopped = 'stop' };

以下語句之后的內存轉儲:

s = stopped;

看起來可能是:

00 00 00 02 . . . .

在第一種情況下,VS:

73 74 6F 70 s t o p

使用多字符文字。(當然,它是“停止”還是“POTS”取決于字節排序)


查看完整回答
反對 回復 2019-06-28
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

四個字,我見過也用過。它們映射到4個字節=一個32位字。如上所述,它對于調試非常有用。它們可以在帶有INT的開關/CASE語句中使用,這很好。

這(4個字符)是相當標準的(至少由GCC和VC+支持),盡管結果(實際值編譯)可能因實現而異。

但超過4個字符?我不會用。

更新:從C4頁面:“對于我們的簡單操作,我們將提供一些值的枚舉,這是在C4中通過指定四個字符常量完成的”。因此,他們使用4個字符文字,就像我的情況一樣。


查看完整回答
反對 回復 2019-06-28
  • 3 回答
  • 0 關注
  • 428 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號