C语言钻石段位测试题

C语言钻石段位测试题

满分100分的测试题,你能做多少分?答案见链接https://blog.csdn.net/qq_23274715/article/details/106302128

  1. 常数123ul,123.45l中的ull代表什么含义?(2分)

  2. C语言中,数值16用十六进制表示为0x10,哪用二进制如何表示?(2分)

  3. 举例谈谈#define Mul(x,y) x*y这个带参宏的缺点?(2分)

  4. 谈谈#undef预处理命令的应用。(2分)

  5. 谈谈#if,#ifdef,#ifndef的使用区别。(2分)

  6. 如果编译时,不满足某些条件,用户如何向编译器抛出警告或者错误。(2分)

  7. 谈谈函数指针的用途?(5分)

  8. 谈谈弱函数的用途?(5分)

  9. volatile关键字的行为发生在哪个阶段?(编译还是运行?).(5分)

  10. 从函数、变量、作用范围角度谈谈static,extern.(5分)

  11. 什么是可重入函数,什么是不可重入函数?(5分)

  12. 编写一个判断处理器为大端还是小端的函数(大端返回1,小端返回0)。(3分)

  13. 编写一个给二维数组uint8_t data[4][8]分配内存的函数。(5分)

  14. 编写一个变参函数,实现类似printf()功能。(5分)

  15. 编写一个变参调试宏debug()。可以完成下面的打印控制。(5分)

    //可以通过宏控制是否有打印输出
    #define MY_DEBUG_ENABLE 1
    void main(void){
        debug(MY_DEBUG_ENABLE,"hello word\n");
        debug(MY_DEBUG_ENABLE,"%d\n",1);
    }
  16. 下面的这段程序,打印结果是什么?(5分)

    void main(void)
    {
        int32_t  a = -10;
        uint32_t b =  5;
    
        if(a > b){
            printf("a>b\n");
        }
        else{
            printf("a<=b\n");
        }
    }
    
  17. 32bit小端处理器上,下面的两个结构体各占多大内存,请画出内存分布图。(5分)

    struct Base1{
        int a1;
        long a2;
        char a3;
    };
    struct Base2{
        int a1;
        struct Base1 a2;
        char a3;
    };
  18. 下面两个函数中使用const有何好处。(5分)

    int Sum(const int *pBuff,int num){
    
    }
    
    void Test(void){
        const uint8_t IdOffset = 16;
    }
    
  19. 下面程序函数WaitThread()中的循环能跳出吗?为什么?(5分)

    char DataReg;
    
    /* 等待线程 */
    void WaitThread(void)
    {
        DataReg = 1;
        while(DataReg){
        }
    }
    /* 其他线程 */
    void OtherThread(void)
    {
        DataReg = 0;
    }
  20. 下面程序中***p5中的内容是什么?(5分)

    void main(void)
    {
        /* []中的值为地址中的内容,如 0x0000 [10] 为地址 0x0000中的内容10 */
        int a   = 10;               //分配地址 0x0000 [10]
        int *p1 = &a;               //分配地址 0x0004 [0x0000]
        int **p2 = &p1;             //分配地址 0x0008 [0x0004]
        int ***p3 = &p2;            //分配地址 0x000c [0x0008]
        int ****p4 = &p3;           //分配地址 0x0010 [0x000c]
        int *****p5 = &p4;          //分配地址 0x0014 [0x0010]
  21. 分析下面程序的打印结果。(5分)

    
    #define TO_STRING(str) #str
    #define TO_CONNECT(arg1,arg2) arg1##arg2
    #define TO_CONNECT_STRING(arg1,arg2) TO_STRING(arg1##arg2)
    
    void main(void)
    {
        char *pstr = TO_STRING(guoweilkd);
        char *pstr1 = TO_STRING("guoweilkd");
    
        int  value = TO_CONNECT(1,2);
    
        printf("%s,%s,%d\n",pstr,pstr1,value);
    
        char *pstr2 = TO_CONNECT_STRING(guoweilkd,123);
        printf("%s\n",pstr2);
    }
  22. 在下面程序中使用spritf()函数将一个浮点数转换为字符串.其中浮点数的小数位由输入参数决定。(5分)

    char *GetfloatStr(char *pBuff,float value,int nbit){
        //user code
    }
  23. 下面程序的__attribute__属性有什么作用。(5分)

    static int b __attribute__((section(".endaddr")));
    uint32_t __attribute__((section(".endaddr"))) ProgramEndAddr(void)
    {
    return (uint32_t) ProgramEndAddr;
    }

关于技术交流

此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。二维码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theboynoName

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值