2013-08-26 60 views
3

在C在現有的代碼庫,我有以下幾點:字串括號消除

#define MYVAR (1) 

正如你可以看到,這是通過與周圍括號(#定義符合用C的良好做法,儘管我知道在這個情況它沒有區別,因爲值不是 表達式)。無論我想在串列化中使用它。當我這樣做:

#define STRINGIFY(x) #x 
#define TO_STRING(x) STRINGIFY(x) 

const char* mystring = TO_STRING(MYVAR) ; 

結果字符串是「(1)」。我想,以消除括號做簡單:

#define MYVAR 1 

反正在C字串中消除括號?

+0

由於這是在預處理階段,你已經顯式*定義*'MYVAR'被替換爲'(1)'我不相信你在找什麼是可行的。如果是這樣,我無法想象它是如此沒有非常特別的後端。 – WhozCraig

+0

我很害怕這個。謝謝 –

+1

我不認爲用括號括住文字是一定好的做法,它甚至可能讓人相信它是宏語法的一部分。 – Veltas

回答

3

只需使用的STRINGIFY x代替STRINGIFY(x)

#include <stdio.h> 

#define MYVAR 1 

#define STRINGIFY(x) #x 
#define TO_STRING(x) STRINGIFY x 

int main(void) 
{ 
    const char *mystring = TO_STRING(MYVAR); 

    printf("%s\n", mystring); 
    return 0; 
} 

TO_STRING(x)擴展到STRINGIFY (1)時如果MYVAR定義爲1沒有括號你會得到一個編譯時錯誤MYVAR定義爲(1)

+0

我已經證實,這個工程,但你能解釋一下嗎?例如爲什麼我們需要每一個這些步驟。 –