回答
是的,有list.h。它是一個循環鏈表:
以下鏈接包含如何使用它的example。
的list.h
包含與像定義循環鏈表的管理的所有功能,加入了頭,添加在尾部,刪除的foreach功能瀏覽循環鏈表...
這是針對Linux內核的一個答案,它不是關於它如何在「C」中的一般答案。我覺得很奇怪,它被選中了。 – unwind
@unwind:我知道在內核linux中使用了list.h。但在鏈接中,我給list.h的這個答案是list.h的另一個發行版,它在linux的用戶空間中工作,並且它是可移植的。我在我開發的所有用戶空間應用程序中使用它,並且它工作正常。 – MOHAMED
@unwind請參閱本段中的鏈接我給出的答案作爲示例http://isis.poly.edu/kulesh/stuff/src/klist/'只需很少的修改(刪除硬件預取列表項),我們可以在我們的應用程序中也使用這個列表這個文件的可用版本可以在這裏下載。' – MOHAMED
C有沒有像C++這樣的模板,儘管你可以通過使用#define
宏來實現類似於「聰明」(或者WTFey,取決於你如何看待它)的東西。
然而,看看例如GLib如何爲singly linked lists或doubly linked lists做。
+1或「WTFey」 – Brendan
模板是C++的功能,但如果你想單電荷或雙鏈表的類型無關的實現,它可以與宏的幫助下進行,也可以簡單地存儲void*
指針在你的結構。
當然,在互聯網上有很多這樣的實現。 @MohamedKALLEL和@hyde已經給出了一個來自Linux內核和GLib的例子,我想添加一個關於漂亮的小型庫uthash的說明。
它實現在C語言的哈希表,但它也有一個utlist.h實現單電荷和雙向鏈接(甚至圓形)上的宏列出完全。也就是說,您可以簡單地使用此文件,將其包含在內,並按原樣使用這些宏,或者根據需要對其進行修改。另外不錯的是,你可以使用它的任何數據結構:它只需要有next
指針(在雙重鏈接的情況下爲prev
)。
P.s.但總是記得使用宏時:大功率帶來很大的責任。宏是強大的,但可能會變得非常不安全和不可讀。謹防!
您好,我不知道鏈表但對於一個模板函數u大概可以使用宏或具有不同數量的參數作爲一個例子該程序的功能
#include <stdarg.h>
#include <stdio.h>
#define INT 0
#define STR 1
void foo(int type, ...)
{
va_list ap;
int i;
char *s;
va_start(ap, type);
switch(type) {
case INT:
i = va_arg(ap, int);
printf("INT: %i\n", i);
break;
case STR:
s = va_arg(ap, char *);
printf("STR: %s\n", s);
break;
default:
break;
}
va_end(ap);
}
#define SWAP(type, a, b) { \
type t; \
t = a; \
a = b; \
b = t; \
}
int main(void)
{
foo(INT, 3);
foo(STR, "baz");
int ia = 0, ib = 3;
SWAP(int, ia, ib);
printf("%i %i\n", ia, ib);
float fa = 0.5, fb = 3.14;
SWAP(float, fa, fb);
printf("%f %f\n", fa, fb);
return 0;
}
時會產生輸出
INT: 3
STR: baz
3 0
3.140000 0.500000
- 1. 編程語言C
- 2. C編程語言
- 3. 板載Symbian編程語言
- 4. C編程語言是否支持SQL語句
- 5. 什麼是模板語言?
- 6. 是否有高級語言編譯爲低級語言(如C)的術語?
- 7. CMS是否獨立於編程語言?
- 8. 什麼是開發Wordpress模板所需的編程語言?
- 9. CUDA是否有彙編語言?
- 10. 是否有一個Django模板語言等價於Python的range()?
- 11. 是否有一種與Django模板語言幾乎相似的PHP模板語言?
- 12. 標記語言是否被視爲編程語言?
- 13. C語言是否有運行時?
- 14. 或C++模板編程語句
- 15. D編程語言是否有GNU Make-type程序?
- 16. CGI應用程序是否有優選的編程語言?
- 17. 我的編程語言C#
- 18. RPC編程語言C
- 19. CGI C語言編程
- 20. C語言編程指南
- 21. 是否有任何編程語言具有for-while循環?
- 22. 無模板模板與模板語言中更多功能的編程原理是什麼?
- 23. Joomla模板語言
- 24. 是否有任何8051彙編語言C代碼轉換器
- 25. 是否有像C++這樣的編譯語言的Web框架?
- 26. C++中的模板編程
- 27. 函數式編程語言是否適合圖形編程?
- 28. 是否有交叉編程語言字符串格式?
- 29. 是否有編程語言來創建UML圖?
- 30. 是否有可能確定.NET程序集編寫的語言?
這是什麼意思的「模板」在這種情況下? – cnicutar
模板是C++編程語言的一個功能,它允許函數和類使用泛型類型進行操作。 – 2013-02-07 08:10:56
非常感謝你 – user1722022