vfprintf causes run-time error
Visual Studio 2008年
我正在使用下面的源代码,这些源代码使用linux gcc 4.4.1可以正常编译。
但是,我试图使用VS 2008编译为C代码在Windows XP SP3上进行编译。
调用vfprintf时出现运行时错误。 而且__func__也给我一个编译错误。"未声明的标识符"。 我认为__func__是在stdarg.h文件中定义的。
非常感谢您的任何建议,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
void log_msg (FILE *out , const char *fmt , ... );
int main (void)
{
printf("== Start program ===
");
log_msg (stderr ,"[ %s ] : [ %s ] : [ %d ]
", __FILE__ , __func__ , __LINE__ );
return 0;
}
void log_msg (FILE *out , const char *fmt , ... )
{
va_list ap ;
va_start(ap , fmt );
vfprintf(out , fmt , ap ); /* run-time error here */
va_end(ap );
} |
-
如果遇到编译时错误,如何得到运行时错误?您进行了哪些更改才能进行编译?
-
我想知道和罗伯·沃克一样的事情。同样,所写的log_msg()等同于fprintf()。 fprintf()是否可以正常工作?假设确实如此,您可以探索汇编级调试的区别。
-
我在func上遇到编译错误,因此我将其注释掉,然后在没有%s和func的情况下运行了代码。然后我得到了vfprintf错误。
-
与许多有关错误的问题一样,拥有导致错误的确切代码确实非常有帮助。您发布的内容显示由于MSVC不支持__func__导致的编译错误。由于您似乎对vfprintf()的运行时错误更感兴趣,因此发布该代码将很有帮助,因此不必猜测它可能是什么。也许%d被错误地取出,而不是%s转换规范之一,并且当__LINE__被视为字符串时-崩溃-因为它不是有效的指针。我不知道。
-
是的,你是对的。我不应该把引起问题的代码放进去。也许这引起了一些混乱。但是,我想列出完整的源代码清单,以及我正在使用的功能。但是,我的评论确实引起了编译错误。下次我会尝试并更加精确。谢谢。
-
因此,只是好奇-在没有使用__func__宏的情况下导致vfprintf()崩溃的原因是什么?
-
我本应该是%d时有一个%s。谢谢。
__func__是C99构造,在Visual Studio中不可用。 您可以尝试使用__FUNCTION__代替。除此之外,您的示例对我来说还不错。
-
您是否在Visual Studio 2008 SP1上进行编译?
此外,__func__也未在头文件中定义,它是预定义的常量。 请参见我可以将func替换为C宏中的标识符名称吗? 更多。