«c-preprocessor» etiketlenmiş sorular

C ve C ++ dil programlarını derlemeden önce uygulanan metinsel makro işlemci. Bu etiket ayrıca Objective-C veya C # içindeki #directives gibi türetilmiş veya aynı özelliklere sahip diğer derleyiciler / diller hakkında sorular için de kullanılabilir.

8
Bağımsız Değişken Sayısında Aşırı Yükleme Makrosu
İki makro var FOO2ve FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... FOOAşağıdaki gibi yeni bir makro tanımlamak istiyorum : #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) Ancak bu işe yaramaz, çünkü makrolar argüman sayısına aşırı yüklenmez. Değiştirmeden FOO2ve FOO3bir makro tanımlamak için bir yol yoktur FOO(kullanarak __VA_ARGS__sevk aynı etkiyi elde etmek …
184 c  macros  c-preprocessor 

30
C ++ makroları ne zaman faydalıdır? [kapalı]
Kapalı . Bu sorunun daha fazla odaklanması gerekiyor . Şu anda cevapları kabul etmiyor. Bu soruyu geliştirmek ister misiniz? Soruyu, yalnızca bu yayını düzenleyerek tek bir soruna odaklanacak şekilde güncelleyin . 2 yıl önce kapalı . Bu soruyu geliştir C önişlemci haklı korkulan ve C ++ topluluğu tarafından diğerlerinden ayrı …



6
C ++ 'da __FILE__, __LINE__ ve __FUNCTION__ kullanımı
C ++ derleyicisi destekleri onları, belirli bir nedeni var olduğunu varsayarsak değil kullanımına __FILE__, __LINE__ve __FUNCTION__günlüğü ve hata ayıklama amacıyla? Öncelikle kullanıcıya yanıltıcı veriler (örneğin, optimizasyonun sonucu olarak yanlış satır numarasını veya işlevi bildirme) vermek veya sonuç olarak bir performans isabeti almakla ilgileniyorum. Temelde, güvenebileceğim __FILE__, __LINE__ve __FUNCTION__karşı her zaman …

10
GCC'nin ## __ VA_ARGS__ numarasına standart bir alternatif mi?
C99'daki değişken makrolar için boş bağımsız değişkenlerle ilgili iyi bilinen bir sorun var. misal: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); Yukarıdakilerin kullanımı BAR(), C99 standardına göre gerçekten yanlıştır, çünkü aşağıdakilere genişleyecektir: printf("this breaks!",); Sondaki virgülü not edin - çalışmaz. Bazı derleyiciler (örneğin: Visual …

2
C önişlemcisi ile iki kez birleştirme ve bir makroyu "arg ## _ ## MACRO" da olduğu gibi genişletme?
Bazı işlevlerin adları böyle bir makro ile belirli bir makro değişkeninin değerine bağlı olduğu bir program yazmaya çalışıyorum: #define VARIABLE 3 #define NAME(fun) fun ## _ ## VARIABLE int NAME(some_function)(int a); Ne yazık ki, makro NAME()bunu int some_function_VARIABLE(int a); ziyade int some_function_3(int a); bu yüzden bu konuda yanlış bir yol …

3
C / C ++ ön işlemcisinde kendi satırındaki tek bir pound / karma işaretinin (#) amacı nedir?
Boost kitaplıklarının kaynak koduna bakıyordum ve genellikle bunlara herhangi bir önişlemci yönergesi eklenmemiş tek pound işaretlerinin olduğunu fark ettim. GCC önişlemci kılavuzunu ve teknik özellik kılavuzunu okudum ve bu konuda hiçbir şey bulamıyorum. (1) #ifndef BOOST_CONFIG_HPP (2) # include <boost/config.hpp> (3) #endif (4) # (5) #if defined(BOOST_HAS_PRAGMA_ONCE) (6) # pragma …
145 c++  c  boost  c-preprocessor 


15
#Define, enum veya const kullanmalı mıyım?
Üzerinde çalıştığım bir C ++ projesinde, , dört değere sahip olabilen bayrak türü bir değere . Bu dört bayrak birleştirilebilir. Bayraklar, veritabanındaki kayıtları tanımlar ve şunlar olabilir: Yeni Rekor silinmiş kayıt değiştirilmiş kayıt mevcut kayıt Şimdi, her kayıt için bu özniteliği korumak istiyorum, böylece bir enum kullanabileyim: enum { xNew, …

14
Derleme zamanında bir #define değerini nasıl gösterebilirim?
Kodumun hangi Boost sürümünü kullandığını düşündüğünü anlamaya çalışıyorum. Bunun gibi bir şey yapmak istiyorum: #error BOOST_VERSION ancak önişlemci BOOST_VERSION öğesini genişletmez. Bunu programdan çalışma zamanında yazdırabileceğimi biliyorum ve yanıtı bulmak için önişlemcinin çıktısına bakabileceğimi biliyorum. Derleme sırasında bunu yapmanın bir yolunun faydalı olabileceğini düşünüyorum.



3
C / C ++ makro dizesi birleştirme
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 STR3 == "s1" ile birleştirmek mümkün mü? Bunu, başka bir Makro işlevine argümanlar aktararak yapabilirsiniz. Ama doğrudan bir yol var mı?
121 c++  c  c-preprocessor 

4
Önişlemci makrolarından platform / derleyici nasıl belirlenir?
Linux, Windows, Mac OS'de derlenmesi gereken bir çapraz platform kodu yazıyorum. Windows'ta görsel stüdyoyu ve mingw'i desteklemeliyim. Ortama yerleştirmem gereken bazı platforma özgü kod parçaları var #ifdef .. #endif. Örneğin, buraya win32'ye özel bir kod yerleştirdim: #ifdef WIN32 #include <windows.h> #endif Peki Linux ve Mac OS'yi nasıl tanıyabilirim? Tanımlama isimleri …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.