在c中,是基本數據類型,如「int」「long」「char」「unsigned」...所有的宏? 如果是這樣,他們在哪裏定義?它們是如何實現的,如「int」類型?是c宏中的原始數據類型?
1
A
回答
6
它們不是宏,它們只是被編譯器轉換成適當的數據存儲和操作。
例如,當你在你的程序有:
int i;
i=5
i+=7;
編譯器將其轉換爲類似於這樣:
Allocate sizeof(int) bytes in the stack
Put the number 5 in the allocated space
Retrieve the number on the allocated space, add 7 to it, and save it again at the same location
2
一些標準的類型(通常,像size_t
或uintptr_t
或ptrdiff_t
)被實現爲typedef或宏。但編譯器需要一些「原始」或「基本」類型(如char
,int
等),它們是內置於編譯器中的,並且未在頭文件中定義。
0
的基本數據類型等int
,char
,float
等被C標準中定義的,並且編譯器知道他們本質。其他類型如uint32_t
是在頭文件中定義的typedef,它們是用原始類型定義的。
1
它們不是宏。每種編程語言都需要不是宏的主要類型,而是語言語法樹的一部分。編譯器會將這些原始數據類型directyl轉換成適當的二進制表示形式。
我想你也誤解了如何使用宏。有些類型是通過typedef通過其他類型定義的。
typedef unsigned short BOOL;
您可能做到這一點與宏但是這不會給你完整的編譯器檢查,這就是爲什麼你應該更喜歡tyepef。
相關問題
- 1. 目標C:原始數據類型
- 2. C#原始數據類型VS .NET CTS類型
- 3. 實體成員應該是原始數據類型還是java數據類型?
- 4. C++中的跨平臺原始數據類型
- 5. C中原始數據類型的範圍?
- 6. 什麼是C++中最大的數字原始數據類型(舊/新標準)
- 7. 查詢長的原始數據類型
- 8. 原始數據類型在Java中是線程安全的
- 9. 使用原始數據類型創建自定義類Obj-c
- 10. 關於mybatis的參數類型爲原始數據類型?
- 11. NSUserDefaults和原始數據類型?
- 12. Excel - 恢復原始數據類型
- 13. 原始數據類型Vs的對象在目標C
- 14. 參數對象的類型[類型]不是原始的
- 15. Struts 2原始類型的數據傳輸和類型轉換
- 16. 不是原始類型間的數據庫遷移
- 17. 什麼是「符號」的原始數據在JavaScript類型
- 18. C#初始化整型數據類型
- 19. 在C++函數中傳遞原始數據類型的最佳做法
- 20. 原始數據類型的數據庫返回值(Kohana ORM)
- 21. 與原始類型
- 22. 原始類型是否存在於C#中?
- 23. C中的原始數據類型用於表示CPU-arch的WORD大小
- 24. C#,反射和原始類型
- 25. 原始類型通過C++和CLI
- 26. 轉換泛型參數到原始數據類型
- 27. Linux的數據模型和原始類型大小
- 28. 整型爲原始類型
- 29. java中的原始數據類型鑄造 - 內部邏輯
- 30. 描述原始類型數據的類版本