第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

C是否支持重載?

C是否支持重載?

C
慕仙森 2019-12-03 15:17:48
我只想知道C是否支持超載?當我們使用諸如printf之類的系統(tǒng)函數(shù)時,它們的參數(shù)個數(shù)不同。幫幫我
查看完整描述

3 回答

?
藍山帝景

TA貢獻1843條經(jīng)驗 獲得超7個贊

不,C不支持任何形式的重載(除非您將內置運算符已經(jīng)重載為一種重載形式)。


printf使用稱為varargs的功能工作。您撥打的電話看起來可能過載了:


printf("%d", 12); // int overload?

printf("%s", "hi"); // char* overload?

其實不是。只有一個printf函數(shù),但是編譯器使用一種特殊的調用約定來調用它,其中您提供的任何參數(shù)都按順序放在stack [*]上。printf(或vprintf)檢查格式字符串,并使用該字符串確定如何讀回這些參數(shù)。這就是為什么printf不是類型安全的原因:


char *format = "%d";

printf(format, "hi"); // undefined behaviour, no diagnostic required.

[*]該標準實際上并沒有說它們是通過棧傳遞的,或者根本沒有提到棧,但這是自然的實現(xiàn)。


查看完整回答
反對 回復 2019-12-03
?
holdtom

TA貢獻1805條經(jīng)驗 獲得超10個贊

這完全取決于您如何定義“支持”。


顯然,C語言在核心語言中提供了重載的運算符,因為C中的大多數(shù)運算符都具有重載的功能:您可以將,和指針類型與二進制+一起使用。intlong


然而,在同一時間C不允許你創(chuàng)建你自己的重載函數(shù)和C標準庫也有訴諸不同名稱的功能與不同類型(如使用abs,fabs,labs等)。


換句話說,C在某種程度上已將重載硬編碼到核心語言中,但是標準庫和用戶都不允許自己進行重載。


查看完整回答
反對 回復 2019-12-03
  • 3 回答
  • 0 關注
  • 636 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號