Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Make printf()始终使用包装器打印函数名_C_Debugging_Printf_Variadic Macros - Fatal编程技术网

C Make printf()始终使用包装器打印函数名

C Make printf()始终使用包装器打印函数名,c,debugging,printf,variadic-macros,C,Debugging,Printf,Variadic Macros,如何始终打印调用printf的函数名而不每次提供信息?您可以使用可变宏: #define printff(a, ...) printf("%s(): " a, __func__, ##__VA_ARGS__) 此宏使用传递给printf的字符串a,并在其前面加上%s:,该字符串将保存函数名。函数名\uuu func\uuuu是第一个提供的变量,它将始终用于第一个提供的%s。在_uva_ARGS__;处理对空 此宏可扩展为包含文件名\uuuu file\uuuuu或行号\uu

如何始终打印调用printf的函数名而不每次提供信息?

您可以使用可变宏:

#define printff(a, ...) printf("%s(): " a, __func__, ##__VA_ARGS__)
此宏使用传递给printf的字符串a,并在其前面加上%s:,该字符串将保存函数名。函数名\uuu func\uuuu是第一个提供的变量,它将始终用于第一个提供的%s。在_uva_ARGS__;处理对空

此宏可扩展为包含文件名\uuuu file\uuuuu或行号\uuuuu line\uuuu


这适用于C99及以上版本。

您可以使用可变宏:

#define printff(a, ...) printf("%s(): " a, __func__, ##__VA_ARGS__)
此宏使用传递给printf的字符串a,并在其前面加上%s:,该字符串将保存函数名。函数名\uuu func\uuuu是第一个提供的变量,它将始终用于第一个提供的%s。在_uva_ARGS__;处理对空

此宏可扩展为包含文件名\uuuu file\uuuuu或行号\uuuuu line\uuuu


这应该适用于C99及以上版本。

@JohnKugelmann我挑战你的副本。下面的答案似乎与OP提出的问题有关。如果您已经知道答案,则只能在副本的答案中找到解决方案,而不是在前几个投票最多的答案中以及在代码唯一的答案中。所以,请解释您认为OPs问题是如何得到回答的。定义一个用于调试的日志宏正是这个问题和链接的问题的目的。令人惊讶的全面性涵盖了C99中的可变宏、GCC uuu VA_ARGS_uuu扩展,以及在输出中添加uu文件uuu、u线uuu和u函数uuu等内容,这可以改进诊断。约翰的链接答案确实在另一个层面上,包含了更多细节,使这个Q&A有点过时。不过有一件事:我可能没有最好的谷歌搜索技能,但我也不认为我有最差的,但我在搜索时找不到答案。我认为另一个答案的标题指向了一个不同的方向,并将我的答案放在了一个旁注上。有什么想法吗?我应该删除这个问题吗?对问题和答案都投了赞成票,但它是重复的,乔纳森的答案确实提供了更多细节。搜索提示,尝试搜索你的目标,而不是你的解决方案。这里的解决方案是用包装器打印函数名。如果您后退一步,目标是创建一个日志宏进行调试。搜索c日志宏或c调试宏都会出现一个链接问题,即我是如何找到它的。@JohnKugelmann我质疑你的副本。下面的答案似乎与OP提出的问题有关。如果您已经知道答案,则只能在副本的答案中找到解决方案,而不是在前几个投票最多的答案中以及在代码唯一的答案中。所以,请解释您认为OPs问题是如何得到回答的。定义一个用于调试的日志宏正是这个问题和链接的问题的目的。令人惊讶的全面性涵盖了C99中的可变宏、GCC uuu VA_ARGS_uuu扩展,以及在输出中添加uu文件uuu、u线uuu和u函数uuu等内容,这可以改进诊断。约翰的链接答案确实在另一个层面上,包含了更多细节,使这个Q&A有点过时。不过有一件事:我可能没有最好的谷歌搜索技能,但我也不认为我有最差的,但我在搜索时找不到答案。我认为另一个答案的标题指向了一个不同的方向,并将我的答案放在了一个旁注上。有什么想法吗?我应该删除这个问题吗?对问题和答案都投了赞成票,但它是重复的,乔纳森的答案确实提供了更多细节。搜索提示,尝试搜索你的目标,而不是你的解决方案。这里的解决方案是用包装器打印函数名。如果您后退一步,目标是创建一个日志宏进行调试。搜索c日志宏或c调试宏都会出现一个链接问题,即我是如何找到它的。