2011-04-27 89 views
0

可能重複:
Does C support overloading ?printf支持函數重載在C中?

我想,要知道,如果printf的支持功能,使用C超載,因爲相同的printf函數可以在不止一種方式在一個C程序中使用。

+2

你的問題是根本不清楚。請給出一個代碼示例,說明您希望能夠做什麼。 – 2011-04-27 10:06:39

+1

printf使用可變參數列表。它與函數重載不一樣。 – forsvarir 2011-04-27 10:08:17

+0

這是一個閱讀問題,儘管措辭很差。 – 2011-04-27 10:09:08

回答

3

printf() C是一個可變函數,它可以被認爲是一種重載形式。與C++,Java,C#等語言中的重載函數不同,一個可變參數函數不是類型安全的,這就是爲什麼他們有些不悅。

+1

我只想downvote,variadic函數和函數重載是非常不同的東西(只有一個printf函數,而不是不同的實現取決於參數)。你滑動的邊緣與你的「可以被認爲是」:) :) – 2011-04-27 10:12:11

+2

@Binary各種各樣的事情可以被認爲是最通用形式的重載。如果你想把重載作爲嚴格意義上的C++重載函數,那麼沒有什麼不同。但正如多元主義可能意味着很多事情一樣,超載也是如此。 – 2011-04-27 10:14:41

+1

同意,但是我可以將貓和狗視爲最常用形式的「動物」,但它不會幫助我的愛爾蘭獵狼犬抓住老鼠:)只是說我認爲_這種情況比一般人更具體。 。 。不幸的是,我不擁有愛爾蘭獵狼犬。 – 2011-04-27 10:58:33

1

C沒有基於簽名的多態性,所以你不能這樣做。有幾種方法可以列出here

更重要的問題是爲什麼你會想這樣做?爲什麼printf對你來說不夠通用?

7

如果你的意思

printf("something: %d\n", number); 
printf("something else: %d, %s\n", number, string); 

此無關超載的區別。這只是一個 variadic function

2

如果你問如何printf採取不同的數量和類型的論證,然後不,它不是函數重載。函數可以被定義爲可變參數列表。

stdarg.h與可變arguement工作列出