SORU
13 EKİM 2009, Salı


Nasıl bir değeri göstermek için ne yapmalıyım #derleme zamanında nasıl tanımlarız?

Benim kodu kullanıyor ne düşündüğünü anlamaya çalışıyorum. Böyle bir şey yapmak istiyorum:

#error BOOST_VERSION

ama bu kadar basit BOOST_VERSİON genişletmek değil.

Bunun dışında çalıştırma programından baskı yapabileceğimi biliyorum, Ve bu kadar basit giriş ve çıkış cevabı bulmak için bakabileceğimi biliyorum. Derleme sırasında bunun için bir çözüm bulunması faydalı olabilir gibi hissediyorum.

CEVAP
19 NİSAN 2012, PERŞEMBE


BOOST_PP_STRINGIZE C normal C için değil , mükemmel bir çözüm gibi görünüyor

İşte GNU CPP: benim çözüm

/* Some test definition here */
#define DEFINED_BUT_NO_VALUE
#define DEFINED_INT 3
#define DEFINED_STR "ABC"

/* definition to expand macro then apply to pragma message */
#define VALUE_TO_STRING(x) #x
#define VALUE(x) VALUE_TO_STRING(x)
#define VAR_NAME_VALUE(var) #var "="  VALUE(var)

/* Some example here */
#pragma message(VAR_NAME_VALUE(NOT_DEFINED))
#pragma message(VAR_NAME_VALUE(DEFINED_BUT_NO_VALUE))
#pragma message(VAR_NAME_VALUE(DEFINED_INT))
#pragma message(VAR_NAME_VALUE(DEFINED_STR))

Tanımlar neden yukarıda:

test.c:10:9: note: #pragma message: NOT_DEFINED=NOT_DEFINED
test.c:11:9: note: #pragma message: DEFINED_BUT_NO_VALUE=
test.c:12:9: note: #pragma message: DEFINED_INT=3
test.c:13:9: note: #pragma message: DEFINED_STR="ABC"

İçin< . "interger olarak tanımlanan",< . "dizesi tanımlanan"ve< . "ama hiçbir değeri tanımlı"değişkenler , sadece iyi çalışır. Sadece için< . "" . tanımlanmamış ^güçlü değişken, orijinal değişken adı olarak bulundular. Bunun için kullanılan var ya da birisi daha iyi bir çözüm sağlayabilir belki de.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Developers

    Android Deve

    9 Kasım 2007
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013
  • ShayLoss

    ShayLoss

    5 Kasım 2009