5

C プログラムを使用して現在の C ファイルを表示したいと思います。で実行ファイル名が取得できることは知っていますargv[0]'hello.c'しかし、たとえばファイル名が必要です。出来ますか?

4

2 に答える 2

17

1 つのプログラムは、複数のC ファイルで構成できます。それで、あなたはどれを探していますか?

この__FILE__ため、マクロが作成されました。プリプロセッサによって、コンパイル中の現在のソース (.C) ファイルの名前に置き換えられます。

main.c

#include <stdio.h>
int main(int argc, char** argv)
{
    printf("Executable name: %s\n", argv[0]);

    printf("This is %s() from %s, line %d\n",
        __FUNCTION__, __FILE__, __LINE__);

    one();

    return 0;
}

one.c

#include <stdio.h>
void one(void)
{
    printf("This is %s() from %s, line %d\n",
        __FUNCTION__, __FILE__, __LINE__);
}

出力(実行可能ファイル名が「hello.exe」であると仮定):

Executable name: hello.exe
This is main() from main.c, line 4
This is one() from one.c, line 3

以下も参照してください。

于 2012-12-16T05:29:37.740 に答える
1

Windows を使用していて".exe"、プログラムに拡張機能がある場合は、その拡張機能を".c". LinuxまたはOSXを使用している場合は、単に追加しますが、その文字列にはそのためのスペースが割り当てられないため、に".c"直接追加しないでください。argv[0]代わりに新しい文字列を作成してください。

ただし、これはすべての状況で機能するとは限りません。実際のソース ファイルと実行可能ファイルの名前はもちろん異なる場合があり、実行可能ファイルがソース ファイルと同じフォルダにあるとは限りません。ソース ファイルの実際の名前を取得するには、__FILE__マクロを使用します。VisualC++ を使用している場合は、コンパイラにフラグを追加して、__FILE__マクロでフル パスを使用するように指示できます。この MSDN リファレンスを参照してください。GCC プリプロセッサには、既にフル パスが含まれています。ドキュメント__FILE__を参照してください。

于 2012-12-16T05:24:09.013 に答える