C言語 - C/C++ 併用 - __FILE__


 クラウディア


1. 概要
2. 状況
3. 工夫
4. 参考サイト

1. 概要

 どうも、「__FILE__」というシンボルの使い方が、「C」と「C++」で出力結果が異なるという話なのですが。

2. 状況

 純粋な「C言語」であれば。

printf("%s", __FILE__);
 と書けば、コンパイラがプリプロセッサの解釈のタイミングで、ソースファイル名を拡張子付きで文字列化してくれます。  しかし、いくつかの「C++」のコンパイラでは、「__FILE__」は、ディレクトリつきになり、ファイル名のみで使いたい場合は、「__FILE_NAME__」を使用するらしい。  ところが、わたしの持っている環境では、「clang」も「gcc」も思い通りにならない。

3. 工夫

 「Gemini」伍長と相談して、以下の工夫をしました。

file.cpp
 という、ファイルを作成しまして、中に以下を記述します。

#include <stdio.h>

int main(int argc, char* argv[])
{
	printf("%s\n", __FILE__);
	printf("%s\n", __FILE_NAME__);
	return 0;
}
 「clang」を例にしますと。  これを。

clang++ file.cpp
 で作成したロードモジュールを実行しても。

file.cpp
file.cpp
 と出力されるので、検証にならない。  コンパイルオプションをちょっと変えます。

clang++ $(realpath file.cpp)
 こうして作成した、ロードモジュールを実行すると。

/home/hogehoge/lang/cpp/sample/file.cpp
file.cpp
 となりまして、実証できました。  「__FILE__」で、パスなしのファイ名のみにする工夫が、参考サイトに書いてあるのですが。  面倒なので、「__FILE_NAME__」を使うようにするべきかと思います。

4. 参考サイト

 本ページは、下記のサイトおよび「Gemini」伍長を参考にさせていただきました。
__FILE__ からディレクトリ名を削除する方法

audiobook.jp
AbemaTV 無料体験
5G CONNECT
それがだいじWi-Fi
U-NEXT
損保との違い
ネットオークションの相場、統計、価格比較といえばオークファン
アフィリエイトのアクセストレード
earthcar(アースカー)
Amazonギフトカード
JETBOY
薬屋の独り言
EMEET 1
ベルリッツ
葬送のフリーレン Prime Video
TikTok Shop 【リピート用プログラム】
ハイスピードプラン
サウンドハウス
EaseUS
【usus ウズウズ】
健康サポート特集