info(), debug() ve error() işlevlerini içeren log.c dosyası oluşturmak istiyorum. Bu işlevler, dosya adı, satır numarası, vb. Yazdırmadan çalışır. Bu işlevlerden birini çağırdığımda, arayanın dosya adını, satır numarasını ve işlev adını dökmek istiyorum. Peki tam olarak nasıl geri izleriz? C'yi izlemek için bir yol var mı, yoksa makroları kullanırsak, bu nasıl yapılabilir?Arama adını, satır numarasını ve arama işlevinin işlev adını yazdır - C Prog
cevap
Ben
int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int debug(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int error(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
(belki bir makro yardım almak) Ve onları aramak için parametreler aracılığıyla işlevine verileri geçerdi
info(__FILE__, __LINE__, __func__, ...);
debug(__FILE__, __LINE__, __func__, ...);
error(__FILE__, __LINE__, __func__, ...);
Not: __func__
C99 olduğu; gcc, C89 modunda, [C/C++ satır numarası] muhtemel kopyası olan __FUNCTION__
__FILE __, .. vb parametrelerini geçmeden her zaman bu tür fonksiyonlar yaratmanın bir yolu var mı? – sura2k
Evet, bir makro ile. Örneğin, C99 için (variadic makroları vardır): '#define INFO (...) bilgisi (__ FILE__, __LINE__, __func__, __VA_ARGS __)' – pmg
Teşekkürler! İhtiyacım olan buydu. – sura2k
Makrolar kullanırsanız, bunu, __LINE__
ve __FUNCTION__
kullanarak gerçekleştirebilirsiniz. Örneğin,
#define INFO(msg) \
fprintf(stderr, "info: %s:%d: ", __FILE__, __LINE__); \
fprintf(stderr, "%s", msg);
Sen de işlevlerini kullanabilirsiniz, ama emin onlar doğru değeri vardı yapmak için, __FILE__
vb geçmesi gerekir.
- 1. Telefon numarasını kullanarak gelen arama ülke adını alınız.
- 2. Python, işlev kapatma işlevinin adını nasıl saklar?
- 3. Arama sırasında arama numarasını al.
- 4. C++ işlev adını makroya iletmek ve çağırarak
- 5. Python'da, üye işlevinin sınıfının adını nasıl edinebilirsiniz?
- 6. C++ belirli bir dize için metin dosyası arama ve bu dizgenin bulunduğu satır numarasını döndürme
- 7. Mathematica'daki bir modülde arama işlevinin adını nasıl alabilirim? Başka bir modül çağıran bir işlev veya modül yazarsanız
- 8. Yii2: Arama parametresinde varsayılan parametre adını değiştirmek mümkün mü?
- 9. İşlev adını çevreleyen parantezler ne anlama geliyor?
- 10. gelen bir arama sırasında arayanın numarasını değiştirir
- 11. NSTableView'ın kullanıcı tarafından tıklatılan satırın satır numarasını yazdır
- 12. Alan adını bir işlev şablonuna aktarma
- 13. C# içindeki işlem adını değiştir?
- 14. Dize olarak işlev adını çağırın Get
- 15. C# google sesli arama
- 16. Joker arama arama yolu yolu C#
- 17. Uygulama adını paket adını değil ve nasıl açabilirim?
- 18. YouTube adına sanatçı adını ve şarkı adını al
- 19. BASH'da, işlev adını işlev gövdesine almak mümkün mü?
- 20. İzleme işlevinin izlenen dosyanın adını almasının bir yolu var mı?
- 21. Sınıf adını
- 22. Arama yollarına ve dosya adlarına dosya oluşturma?
- 23. İkili Arama C++ STL
- 24. C# dizi Doğrusal Arama
- 25. C++ işlevinin içinde işlev adı almanın bir yolu var mı?
- 26. C++: İşlem Belleğinde Arama
- 27. Topolojik arama ve Genişlik ilk arama
- 28. Arama
- 29. Zengin metin kutusuna satır numarasını görüntüleme C#
- 30. Sınıf adını D
http://stackoverflow.com/questions/2651850/can-func-get-the-lineno-who-call-itself-cc – kennytm
(http://stackoverflow.com/questions/2849832/cc-line-number) – user7116
@KennyTM: Teşekkürler! Cevap var. – sura2k