Aracılığıyla paylaş


# define yönergesi (c/C++)

#define Oluşturur bir makro, bir tanımlayıcı veya parametreli tanımlayıcı bir token dizesi ile ilişkilendirilmesi olduğu.Derleyici, makro tanımlandıktan sonra kaynak dosya içindeki her geçtiği token dizesi yerine kullanabilirsiniz.

Sözdizimi

#definetanımlayıcıtoken dizesiopt

#defineidentifier(identifieropt,...,identifieropt)token-stringopt

Notlar

#define Yönergesini koymak derleyici neden olan token dizesi her geçtiği tanımlayıcısı kaynak dosyasında.Tanımlayıcısı yalnızca bir belirteç oluşturduğunda değiştirilir.Yani, tanımlayıcısı bir yorum, bir dize veya daha uzun bir tanımlayıcı bir parçası olarak görünüyorsa değiştirilmez.Daha fazla bilgi için bkz. C++ belirteçleri.

Token dizesi bağımsız değişkeni bir dizi anahtar sözcükler, sabitleri veya tam ifadeleri gibi simgeleri oluşur.Gereken bir veya daha fazla boşluk karakterleri ayrı token dizesi dan tanımlayıcısı.Bu boşluk yerine konulan metni bir parçası olarak kabul edilmez ve metnin son belirteç izleyen herhangi bir beyaz boşluk olur.

A #define olmadan bir token dizesi oluşumlarını kaldırır tanımlayıcısı kaynak dosyadan.Tanımlayıcısı kalır tanımlanan ve kullanarak test #if defined ve #ifdef yönergeleri.

İşlev benzeri makro parametreler ile ikinci sözdizimi biçimini tanımlar.Bu formu, parantez içinde görünmesi gereken parametreler isteğe bağlı bir listesini kabul eder.Sonra makroyu tanımlanmış, daha sonra açacağınız her geçtiği tanımlayıcısı( tanımlayıcısıopt,..., tanımlayıcısıopt ) bir sürümü ile değiştirilir token dizesi bağımsız değişkeni için biçimsel parametre yerine gerçek bağımsız değişkenlere sahiptir.

Biçimsel parametre adları gösterilir token dizesi yeri gerçek değerleri yerine konumları işaretlemek için.Her parametre adı, birden çok kez görülebilir token dizesi, ve adları herhangi bir sırada görünebilir.Çağrı bağımsız değişkenleri makro tanımındaki parametre sayısı eşleşmelidir.Serbest parantez kullanımı karmaşık gerçek bağımsız değişkenler doğru olarak yorumlanmasını güvence altına alır.

Biçimsel parametre listesinde virgüllerle ayrılır.Listedeki her ad benzersiz olmalıdır ve liste parantez içine alınmalıdır.Boşluk ayırabilirsiniz tanımlayıcısı ve parantez.Satır bitiştirme kullanın — bir ters eğik çizgi koyun (\) hemen önce yeni satır karakteri — birden çok kaynak satırlarında uzun yönergeleri için.Biten yeni bir satır biçimsel parametre adı kapsamını genişleten token dizesi.

İkinci sözdizimi formunda tanımlanan bir makro, makro çağrısı tarafından bağımsız değişken listesine ve ardından sonraki metin örnekleri gösterir.Örneği takip eden gerçek bağımsız tanımlayıcısı kaynak dosyada makro tanımı ilgili resmi parametrelere eşleştirilir.Her resmi parametresinde token dizesi , değil önünde bir stringizing (#), charizing (#@), veya belirteç yapıştırma (##) işleci veya tarafından bir ## operatörü, karşılık gelen gerçek bağımsız değişkeni tarafından değiştirildi.Biçimsel parametre yönergesi değiştirir önce gerçek bağımsız makrolar genişletilir.(Operators açıklanan Önişlemci işleçleri.)

İkinci formu, bağımsız değişkenlerle makro aşağıdaki örneklerde gösterilmektedir #define sözdizimi:

// Macro to define cursor lines 
#define CURSOR(top, bottom) (((top) << 8) | (bottom))

// Macro to get a random integer with a specified range 
#define getrandom(min, max) \
    ((rand()%(int)(((max) + 1)-(min)))+ (min))

Yan etkileri değişkenleriyle bazen beklenmeyen sonuçlar makroları neden.Belirli bir biçimsel parametre içinde birden fazla kez görüntülenebilir token dizesi.Bu biçimsel parametre ifade yan etkileri ile değiştirilir, birden fazla yan etkileri ile ifade değerlendirilecek.(Bkz: örnekleri altında Belirteci yapıştırma işleci (#).)

#undef Yönergesi unutmuş için tanımlayıcı 's Önişlemci tanımı neden olur.Bkz: #undef yönergesi daha fazla bilgi için.

Makronun tanımlanmakta oluşuyor, token dizesi (hatta başka bir makro genişleme sonucunda), onu değil genişletilir.

İkinci bir #define ikinci belirteç sırası ilk aynı değilse, aynı ada sahip bir makro bir uyarı üretir.

Microsoft özel

Microsoft c/C++ yeni tanımı için orijinal tanımını sözdizimsel olarak aynı ise, makroyu yeniden tanımlama sağlar.Başka bir deyişle, iki tanımları farklı parametre adları olabilir.Bu davranışı farklıdır ANSI c, iki tanım lexically aynı olması gerekir.

Örneğin, aşağıdaki iki makrolar parametre adları dışında aynıdır.ANSIC böyle bir yeniden tanımlanmasına izin vermez, ancak Microsoft c/C++, hatasız derler.

#define multiply( f1, f2 ) ( f1 * f2 )
#define multiply( a1, a2 ) ( a1 * a2 )

Diğer taraftan, aşağıdaki iki makrolar özdeş değil ve Microsoft c/C++ ile bir uyarı oluşturur.

#define multiply( f1, f2 ) ( f1 * f2 )
#define multiply( a1, a2 ) ( b1 * b2 )

SON Microsoft özel

Bu örnekte gösterilmektedir #define yönergesi:

#define WIDTH       80
#define LENGTH      ( WIDTH + 10 )

İlk ifade tanımlayıcısını tanımlar WIDTH sabit 80 tamsayı olarak tanımlar ve LENGTH bakımından WIDTH ve tamsayı sabit 10.Her geçtiği LENGTH ile değiştirilir (WIDTH + 10).Kapatma, her geçtiği WIDTH + 10 ifade tarafından değiştirilir (80 + 10).Parantez içine WIDTH + 10 bunlar aşağıdaki gibi ifadeler yorumu denetlemek önemlidir:

var = LENGTH * 20;

Önişleme aşama sonra deyimi olur:

var = ( 80 + 10 ) * 20;

kendisi için 1800 değerlendirir.Parantez olmadan sonuç şudur:

var = 80 + 10 * 20;

kendisi için 280 değerlendirir.

Microsoft özel

Makrolar ve sabitler ile tanımlama /d derleyici seçeneğini kullanarak aynı etkiye sahip bir #define dosyasının başındaki ön işlem yönergesi.30 Makrolar /d seçeneği kullanılarak tanımlanabilir.

SON Microsoft özel

Ayrıca bkz.

Başvuru

Önişlemci yönergeleri