トップページ⇒tech
17コメント4KB

質問ですよ。

■ このスレッドは過去ログ倉庫に格納されています
0001出題者NGNG
今、実行しているオブジェクトの名称を出力することってできますか?
int main(void)のままで行う事が要求仕様です。
(mainに引数はなし)
0002名無しさん@お腹いっぱい。NGNG
*実行ファイル名のことなら
printf( "%s\n"@` argv[0] );を試してみよう。

*今実行している関数名なら
C99から取り入れられた__FUNC__マクロを試してみよう。
0003名無しさん@お腹いっぱい。NGNG
>>2
>*実行ファイル名のことなら
>printf( "%s\n"@` argv[0] );を試してみよう。
に関しては、mainに引数がなきゃだめじゃないですか?
0004名無しさん@お腹いっぱい。NGNG
1 単発で質問スレッドを立てる
2 自分の環境を明らかにしない
3 ありがちな定型、出来るか出来ないか二者択一で質問する
以上の理由から逝って良いことが決まりました
00051NGNG
コンパイラはGCC
OSはRED HAT 6.1です。

OSやコンパイラ依存じゃない方法が理想です。
00062NGNG
>>1
なんでint main( int argc@` char **argv )が
だめなのかわかりません。
argvが使えない環境なら決め打ちするとか。。。

思いっきりOS依存の方法だけど、
POSIX規格のgetpidを使って
/proc/(getpidの戻り値)/cmdlineを読むとか。
00074NGNG
//力業-単発質問スレ立てるなバージョン
#include <stdio.h>

int main()
{
 char*** pArgv = (char***)(&pArgv + 4);
 puts(*pArgv[0]);
 return 0;
}
00081NGNG
>>7
素晴らしい案ですが、
Mainのモジュールには手を入れられないんです。
むむー。
0009名無しさん@お腹いっぱい。NGNG
スタートアップのソースをいじってしまえば?
0010名無しさん@お腹いっぱい。NGNG
案1:プロセスIDを取得する
   psの出力結果をpopoenで読み込み
   プロセスIDをキーとしてコマンドの検索を行なう
案2:要求仕様を引っくり返し、argv[0]を静的変数かなんかに
   保存してもらうように働きかける
案3:ばっくれる(オススメ)
0011sageNGNG
案3に決定!!
0012名無しさん@お腹いっぱい。NGNG
逝け
0013sageNGNG
むなしい。
0014名無しさん@お腹いっぱい。NGNG
>int main(void)のままで行う事が要求仕様です。
無理。

仕様がmain()の引き数を規定しているのなら
オブジェクト名称の取得方法も仕様で規定するべき。
仕様記述の粒度が揃っていないからね。
0015名無しさん@お蝮いっぱい。NGNG
つーか、argvがあっても、得られるのはargv[0]でしかないんだろ?
てきとーなプログラムからexec*使って動かされるなら何が入ってたっておかしくない。

何にせよ、"オブジェクトの名称"が何を差すか今一つ不明だが設計から見直したほうがいい。
0016名無しさん@お腹いっぱい。NGNG
オブジェクト=クラスインスタンスなら、自分のオブジェクト名を
返す関数定義するしかないかな。
Javaなら、クラス名引っ張ってくる関数すでにあるけど。
0017名無しさん@お腹いっぱい。NGNG
つーか逝け
■ このスレッドは過去ログ倉庫に格納されています