エラーを与えるマクロ宣言

私は、ファイルLogへの書き込みロジックを複製するのを容易にするマクロを宣言します 私はエラーC2065: 'フロッグ':宣言されていない識別子を取得します。 しかし、私はlog_bufferのこのエラーを取得しません。

私はVisual Studios 2008 IDEを使用しています。

何が間違っているのですか?

#ifndef ERROR_LOG_MACRO

#define ERROR_LOG_MACRO 1

#define SETERRORPARAMS  char log_buffer[MAX_PATH]; \
                        char flog[MAX_PATH]; \
                        FILE *err_log_fp; 

/*
    Arguments: x (Name of the File) 
               y (File Path without the Filename)
               z (Mode) 
*/                  
#define OPENFILE(x,y,z) strcpy(flog,y); \
                        strcat(flog,"\\"); \
                        strcat(flog,x); \ 
                        err_log_fp = fopen(flog, z); 

#define WRITELOG(x)     if(err_log_fp) \
                            fwrite(log_buffer, sizeof(char), strlen(log_buffer), err_log_fp);

#define CLOSEFILE       if(err_log_fp) \
                            fclose(err_log_fp);

#endif

私もやろうとした

#define OPENFILE(x,y,z)   SETERRORPARAMS \ 
                          ... \

しかし、これでもうまくいきませんでした。

0
なぜこれのためにマクロを使用していますか?関数を使って適切に実装してみませんか?
追加された 著者 Paul R,
あなたが失敗した機能を表示することはできますか?
追加された 著者 MByD,

2 答え

おそらく、マクロの最初の行の後に後続の空白があります。

#define SETERRORPARAMS  char log_buffer[MAX_PATH]; \______ <-- make sure you have no whitespaces
                    char flog[MAX_PATH]; \
                    FILE *err_log_fp; 

いずれか、またはマクロを使用していない場合、 log_buffer は他の場所で宣言されています。

1
追加された
ホワイトスペースが問題を引き起こしていた:(
追加された 著者 nimish,
余分なキャラクターだった?
追加された 著者 Luchian Grigore,
うん、私はそこに行った:)。
追加された 著者 Luchian Grigore,

OPENFILE マクロを使用しているところで flog がスコープ内にあることを実際にチェックしましたか?

コードセグメントのようなもの:

SETERRORPARAMS
OPENFILE (fileStr, pathStr, modeStr)

最悪の場合は、プリプロセッサが作業を終えた後にコードを調べなければなりません。ほとんどのコンパイラでは、そのプリプロセッサステージで生成された出力を調べることができます。 GCCは gcc -E を使用しますが、MSVCに相当するものはわかりません。

This link seems to indicate you can enter /P into the project settings to get the preprocoessed files written to *.i files.

しかし、私はこれを言う必要があります、これは本当に良い考えではないためにマクロを使用しています。昔はスピードのためには良いものでしたが、インライン関数や非常に優れたコードオプティマイザではあまり必要ありません。

1
追加された
OK。私はあなたが確かに提案したものを実装しようとします。ありがとう:)
追加された 著者 nimish,