gcc - 在源代碼中,c 部分禁用pedantic警告

  显示原文与译文双语对照的内容
87 5

我試圖讓 gcc 關閉我對二進位常量的使用。他們使代碼更加可以讀,但是阻止我使用 -pedantic,但是我遵守了否則。我想有一個 switch 像 -fnobinaryconstwarn 或者類似的( 在查看手冊頁之後,我不認為它存在) 或者使用

#pragma GCC diagnostic ignored"-pedantic" 

要有選擇地禁用pedantic警告,如下面描述的那樣:選擇性地在翻譯單元的部分中禁用GCC警告不幸的是,這似乎並不正常。我有什麼選擇呢?

用於 clang

#pragma GCC diagnostic ignored"-Wpedantic"

行,而上面的行沒有,但它為 gcc 生成了一個錯誤。

时间:原作者:0个回答

80 3

可以能,你可以以使用一個可以以用攜帶型方式實現的宏。下面是一個簡短的例子:

#include <stdio.h>
#define BINARY(N) strtol(#N, 0, 2)
int main()
{
 unsigned int piece = BINARY(10010101);
 printf("%un", piece);
 return 0;
}

理論上,gcc應該能夠優化對strtol的調用,而且你不會失去可讀性。

編輯:似乎gcc並沒有像現在一樣優化strtol調用。但是,你的性能損失應該可以忽略。

cheers!

原作者:
114 3

從gcc手冊處:http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Alternate-Keywords.html#Alternate-Keywords

-pedantic和其他選項會對許多 GNU C 擴展產生警告。你可以在表達式前寫入 __extension__,從而防止在一個表達式內出現這樣的警告。__extension__除了這裡之外沒有效果。

我剛編譯了以下 block,使用 gcc-4.8.2 編譯了 -Wall -Wextra -Wpedantic,並且沒有列印任何警告:

static uint8_t shbl[2][9] = {
{ __extension__ 0b11111111,
 __extension__ 0b11111110,
 __extension__ 0b11111100,
 __extension__ 0b11111000,
 __extension__ 0b11110000,
 __extension__ 0b11100000,
 __extension__ 0b11000000,
 __extension__ 0b10000000,
 __extension__ 0b00000000 },
//BLOCK_RIGHT
{ __extension__ 0b11111111,
 __extension__ 0b01111111,
 __extension__ 0b00111111,
 __extension__ 0b00011111,
 __extension__ 0b00001111,
 __extension__ 0b00000111,
 __extension__ 0b00000011,
 __extension__ 0b00000001,
 __extension__ 0b00000000 }
};

( 當然這很丑,我將把它改為預編譯的宏) 。但對於測試來說,這是可以接受

原作者:
...