2012-03-19 23 views
11

C, C++ ve Java kod tabanında bazı kod temizleme, imzalanmış/imzasız karşılaştırmaları düzeltme, statik analizi çalıştırma vb. Yapıyoruz. Biz alıyoruz uyarılarınC/C++ kodunun temizlenmesi, variadic makrolarla ilgili sorunları ortaya çıkarır

Bir

warning: ISO C does not permit named variadic macros 

Ve onun arkadaşı Ben sorunu çözmek için C99 standard variadic macro kullanılan C kodunda, Şimdi

warning: ISO C99 requires rest arguments to be used 

uyarı, ancak C++ olduğunu kod, doğru cevap nedir? Aynı C99 stilini kullanmak, herhangi bir yanıt görmediğim farklı bir uyarı ile sonuçlanır.

Linux'ta GCC (G ++) 4.4.3 kullanıyoruz.

Orada düzeltmek veya kod belirli bir bölümü için devre dışı bırakabilirsiniz bazı bayrak veya başka bir yöntemdir umuyorum - ama onun hemen hemen her dosyada kullanılan günlük ...

+0

olası yinelenen (http://stackoverflow.com/questions/4786649/are-variadic-macros-nonstandard) –

+1

Kullanımı C++ 11 [Değişkin makroları standart dışı? Are]. GCC komut satırında '-std = C++ 0x' veya' -std = C++ 11' yazın. Ya da sadece uyarıyı göz ardı edin. –

+0

Evet, C++ 11 kullanarak henüz kartlarda yok, sadece yeterince desteklenmiyor (henüz) – Petriborg

cevap

13

Kullanımı için Bu uyarıyı devre dışı bırakmak için gcc seçeneği -Wno-variadic-macros.

Düzenleme: #pragma GCC diagnosticdescribed here kullanın

kodunun bir bölümü için uyarıyı devre dışı ancak genel olarak açık bırakın için (yorumlardan). arasında

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wno-variadic-macros" 

    // Your code and/or include files 
    // (No variadic warnings here) 

#pragma GCC diagnostic pop 
+1

Bir kod bölümü için uyarıyı devre dışı bırakmanın bir yolu var mı, genel olarak mı bırakılsın? Bunu kullanırsam, uyarıyı nasıl devre dışı bırakırım: ISO C99, kullanılacak bağımsız değişkenler gerektirir ' – Petriborg

+1

@Petribourg: http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Diagnostic-Pragmas.html# Diagnostik-Pragmas – Hasturkun

+0

Teşekkürler @Hasturkun Ben – Petriborg