今日、私はbasename()
関数を使わなければなりませんでした、そしてman 3 basename
(ここ)は私にいくつかの奇妙なメッセージを与えました:
ノート
basename()には2つの異なるバージョンがあります。上記のPOSIXバージョンと、GNUバージョンです。
#define _GNU_SOURCE
#include <string.h>
私はこれが何を#define _GNU_SOURCE
意味するのか疑問に思っています:私が書いたコードがGNU関連のライセンスで汚染されているのでしょうか?それとも単に、コンパイラに「そうですね、この関数のセットはPOSIXではないため、移植性はありませんが、とりあえず使用したいのです」と言っているだけなのでしょうか。
もしそうなら、いくつかのあいまいなマクロを定義して、1つの関数の実装または他の関数の実装を取得する代わりに、人々に異なるヘッダーを与えてみませんか?
何かが私を悩ませます:コンパイラーはどのように実行可能ファイルとリンクする関数の実装を知るのですか?これ#define
も使用しますか?
誰かが私に与えるいくつかの指針がありますか?
_GNU_SOURCE
は、strfry
とを取得するためであることを誰もが知っていますmemfrob
。