C程序中printf()/fprintf()输出的调试字符串的缩进(和换行缩进)

C程序中printf()/fprintf()输出的调试字符串的缩进(和换行缩进),c,string,printf,C,String,Printf,我在我的函数中使用了一个调试输出,使用printf(),但是输出从第一列开始进入控制台。我想通过每次深入函数时缩进函数的输出字符串来区分函数的嵌套级别(使用static int indentlevel;变量很容易实现,该变量在函数开始时递增,用作空格填充计数,最后递减)。但缺陷在于,一旦输出行变得太长,无法在控制台边缘进行包装,则行的包装部分从控制台的第1列开始。我是否应该注意这一点,因为一旦输出被重定向到文件,行的长度(比如)只有一行,行的宽度仅取决于文本文件查看器设置?因为您正在向文本文件写

我在我的函数中使用了一个调试输出,使用
printf()
,但是输出从第一列开始进入控制台。我想通过每次深入函数时缩进函数的输出字符串来区分函数的嵌套级别(使用
static int indentlevel;
变量很容易实现,该变量在函数开始时递增,用作空格填充计数,最后递减)。但缺陷在于,一旦输出行变得太长,无法在控制台边缘进行包装,则行的包装部分从控制台的第1列开始。我是否应该注意这一点,因为一旦输出被重定向到文件,行的长度(比如)只有一行,行的宽度仅取决于文本文件查看器设置?

因为您正在向文本文件写入,所以不应该注意换行,而由文本查看器决定


我使用的一种方法是写入HTML,然后浏览器负责换行。唯一的问题是,您需要注意打开/结束标记是否正确平衡,但您的
indentlevel
变量也需要这样做。

如果您使用的是gcc,则可以使用-finstrument functions编译器选项,在每个函数的入口和出口处调用插装函数

      void __cyg_profile_func_enter (void *this_fn,
                                     void *call_site);
      void __cyg_profile_func_exit  (void *this_fn,
                                     void *call_site);
您可以定义这些函数来跟踪嵌套级别

警告:我还没有真正尝试过这一点(还有一件我还没有真正尝试过的事情!)。一个明显的问题是-不要对检测功能进行检测


但是线条的宽度也不能通过控制台的设置来配置?通过调整控制台窗口的大小?它仍然被限制为最大屏幕宽度。不。它通常在缓冲区宽度内。如果增加,则行更长。