亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[C語言]函數與調試

發布時間:2020-08-05 23:55:30 來源:網絡 閱讀:375 作者:風子余 欄目:編程語言

函數與調試

        正常程序的調試使用gdb。但有時也會在程序中通過使用printf(),打印關鍵信息進行bug定位及調試。接下來通過實踐不斷優化改善:

1,通過在程序中直接使用printf()函數進行開發調試。但在開發調試測試結束后,必須刪除相應的調試打印函數(printf)。因為過多的打印函數存在會影響效率,所以上線時會刪掉調試打印函數。但這樣就導致了生成程序出現bug需測試環境調試定位時,又得重新書寫printf進行打印調試。


2,通過使用DEBUG來控制printf函數的調用使用如下:

void test( void )
{
    /* do something */
#ifdef DEBUG
    printf("Tets Debug\n");
#endif
    /* do something */
}

若想打印出printf信息,只要在編譯時加入DEBUG選項即可。使用如下:gcc -DDEBUG main.c

此時雖然在DEBUG是已經滿足要求,需要調試時才會執行。更不會影響生產線的執行效率。但過多的#ifdef和#endif嵌套會影響代碼風格,且會影響可讀性。故有了下一版本。


3,使用宏處理。

定義個DEBUG_WRITE宏,在調試狀態時指向write_debug函數;非調試狀態DEBUG_WRITE定義變成了(void)。

使用stderr而不是stdout的原因是:stderr不存在緩存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

#ifdef  DEBUG
#define WRITE_DEBUG( arg ) write_debug arg
#else
#define WRITE_DEBUG( arg )
#endif

/**
* @brief debug日志信息打印函數
*
* @param fmt
*/
void
write_debug( char *fmt, ... )
{
    va_list vl;
    va_start( vl, fmt );

    vfprintf( stderr, fmt, vl );

    va_end( vl );
}

int
main( int argc, char *argv[] )
{
    int   num = 10;
    char *str = "szyu";

    /* 使用時里面的括號不能省略 */
    WRITE_DEBUG( ( "num...%d, str...%s\n", num, str ) );

    return 0;
}

較之前版本,風格統一且不影響可讀性。


本文參考自《征服C指針》

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎兰屯市| 越西县| 巴林左旗| 鹰潭市| 溧水县| 红原县| 密山市| 巢湖市| 南投县| 丰原市| 平舆县| 山阴县| 曲靖市| 饶河县| 合川市| 家居| 锦屏县| 新安县| 双柏县| 饶阳县| 黄石市| 凭祥市| 叶城县| 南皮县| 安平县| 通榆县| 大冶市| 太康县| 诏安县| 公安县| 绥化市| 山阴县| 铜川市| 洛阳市| 桦甸市| 和田县| 东安县| 赤城县| 余庆县| 双辽市| 汝城县|