我正在实现一个详细的模式。下面是我要做的:定义一个全局变量详细(以verose.h),这样需要详细的文件只需要包含该文件。例如:
逐字。h:
void setVerbose(int test);逐字c:
#include "verbose.h"
// define VERBOSE if called
void setVerbose(int test) {
if (test) {
#ifndef VERBOSE
#define VERBOSE
#endif
}
}要点h:
typedef struct Point Point;
struct Point {
int x, y;
};
void printPoint(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);
}主要是:
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]问题是,在调用printPoint()时,似乎没有在point.c中定义详细内容。
发布于 2016-03-18 23:40:45
预处理器命令是在编译时决定的,而不是在运行时决定的,因此您的系统将无法工作。相反,我建议使用全局bool Verbose并提供一个verbose()函数来完成打印(或不打印)。
verose.h
#include <stdbool.h>
int verbose(const char * restrict, ...);
void setVerbose(bool);verose.c
#include "verbose.h"
#include <stdbool.h>
#include <stdarg.h>
#include <stdio.h>
bool Verbose = false;
void setVerbose(bool setting) {
Verbose = setting;
}
int verbose(const char * restrict format, ...) {
if( !Verbose )
return 0;
va_list args;
va_start(args, format);
int ret = vprintf(format, args);
va_end(args);
return ret;
}main.c
#include "verbose.h"
#include <stdbool.h>
int main() {
verbose("Verbose is off\n");
setVerbose(true);
verbose("Verbose is on\n");
int foo = 42;
verbose("Number: %d\n", foo);
return 0;
}https://stackoverflow.com/questions/36095915
复制相似问题