DEBUG
が定義されている関数の1つが宣言されているヘッダーがあります。#includeはプログラムに表示されるよりも早く要求されます
また、私は同じ原理で動作するこの関数の定義を持っています。しかし、DEBUG
が引数チェックの後にmain()
にのみ定義されているかどうかはわかります。
Iが配置した#include
main()
で:
ヘッダ:
#ifdef DEBUG
void printStack(Stack* st);
#endif
ファイル)(主にある関数定義は
#ifdef DEBUG
void printStack(Stack* st)
{
int i;
for (i = 0; i < st->size; i++)
printf(ValType_IOSPECIF " ",st->data[i]);
printf("\n");
}
#endif
ファイルであります
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include "calculating.h"
#define EXPR_LENGTH 1000
int main(int argc, char* argv[])
{
int argflag = 0;
if (argc >= 2)
argflag = !strcmp(argv[1], "-debug");
#if (argflag)
#define DEBUG
printf("! DEBUG !\n\n\n")
#endif
#include "stack.h" // there is a that function here
...
}
それは正しいですか?
"関数のうちの1つがDEBUG" --Noの場合に宣言し、 'DEBUG'が定義されている場合に関数が定義されます。そして、このマクロをコマンドラインから渡し、コード内で定義しないでください。そして、一般的には関数全体を除外することは悪い考えです。そうすれば、関数がなくてもコンパイルできなくなるからです。 – Olaf
'gcc -E main.c'を実行し、結果が –