將C語言宏定義數值轉換成字符串!


將C語言宏定義轉換成字符串!

摘自:https://blog.csdn.net/happen23/article/details/50602667

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/happen23/article/details/50602667

適用場景舉例

流媒體處理系統中,采樣率是個很重要的參數,很多地方都要用,如果用來分配內存,則

 

#define SAMPLE_RATE 16000

如果用來配置第三方庫,則

 

#define SAMPLE_RATE "16000"

這樣每次改采樣率都要改兩處地方,容易遺漏

 

網上搜到第一篇文章,匆忙試了試,並未達到我想要的效果,然后在GNU的官網找到了第二篇文章,看懂了,原來第一篇文章的技巧(也是翻譯第二篇文章的微笑)僅適用於宏函數的場景

 

還好天無絕人之路,第二篇文章末尾3段,講述了實現我想要效果的方法,就是二級stringfication

 

  1.  
    #include <stdio.h>
  2.  
     
  3.  
    #define SAMPLE_RATE 16000
  4.  
    #define STR1(R) #R
  5.  
    #define STR2(R) STR1(R)
  6.  
     
  7.  
    int main()
  8.  
    {
  9.  
    printf("sample rate = " STR2(SAMPLE_RATE) "\n");
  10.  
    return 0;
  11.  
    }

運行輸出

 

sample rate = 16000

注意:

二級stringfication會將宏定義原樣輸出,即,如果16000加上括弧(有經驗的程序員都懂),則STR2輸出的也是帶括弧的字符串,這通常不是你想要的

可以這樣繞過:

給SAMPLE_RATE定義一個別名,並給別名加上括弧,在需要整型時用別名,在需要字符串時用原名

 

  1.  
    #include <stdio.h>
  2.  
     
  3.  
    #define SAMPLE_RATE_CONFIG 16000
  4.  
    #define SAMPLE_RATE (SAMPLE_RATE_CONFIG)
  5.  
    #define STR1(R) #R
  6.  
    #define STR2(R) STR1(R)
  7.  
     
  8.  
    int main()
  9.  
    {
  10.  
    printf("sample rate = %d\n", SAMPLE_RATE);
  11.  
    printf("sample rate config = %s\n", STR2(SAMPLE_RATE_CONFIG));
  12.  
    return 0;
  13.  
    }

運行輸出

 

sample rate = 16000
sample rate config = 16000

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM