zoukankan      html  css  js  c++  java
  • notices for complex macro definition in C

    notices for complex macro definition in C

    1. space is prohibitted after the backslash() 

    otherwise the below build error will be prompted:

    backslash and newline separated by space

    2. be noticed to -> of structure pointer in macro definition and & in macro reference

    #define CUSTOM_PRINT(pt_examp_struct)      
    do                       
    {                        
    printf("age: %d ", pt_examp_struct->ui1_age);      
    printf("name: %d ", pt_examp_struct->ac_name);      
    } while(0)

    reference:
    T_EXAMP_STRUCT t_examp_struct = {26, "hello world!"}
    CUSTOM_PRINT(&t_examp_struct);

    build error will be prompted when compiling.
    reason: expanding the macro:
    printf("age: %d ", &t_examp_struct->ui1_age);

    t_examp_struct is a structure. -> operator has the higher priority than &. t_examp_struct->ui1_age is wrong.

    correct it:
    #define CUSTOM_PRINT(pt_examp_struct)         
    do                              
    {                              
    T_EXAMP_STRUCT *pt_examp_struct = &t_examp_struct;    
    printf("age: %d ", pt_examp_struct->ui1_age);        
    printf("name: %d ", pt_examp_struct->ac_name);        
    } while(0)

    reference:
    CUSTOM_PRINT(t_examp_struct);

  • 相关阅读:
    一段关于生成器代码的解读
    (十三)内置函数
    (十二)生成器和生成器函数,推导式和表达式
    (十一)函数名的使用,闭包,迭代器
    (十)函数的动态传参,作用域
    (九)函数
    (八)文件操作
    (七)深浅拷贝
    (六)id(),is和==,内存常量
    (五)字典,集合
  • 原文地址:https://www.cnblogs.com/aspirs/p/7117072.html
Copyright © 2011-2022 走看看