我想在C中編寫一個函數,它將接受任何類型的數據類型,如int,char,float或任何其他數據類型,並對他們。因爲這在C++中是可行的,在C中可能嗎?是否有可能在C中實現temeplatization,因爲它可能在C++中
回答
您可以創建並接受union
,也可以使用通用的void*
指向數據。但是C不支持C++中的模板。
我有一個疑問,要使用調用函數內部的值,我們必須知道從調用函數傳遞的值的數據類型,因爲我們不能使用void指針而不用將其轉換爲正確的數據類型。所以這不是完整的模板。如果有什麼不對,請原諒我。 – Prak
關於你可以在C中做的唯一事情是宏,模板的可憐表兄弟。例如:
#define max(a, b) ((a) < (b) ? (b) : (a))
注意,這有一個巨大的問題...宏參數進行評估不止一次。例如:
max(i+=1, i);
擴展爲:
((i+=1) < (i) ? (i+=1) : (i));
那表情的結果可能是各種對各種編譯有趣的事情。
因此,宏是模板的真正不好的替代品。你可以使用與他們不可知的類型的'函數'。但他們帶來了一些障礙和陷阱,使他們幾乎沒有任何真正重要的用處。它們也相當「毛茸茸」,讓你的代碼比模板更難理解。
我剛剛給出的max
例子可能看起來並不那麼毛茸茸(儘管對參數的加倍評價肯定是令人驚訝且難以處理的東西),但here is an example of declaring something like a templated vector type with macros, and it is obviously hairy。
是的,它可以通過使用宏來實現。請參閱 http://www.flipcode.com/archives/Faking_Templates_In_C.shtml
您可以使用...
與varargs
功能
我猜它必須是一個空指針
void *p;
只是強制轉換和使用它。你問就是爲什麼在C++
介紹閱讀您的評論我想在您需要的參數發送可變
func(void *p, int) \\ second argument must be a datatype use sizeof to find the datatype
- 1. 是否有可能實現在C#
- 2. 是否有可能#include在C++類中?
- 3. 是否有可能在c#中「鏈」EventHandlers?
- 4. 是否可以在C#中實現mixin?
- 5. 是否有可能在運行時交換C函數實現?
- 6. 是否有可能?(C++)
- 7. 是否有可能實現這個藍牙功能在iOS中
- 8. 是否有可能在jQuery中實現人工智能概念?
- 9. 是否有可能強制接口實現在C#中是虛擬的?
- 10. 是否有可能在Objective-C
- 11. 是有可能,而在C++
- 12. 是否可以實現[]我自己並在C#中使用它?
- 13. 它甚至有可能實現在C#文本框AutoCompleteMode(WPF)
- 14. 是否有可能在C#中爲Android編寫應用程序?
- 15. 是否有可能在C#中爲泛型創建「此類型」?
- 16. 是否有可能在c#中聲明一個數組爲readonly?
- 17. 在c中的strchr實現是否有可能使這項工作?
- 18. C++ - 是否有可能在單元測試中實現內存泄漏測試?
- 19. 是否有可能在Objective-C中創建@dynamic所有可能的屬性?
- 20. 是否有可能在Java中有效地實現seqlock?
- 21. 是否有可能實現MySQL查詢
- 22. 是否有可能在ASP.NET Webforms中實現HTML5等新標準?
- 23. 是否有可能在jQuery中實現多個?
- 24. 是否有可能在GPU中實現霍夫曼解碼?
- 25. 是否有可能在asp.net 2010網頁中實現html5 標籤
- 26. 是否有可能在Java中運行時實現接口?
- 27. 是否有可能在PHP中延遲變量實現(?)/承認(?)?
- 28. 是否有可能在javascript中實現等效的setTimeout()?
- 29. 是否有可能在ASP.NET MVC中實現X-HTTP-Method-Override?
- 30. 是否有可能在C#中有額外的(忽略)屬性?
無效的數據類型Ç多數民衆贊成的限制*?..... ............. –