2017-04-07 14 views
1

メソッドhowmany()を定義するコードを作成しようとしています。 OSXでシステム関数のようなマクロの定義を解除するには?

a previous question/usr/include/sys/types.h

#define howmany(x, y) __DARWIN_howmany(x, y) 

で同じ名前の関数のようなマクロがあり、私は

#ifdef howmany 
#undef howmany /*undefining '/usr/include/sys/types.h' */ 
#endif 

しかし関数としてヘッダファイル内#undef含む試してみました類似のマクロはアクティブのままです。

/usr/include/sys/types.h:184:9:注意:マクロ 'howManyが' はここで定義されます。#define howManyが(x、y)は__DARWIN_howmany(x、y)を/ *#yをの==のXビット? */

この関数のようなマクロを非アクティブにするにはどうすればよいですか?

+1

私は今試しましたが、 '#include 'の後の単純な '#undef howmany'はうまく動作します。 – Ssswift

+2

これは非常に壊れやすいです。はい、あなたはおそらくそれを動作させることができますが、物事がどのようにインポートされるかにはごくわずかな変更が原因で、再び失敗する(または悪いことに、間違ったコードを呼び出す)ことがあります。 '#undef'が' types.h'を含むかもしれない全てのファイルに含まれていることと、定義された後には未定義であることを確認する必要があります。これは破ることができる多くの方法です。関数の名前を変更します。名前は取られます。 –

+1

@Robネイピエは答えをしてください。それは良いものであり、私はそれを投票したい。私もこれを答えた質問にして、それが私の "答え:0"のリストから外れるようにしたい。そして、Q/AペアはQ /コメントペアよりもずっと良いです。そして、あなたはとても正しいです。 – Yunnosch

答えて

0

これは非常に脆弱です。はい、あなたはおそらくそれを動作させることができますが、物事がどのようにインポートされるかにはごくわずかな変更が原因で、再び失敗する(または悪いことに、間違ったコードを呼び出す)ことがあります。 types.hを含む可能性のあるすべてのファイルに#undefが含まれていて、それが定義された後は定義されていないことを確認する必要があります。これは破ることができる多くの方法です。関数の名前を変更します。名前は取られます。

+0

私は答えを受け入れますが、結局コード内のすべての関数に名前を変更することにしました。 – ilciavo

関連する問題