我正在實施詳細模式。以下是我試圖做的事:定義一個全局變量VERBOSE(在verbose.h中),這樣需要詳細的文件只需要包含該文件。例如:在C中實現詳細信息
verbose.h:
void setVerbose(int test);
verbose.c:
#include "verbose.h"
// define VERBOSE if called
void setVerbose(int test) {
if (test) {
#ifndef VERBOSE
#define VERBOSE
#endif
}
}
point.h:
typedef struct Point Point;
struct Point {
int x, y;
};
void printPoint(Point *point);
point.c:
#include "point.h"
#include "verbose.h"
void printPoint(Point *point) {
#ifdef VERBOSE
printf("My abscissa is %d\n", point->x);
printf("My ordinate is %d\n", point->y);
#endif
printf("[x,y] = [%d, %d]\n", point->x, point->y);
}
和主:
main.c中:
#include "verbose.h"
#include "point.h"
int main(int argc, char *argv[]) {
if (argc >= 2 && !strcmp(argv[1], "-v"))
setVerbose(1);
Point *p = init_point(5,7);
printPoint(p);
return 0;
}
可執行製作得到:
$ gcc -o test main.c point.c verbose.c
希望的輸出是:
$ ./test
[x,y] = [5, 7]
$ ./test -v
My abscissa is 5
My ordinate is 7
[x,y] = [5, 7]
問題是,它似乎VERBOSE在調用printPoint()時未在point.c中定義。
請重新讀取的預處理器的概念。 –
'#define'是一個**預處理器**指令。在if語句中放置一個#define是毫無意義的。在編譯程序之前編譯'#define'。 –
其他人已經提到了這個問題,因此我只是建議你使用**日誌類**而不是你目前的方法。它更加靈活。例如,我前段時間爲Arduino寫了一篇https://abrushforeachkeyboard.wordpress.com/2014/06/17/arduino-adding-a-logger-class-with-ac-style-print-of-messages/ –