2016-05-08 1 views
-2

tool.cヘッダファイルに同じ名前のマクロや関数

#include <stdlib.h> 

#include "tool.h" 

void safeFree(void** pp) { 
    if (pp != NULL & *pp != NULL) { 
     free(*pp); 
     *pp = NULL; 
    } 
} 

tool.h

#ifndef tool_h 
#define tool_h 

void safeFree(void** pp); 
#define safeFree(p) safeFree((void**)&(p)) 

#endif /* tool_h */ 

私はmain.ctool.hをインポートした後、マクロを使用したいが、プログラムはコンパイルすることはできません。同じ名前のマクロと関数を定義する方法はありますか?

+0

マクロ置換の仕組みを考え、実際に何を望んでいるのかを考え直してください。 – Olaf

+0

"マクロ"とは何ですか?これは、プリプロセッサに対して、 'safeFree'のすべての出現箇所を指定された置換テキストに置き換えるコマンドです。あなたはそれをどのように期待していますか? –

+0

これは機能しません。マクロ名を大文字にしてみませんか?またはよりよく見えるものさえ、直接関数を呼び出す – Jack

答えて

2

同じ名前のマクロと関数を定義する方法はありますか?

同じコンパイル単位ではありません。

さらに、それは良い習慣ではありません。 Do not doマクロが機能を使用する主な方法になる場合は、関数を他のものに定義します。例えば。

void safeFreeImpl(void** pp); 
#define safeFree(p) safeFreeImpl((void**)&(p)) 

これに応じてtool.cを変更します。

関連する問題