1: モダンノマド 2016/09/08(木) 19:42:27.149 ID:bXTARBey0
テキストファイルに関数を定義して関数呼び出しみたいなことってできる?


スポンサーリンク

このスレッドと同じタグが付けられてるスレッドを探せます。edit
▶︎厳選銘柄配信を15日間無料でお試し配信実施中!株投資情報のファーストクラス

3: モダンノマド 2016/09/08(木) 19:43:38.359 ID:yCX3BC7Ua
DLLのようなことをTXTファイルに書いたコードでやりたいってこと?

11: モダンノマド 2016/09/08(木) 19:46:24.950 ID:BF+lTAMCd
>>3
そんな感じ
定義されてる関数を呼びたい

関数まとめ.txt
関数A
関数B
関数C


int main() {
while(文字列探索)
ヒットした関数呼び出し

19: モダンノマド 2016/09/08(木) 19:50:59.689 ID:yCX3BC7Ua
>>11
不可能ではないが、ってとこじゃないか。

Cでやるなら少なくともパーサー、コンパイラ、リンカの機能は必要じゃないかと思う。

もしくは呼び出しもとの関数で構文解析して疑似るか……いやこれは無理かな。

なんでCでそんなことをしたいの? 普通に全部まとめてリンクすればいいことじゃん? 動的がいいならそれこそDLLとかさ。

23: モダンノマド 2016/09/08(木) 19:56:15.166 ID:BF+lTAMCd
すまん
レスが多くて全てに反応できない

インタプリタ
iniファイル
名前しか知らんわ…

>>19
追加削除変更されてもプログラムの変更なしに動かせるようにしたいんだわ
テキストをいじればできるように
dllだとプログラム何かしら作らないといけないからさ

大元の本体はどうすんの?って話もあると思うけど
それは俺以外の友達が作ってる

28: モダンノマド 2016/09/08(木) 20:03:21.241 ID:yCX3BC7Ua
>>23
理解が間違っていたらすまん

29: モダンノマド 2016/09/08(木) 20:08:07.161 ID:BF+lTAMCd
>>28
ちょっとまっててまとめる

28: モダンノマド 2016/09/08(木) 20:03:21.241 ID:yCX3BC7Ua
>>11の関数A~Cには、C言語の関数が定義されている訳じゃないのか?
Javaでいう仮想マシンみたいなものを作りたいの?

4: モダンノマド 2016/09/08(木) 19:43:39.475 ID:3pTgBSlv0
出来るよ、自分でそういうプログラム作れば

5: モダンノマド 2016/09/08(木) 19:43:49.607 ID:N9reW06S0
よく判らん質問だが、文字列で分岐すればいいんじゃね?

6: モダンノマド 2016/09/08(木) 19:44:29.246 ID:N+rQzOqj0
iniファイル使ったら余裕やろ

7: モダンノマド 2016/09/08(木) 19:44:38.399 ID:QaGfzZffa
できるよ

8: モダンノマド 2016/09/08(木) 19:44:54.393 ID:rzZgCvdY0
できないよ

9: モダンノマド 2016/09/08(木) 19:45:23.617 ID:nbJVLjiKa
インタプリタ作ればええやんか

10: モダンノマド 2016/09/08(木) 19:46:04.920 ID:pIyaZn/90
スクリプト言語作るってことでしょ?

12: モダンノマド 2016/09/08(木) 19:46:40.354 ID:DTHE/MuCp
.hと.cを用意すればいつものように出来る

13: モダンノマド 2016/09/08(木) 19:47:47.998 ID:nbJVLjiKa
>>12
え?

14: モダンノマド 2016/09/08(木) 19:47:48.092 ID:RPWoNCGUa
インタプリタ自作するくらいならProccessでphp.exe呼んだ方が楽そう

15: モダンノマド 2016/09/08(木) 19:49:00.982 ID:N9reW06S0
>>14
clでいいじゃね?

50: モダンノマド 2016/09/08(木) 20:41:49.352 ID:ybnCCss5a
>>15
実際やってみたらどっちが楽かはよく分かるはず

53: モダンノマド 2016/09/08(木) 20:44:06.047 ID:N9reW06S0
>>50
そうか

16: モダンノマド 2016/09/08(木) 19:49:43.114 ID:pIyaZn/90
C++だとマングリングされてるからextern Cがいる?
達人教えて

17: モダンノマド 2016/09/08(木) 19:49:47.040 ID:Sztpfz3l0
コンパイラ使ってdllに変換しちゃってから読み込むのがベストだと思う
用途にもよるが

例えば

Console.Write("TEST-FILE");

を変換したもの

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

をコピペして拡張子dllで保存してみろ
あとは普通に読み込んで使えばいい

18: モダンノマド 2016/09/08(木) 19:50:46.107 ID:nbJVLjiKa
>>17
そういうことじゃないだろう

24: モダンノマド 2016/09/08(木) 19:56:46.468 ID:WpSjaktLM
>>17
パソコンが物故割れた

20: モダンノマド 2016/09/08(木) 19:53:49.919 ID:t9iywY2p0
結論:できない

21: モダンノマド 2016/09/08(木) 19:54:18.761 ID:zM7zTjF00
何故そんな面倒なことを

22: モダンノマド 2016/09/08(木) 19:55:27.642 ID:BdEIRhbW0
CSharpCodeProvider

43: モダンノマド 2016/09/08(木) 20:32:45.262 ID:BdEIRhbW0
>>39
>>22

45: モダンノマド 2016/09/08(木) 20:35:22.613 ID:PC27TQ1Gd
>>22
関数ポインタ使ったことないな
それは俺の要望を叶えてくれる可能性あるのかね

25: モダンノマド 2016/09/08(木) 19:58:12.903 ID:BdEIRhbW0
luaで済む話じゃねーかホビロン

26: モダンノマド 2016/09/08(木) 19:58:47.299 ID:BF+lTAMCd
俺はあくまで友人の追加し続けてる
true false を返すだけの関数を判別するところを作ってる感じ

27: モダンノマド 2016/09/08(木) 20:02:16.109 ID:Ohf50qJga
ゲーム感覚でプログラミングできるゲームエンジン作りました!って
フリーウェアあるしできるっちゃできるがどうやるかは知らんし

30: モダンノマド 2016/09/08(木) 20:09:45.965 ID:iJ4h1+M30
普通にincludeすりゃええやん…
拡張子txtな意味が分からんけど

31: モダンノマド 2016/09/08(木) 20:12:10.112 ID:2Ls7C/MO0
vbscriptってのがあってだな

32: モダンノマド 2016/09/08(木) 20:12:10.497 ID:ihnf9Tlid
プログラムの変更したくないって言ってるやないか…と言いたくなってきた
それを許すなら質問すらしてないと思いたい

33: モダンノマド 2016/09/08(木) 20:13:46.013 ID:7x1Tc0L9d
バイナリファイルに関数名を入力したら関数定義がまとめられたテキストファイルから同じ名前の関数を見つけ出してその内容を実行ってこと?
スクリプトと連携しなきゃキツイんじゃないかな

36: モダンノマド 2016/09/08(木) 20:21:06.993 ID:qyUBBHIId
>>33
まさにそんな感じですわ

ややこしいってのは勘弁
上の他の人も言ってくれてるけどinclude増やしたりを許容したらすぐさま終わる

あとなんかID変わったっぽい?

34: モダンノマド 2016/09/08(木) 20:18:56.101 ID:qyUBBHIId
bool 関数A( string A ) {
return true or false
}

bool 関数B( string B ) {

}

bool 関数C( int C, int c ) {

}

この関数A-Cは随時追加されていくbool型を返す奴

プログラムやヘッダファイルの変更なしでやりたくて
俺は俺のプログラムで

int main() {
check();

return 0;
}

bool check( ) {

while( テキスト読み込み ){
   if( false == 読み取った関数名( 読み取った引数 )) {
return false;
}
 }
return true;
}

35: モダンノマド 2016/09/08(木) 20:19:45.460 ID:iJ4h1+M30
ヘッダファイル先に書いてAPI定めりゃ、それで終わりじゃん
え?何か難しいことある?

37: モダンノマド 2016/09/08(木) 20:22:03.602 ID:qyUBBHIId
>>35
すまん
APIだと簡単に終わるの?関数と何が違うん

40: モダンノマド 2016/09/08(木) 20:24:19.593 ID:iJ4h1+M30
>>37
いや、要するに先にヘッダファイル作って、関数名と引数定義しとけってこと
apiの意味は自分で調べて

それがしたくないのはわかったが、やる意味がわからない

41: モダンノマド 2016/09/08(木) 20:28:06.344 ID:JUJ77pdxd
>>40
テキストをある法則に従って変更すればどれだけでも追加が可能
そんな形式にしたい
プログラムの変更箇所増えるより変更が一律だから楽だから

インクルードするのはできるけども
それって毎回ヘッダも中身も変えなきゃだから二重で修正することになるから避けたい

42: モダンノマド 2016/09/08(木) 20:31:48.792 ID:iJ4h1+M30
>>41
調べないで言うけど、関数ポインタで良くない?
checkの引数に関数ポインタを渡す

多分これでできる、はず

45: モダンノマド 2016/09/08(木) 20:35:22.613 ID:PC27TQ1Gd
>>42
関数ポインタ使ったことないな
それは俺の要望を叶えてくれる可能性あるのかね

38: モダンノマド 2016/09/08(木) 20:22:36.632 ID:QYHg1kfR0
インタプリタ作るのと変わらんな
しかもC++のとか死ぬやろ

41: モダンノマド 2016/09/08(木) 20:28:06.344 ID:JUJ77pdxd
>>38
そんな難しいんか

39: モダンノマド 2016/09/08(木) 20:23:08.118 ID:L4juil7b0
IISのCSHTMLはそのままコンパイルしてないテキストのコードでいけるの知ってたけど
普通のC#でもコンパイルなしで実行できるのか

45: モダンノマド 2016/09/08(木) 20:35:22.613 ID:PC27TQ1Gd
>>39
もう少し訳してくれ

44: モダンノマド 2016/09/08(木) 20:34:08.926 ID:nbJVLjiKa
そもそもなぜcなのか

45: モダンノマド 2016/09/08(木) 20:35:22.613 ID:PC27TQ1Gd
>>44
俺が使えるのがこれぐらいだからだ…
他の言語なら簡単にできる?

46: モダンノマド 2016/09/08(木) 20:39:15.254 ID:rOGtjn8ud
友人がどれだけ関数追加しても>>1がソース修正して再コンパイルしなくて済むようにしたいんだろ?

解決策の検討も付かんわすまんな

47: モダンノマド 2016/09/08(木) 20:39:45.241 ID:PC27TQ1Gd
>>46
要約してくれただけでありがとう

48: モダンノマド 2016/09/08(木) 20:40:17.297 ID:BdEIRhbW0
関数ポインタじゃ無理
既存のスクリプトを何か導入するかスクリプトを作るかのどっちか

49: モダンノマド 2016/09/08(木) 20:40:44.713 ID:PC27TQ1Gd
>>48
スクリプトってのは具体的にどんなのなんだ?
作ったことがない

51: モダンノマド 2016/09/08(木) 20:42:23.866 ID:BdEIRhbW0
>>49
C言語の簡単版をお前が作るだけ

58: モダンノマド 2016/09/08(木) 20:48:52.309 ID:PC27TQ1Gd
>>51
なんか理想と違う

63: モダンノマド 2016/09/08(木) 21:00:27.203 ID:BdEIRhbW0
>>58
理想と違うと言われてもやりたいことはそれだからそうとしか言えん
せめてC#なら簡易のスクリプトつくるにしてもリフレクション使えしかなりハードルは下がる

65: モダンノマド 2016/09/08(木) 21:02:09.769 ID:PC27TQ1Gd
>>63
C#も可
リフレクションとやらを使うとどんな感じになるんだ?

69: モダンノマド 2016/09/08(木) 21:10:41.799 ID:BdEIRhbW0
>>65
相手のコードがc#でビルドされてるのが前提で
事前にAssembly.LoadFromでdll取得して
後はテキストから関数名と引数引っ張って事前に読み込んだassemblyからGetTypeで型とってGetMethodでメソッドとって引数は配列に詰めてInvokeする

70: モダンノマド 2016/09/08(木) 21:15:39.141 ID:PC27TQ1Gd
>>69
なんとなくイメージはついた
開発環境は揃えないといけないよね

57: モダンノマド 2016/09/08(木) 20:48:46.374 ID:iJ4h1+M30
>>48
そうだな、この場合だと無理だな

スクリプトでも書いてコンパイルし直し?
まぁ頑張って

52: モダンノマド 2016/09/08(木) 20:42:39.207 ID:EG0rSBU00
なんてワクワクするスレなんだ

54: モダンノマド 2016/09/08(木) 20:44:40.778 ID:3F3L4qF40
多重起動するためにMutexオブジェクト閉じたいんだけど
このMutexオブジェクトは子ハンドル言うんか?
それをC++で操作するためにはどうすればいいん?

59: モダンノマド 2016/09/08(木) 20:51:44.487 ID:BdEIRhbW0
>>54
mutexはスレッドに紐付いてるから無理

61: モダンノマド 2016/09/08(木) 20:54:25.109 ID:3F3L4qF40
>>59
でもプロセスエクスプローラーなんかの高機能タスクマネは出来るやん

63: モダンノマド 2016/09/08(木) 21:00:27.203 ID:BdEIRhbW0
>>61
スレッドの実行権奪った上じゃないの?
自分含めその辺の有象無象に出来ることとは思えないけど

55: モダンノマド 2016/09/08(木) 20:44:46.493 ID:ShJu8hIU0
txtからstring拾う  エディタ開いて拾ってきたやつブチ込んで足りない部分のコード書かせる  コンパイラ動かす  exe動かす

56: モダンノマド 2016/09/08(木) 20:48:21.294 ID:N9reW06S0
>>55batで出来そうだな

58: モダンノマド 2016/09/08(木) 20:48:52.309 ID:PC27TQ1Gd
>>55
なんか理想と違う

63: モダンノマド 2016/09/08(木) 21:00:27.203 ID:BdEIRhbW0
>>58
理想と違うと言われてもやりたいことはそれだからそうとしか言えん
せめてC#なら簡易のスクリプトつくるにしてもリフレクション使えしかなりハードルは下がる

60: モダンノマド 2016/09/08(木) 20:52:03.169 ID:NIEbbAXQ0
俺もこんなんできたら良いなって10年くらい前から思ってた
>>1応援してるぞ

62: モダンノマド 2016/09/08(木) 20:57:55.651 ID:R+p1TTYCa
すっげー懐かしいけど、伺かみたいなことをやりたいんよな
でもそれをC全体となるとなぁ……C言語のIDE作るのとほぼイコールだぞ
関数A~Cで使える機能を限定しまくる方向で煮詰めていったら?

64: モダンノマド 2016/09/08(木) 21:01:28.594 ID:PC27TQ1Gd
>>62
俺もそうはしたいけど機能拡張は完全にされていくのは決定事項なんだわ
一番楽なのはプログラム変更だけど…それは大変なことが後半に起きていくことになるんだよな
現時点で30ぐらい関数あるみたいだし

66: モダンノマド 2016/09/08(木) 21:03:53.139 ID:NIEbbAXQ0
テキスト投げたらソースへの貼り付けからコンパイルまでしてくれるの作れば良いんじゃね

67: モダンノマド 2016/09/08(木) 21:04:47.614 ID:lyZqRkC+a
1:ファイル読み出し
2:テキスト抽出
3:文字列と関数名の突合せ
4:関数呼出

要するにプログラムの要素としては
これらができればいいんだろ?

3が一番悩みどころだが

70: モダンノマド 2016/09/08(木) 21:15:39.141 ID:PC27TQ1Gd
>>67
そういうこと
3で結果悩んでる

68: モダンノマド 2016/09/08(木) 21:05:46.161 ID:lXppNXdj0
リフレクション的なものは使うな
つまりテキストをそのまま実行しようとするな
遠回りでも堅実で面倒なコードの方が結果的にいいものになる
少なくとも>>1の問題は

71: モダンノマド 2016/09/08(木) 21:18:36.359 ID:ShJu8hIU0
なるほど txtに含まれる関数の種類だけスイッチ書けばいいのか

72: モダンノマド 2016/09/08(木) 21:23:29.074 ID:PC27TQ1Gd
>>71
それなんて糞プログラム

73: モダンノマド 2016/09/08(木) 21:25:01.492 ID:N9reW06S0
>>71
実行時に全部先読みして、文法エラーが無いか確認した方がいいよ

75: モダンノマド 2016/09/08(木) 21:31:20.346 ID:61l5107Q0
>>71
出来ればテキストのルールに従ったスイッチがいい

関数名は1文に1個だけ、必ず改行で終わる
というルールに則ったテキストなら

■テキストにある関数名の個数分繰り返し
│関数名文字列1つだけ取出し
│関数名の入った変数(配列?)と突合せ
│突合せ一致→ループ抜ける


みたいにしたい

76: モダンノマド 2016/09/08(木) 21:32:40.679 ID:PC27TQ1Gd
>>75
まさにこんな感じだわ
引数とかの制約まで出てくるけど

74: モダンノマド 2016/09/08(木) 21:28:25.536 ID:BdEIRhbW0
チェックは排除してバッファオーバーランによる拡張性を残すべき

77: モダンノマド 2016/09/08(木) 21:33:40.588 ID:nbJVLjiKa
Ruby でやってみた。

----------------
sample.rb
----------------
FUNCTIONS_FILE_NAME = './functions.txt'

loop do
print

78: モダンノマド 2016/09/08(木) 21:36:02.785 ID:PC27TQ1Gd
ルビーってそんな有能なんか?

79: モダンノマド 2016/09/08(木) 21:39:13.409 ID:vRF8Z3IA0
これC++かC#で実現しないといけないの?
どうしたって面倒な実装になるんだから他の手を探したほうがいい気がするが

81: モダンノマド 2016/09/08(木) 21:44:33.782 ID:PC27TQ1Gd
>>79
俺のコードかけるのがその辺しかない

80: モダンノマド 2016/09/08(木) 21:40:28.698 ID:RUkwDRw+0
COMにすればできるべ

82: モダンノマド 2016/09/08(木) 21:44:44.233 ID:PC27TQ1Gd
>>80
COMってのはなんだ?

83: モダンノマド 2016/09/08(木) 21:49:59.731 ID:BdEIRhbW0
もうめんどくせえしPowerShellでいいだろ
. .¥functions.ps1

84: モダンノマド 2016/09/08(木) 22:27:24.927 ID:W/ylfHd50
ん?関数の本体はプログラムの中にあって、関数名だけテキストにあるって事?

スポンサーリンク