【问题标题】:is primitive data type in c macro?是c宏中的原始数据类型吗?
【发布时间】:2009-11-08 16:15:50
【问题描述】:

在c中,诸如“int”“long”“char”“unsigned”之类的原始数据类型......都是宏吗? 如果是这样,它们在哪里定义?以及它们是如何实现的,例如“int”类型?

【问题讨论】:

    标签: c types


    【解决方案1】:

    它们不是宏,它们只是被编译器转换成适当的数据存储和操作。

    例如当你在你的程序中有:

    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_tuintptr_tptrdiff_t)被实现为 typedef 或宏。但是编译器需要一些“原始”或“基本”类型(如charint等),它们是编译器内置的,而不是在头文件中定义的。

      【讨论】:

        【解决方案3】:

        它们不是宏。每种编程语言都需要不是宏的主要类型,而是语言语法树的一部分。编译器会将这些原始数据类型直接转换为适当的二进制表示。

        我认为您也误解了宏的使用方式。有些类型是通过 typedef 由其他类型定义的。

        typedef unsigned short BOOL;
        

        可以使用宏来执行此操作,但这不会为您提供完整的编译器检查,这就是您应该更喜欢 tyepef 的原因。

        【讨论】:

          【解决方案4】:

          intcharfloat 等原始数据类型在 C 标准中定义,编译器本质上知道它们。其他类型如uint32_t 是在头文件中定义的类型定义,它们是根据原始类型定义的。

          【讨论】:

            猜你喜欢
            • 2018-01-07
            • 2018-06-26
            • 2015-01-01
            • 1970-01-01
            • 2022-10-14
            • 1970-01-01
            • 1970-01-01
            • 2016-01-21
            • 1970-01-01
            相关资源
            最近更新 更多