2017-05-04 34 views
0

我想啓用「printf(」宏消息是%d \ n「,MESSAGE);」在運行時間。例如,如果我在運行時給出參數10,它應該打印該消息。如果沒有給出,它不應該打印此消息。是否有可能?在運行時啓用DEBUG消息

#include <stdio.h> 

#define MESSAGE 10 

int foo; 
void main(int argc, char *argv[]) 
{ 
     foo = atoi(argv[1]); 
     printf("foo is %d\n", foo); 

#if MESSAGE==foo 
     printf("macro MESSAGE is %d\n",MESSAGE); 
#endif 
} 
+0

'if'檢查有什麼問題? –

+0

預處理器無法使用運行時值。 – BLUEPIXY

+0

或者你的意思是編譯時間...那麼這是一個不同的球賽。 –

回答

3

我們可以定義有條件的基於預處理器宏宏在編譯時什麼宏的定義是控制:

#if DEBUGGING 
#define debug(format, ...) fprintf(stderr, format, __VA_ARGS__) 
#else 
#define debug(format, ...)() 
#endif 

debug宏本身實際上是GCC's manual一個例子。

或者,我們可以做一個類似的功能,在運行時間一些變量的值檢查:

#include <stdarg.h> 
#include <stdio.h> 
int debugging = 10; 
void debug(int msglevel, const char *fmt, ...) 
{ 
    if (debugging < msglevel) return; 
    va_list va; 
    va_start(va, fmt); 
    vfprintf(stderr, fmt, va); 
    va_end(va); 
} 
... 
debug(10, "Error: %s\n", "some explanation"); 

全功能使得它更容易做多的詳細程度比較大。當然,我們仍然可以在編譯時使用函數的另一個定義來完全禁用它。有關可變參數,請參見va_arg(3) man page

+0

@ikkachu,謝謝。它非常酷,工作正常 – Akaash

相關問題