Lütfen bu sorunu çözmeme yardımcı olun. Bu, satır numarasını, dosya adını ve C dilinde var hatalarını almak için örnek koddur. Bunu çalıştırmayı denediğimde bazı hatalar aldım. Bunu yapmanın birçok yolu olduğundan eminim. Ama bazı işlevleri elde etmek için mevcut kodu kullanmalıyım. Herhangi bir yardım veya öneri çok takdir edilecektir. Makro içinde makro içinde C
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#define MY_MACRO1(fmt, args...) \
{ \
char buf_d[1024]; \
MY_MACRO2(__FILE__, __LINE__,call_func(buf_d,sizeof(buf_d),fmt,##args)); \
}
#define MY_MACRO2(__FILE__, __LINE__,fmt, ...) printf("%s : %d -> %s : \n",__FILE__, __LINE__, __VA_ARGS__);
char * call_func(char *buf_t, size_t size, const char *fmt, ...)
{
va_list ap;
va_start(ap,fmt);
vsnprintf(buf_t, size, fmt, ap);
va_end(ap);
return buf_t;
}
int main()
{
printf("\n Now I am printintg macro....\n");
MY_MACRO1("Macro is working fine..\n");
return 0;
}
Çıktı:
makro genişleme bulabilirsiniz. Son argüman makroda (func dönüş değeri) eksik.
char buf_d[1024];
printf("%s : %d -> %s : \n","file.c",35,);;
hatası:
file.c:35:83: error: expected expression
{ char buf_d[1024]; printf("%s : %d -> %s : \n","file.c", 35,);; };
^
1 hata oluşturulur.
Fil: Neden bir makro kullanıyorsunuz? – user4581301
Bu C ve C++ neden çift olarak etiketlensin? Soruda belirtmediğiniz bir derleyicinin standart olmayan bir derleyici uzantısı kullanıyorsunuz. Geçerli C olmak zorunda mı? Geçerli C++ olmak zorunda mı? Belirli bir derleyiciniz için kabul edilebilir olmak zorunda mı? Üçü de size farklı cevaplar verecektir. Ve neden yeryüzünde '__FILE__' ve' __LINE__' makro parametreleri olarak yeniden tanımlamayı seçiyor ?! – hvd
IIRC 'fmt, args ...' daha sonra bir ', ## args' tarafından izlenen bir taşınabilir olmayan uzantısıdır. 'Fmt, args ... 'yerine' '' ve '__VA_ARGS__' yerine' 'fmt, ## args''nı kullanabilirsiniz. – technosaurus