C言語なら俺に聞け 15 ..
[2ch|▼Menu]
2:さまよえる蟻人間
19/08/18 01:45:05.03 f2ZPM7Xhd.net
乙。くるしうない。

3:デフォルトの名無しさん
19/08/18 03:38:02.60 26pp6bRY0.net
仮想アセンブラは、元々、日本の情報処理資格試験用に、CASL2 が作られた。
個別のCPU 命令では、試験にふさわしくないから、抽象化した命令が必要だった
でも、世界的には流行らなかった
それで、学生が作った、LLVM に、Apple が飛びついた

4:デフォルトの名無しさん
19/08/18 09:39:05.87 S9bN8HAf0.net
実像を見てない試験で社会から乖離してるな
バkの集団なんだろうか?
それともz80の問題だしたらライセンス料でも払わないといけないのか?
カネに掛けてはとかくケチな貧乏人が思い付きそうな小手先だ
至るところで独自規格で無意味の羅列、全く学習にならず、受けるだけムダな試験が練り上げられる

5:デフォルトの名無しさん
19/08/18 09:57:01.01 OvlvScl60.net
試験用のアセンブラは、仕様を公開せずに
試験問題の中で初見にすればいい
それで対応力を試すようにすれば
いくらか意味のある試験になる

6:デフォルトの名無しさん
19/08/18 10:09:11.56 /GvnB8qbM.net
以前に実施されていたマイコン応用システム開発技術者試験のアセンブラ問題は8080, Z80, 6800からの選択だった
現在の情報処理試験エンベデッドシステムの前身となった資格試験

7:デフォルトの名無しさん
19/08/18 10:17:41.38 S9bN8HAf0.net
実際に使えないものを教えられてるのは英語と同じだな
CASLやっても機械語の練習にならない
「教育用」にまで形骸化すると使い物にならない、現実と実用から乖離する、ファンタジーになる、
これが「教育用」の弊害だ
PASCAL不人気の原因もここら辺にあるんじゃねえか?
IT界隈は教育用と実用の間で揺れてる

8:デフォルトの名無しさん
19/08/18 12:10:38.91 RmgmCswc0.net
>>2 先生 700行の数式パーサーまたHPに載せて下さい!

9:デフォルトの名無しさん
19/08/18 13:54:54.01 NDt9ShII0.net
ハゲタマゴどこ行った

10:デフォルトの名無しさん
19/08/19 00:21:34.86 IzREAmBO0.net
生理がこないんですけど
どうしたらいいですか?

11:デフォルトの名無しさん
19/08/19 01:35:14.42 HWxct0dM0.net
>>10
D

12:デフォルトの名無しさん
19/08/19 02:31:19.64 WV8MsfnG0.net
コンパイルもリンクも正常に動いているようだぞ
生まれたのがバグじゃなくて良かったな ha ha ha

13:入門
19/08/19 07:50:31.64 AfRfI86I0.net
URLリンク(program-lecture.info)
ここのサイトを見ながら学習しているのですがこのshowStatus関数では何故int配列を
int型の仮引数で受け取れてるのでしょうか?配列は配列かポインタでしか受け取れないと思ってたんですが
その認識は間違ってますか
よろしくお願い致します。

14:デフォルトの名無しさん
19/08/19 08:28:31.64 kSnvMIS70.net
>>13
showStatus()はint型でもint型配列でもなくcharacter型を受け取ってるようだが?

15:デフォルトの名無しさん
19/08/19 09:48:04.61 O1nZQbpw0.net
showStasus() の引数は struct person 型の実体を受けてる
main では
 struct person 型の配列を用意 party[]
 配列の各要素 party[0], party[1] のぞれぞれについて showStatus() を呼んでいる
本質的には
 void foo(int arg);
 int main() {
  int array[2];
  foo(array[0]);
  foo(array[1]);
  return 0;
 }
これと同じ

16:入門
19/08/19 17:57:43.49 7obxXURV0.net
>>15
理解出来ました。ありがとうございます( ;∀;)

17:蟻人間
19/08/19 20:10:40.78 GYeBbzEk0.net
>>8
あのコードは今となっては時代遅れだ。意味がない。

18:デフォルトの名無しさん
19/08/19 20:19:09.86 PrhOfqin0.net
先生書き直さないんですか?w

19:蟻人間
19/08/19 20:20:07.30 GYeBbzEk0.net
>>10
産婦人科へGo!
URLリンク(www.mylohas.net)

20:デフォルトの名無しさん
19/08/24 22:48:02.26 UVaZe+22a.net
下のコードの部分を実行すると、最後の行だけ2回表示されます。
理由はなぜでしょうか?また、最後も1回にするにはどう変更したら良いでしょうか?
よろしくお願いします。
URLリンク(codepad.org)

21:デフォルトの名無しさん
19/08/24 23:20:14.88 xKwct0SAM.net
>>20
if ( !fgets(buf, sizeof(buf), fp) ) break;

22:20
19/08/25 00:34:55.25 9+tsViui0.net
>>21
サンクス!
While 行と fgets 行の間にその行を入れたら1回になりました。
修正はこれで良いのでしょうか?

23:20
19/08/25 00:46:09.40 9+tsViui0.net
>>22 の修正だと最後の行以外にもだいぶ表示されなくなってました。
どうするのが正解なのでしょうか?

24:デフォルトの名無しさん
19/08/25 00:52:09.44 uvOm2rq20.net
良いのか?って聞かれると
色々言いたくなる奴が大勢出てきそう

25:デフォルトの名無しさん
19/08/25 01:04:15.99 uvOm2rq20.net
>>23
//while ( !feof(fp) ) {
while (fgets(buf, sizeof(buf), fp)!=NULL){
//fgets(buf, sizeof(buf), fp);
こんなんでどうか

26:20
19/08/25 03:58:18.71 9+tsViui0.net
>>25 うまくいきました! Thanks!
やっぱり俺に訊けスレですね。ここの人達はすごい。
if ( (fp = popen(cmdline,"r")) == NULL ) {
perror ("can not exec commad");
}
while (fgets(buf, sizeof(buf), fp)!=NULL){
printf("%s", buf);
}
pclose(fp);
最終的にこうなりなした。助かりました。

27:デフォルトの名無しさん
19/08/25 04:09:39.00 SpCWKyo10.net
Ruby では、Windows の、powershell, clip コマンドも呼べる。
UTF-8, CP932 の文字コード変換もできる
クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる
str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換
ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end

28:デフォルトの名無しさん
19/09/12 14:34:32.33 PzZxK66KM.net
defineマクロで以下をやりたいです。
struct my{
int d0 =0;
int d1 =0;
int d2 =0;
int d3 =0;
int d4 =0;
}:
struct my val;
val[0:2] = (1, 1, 1);
と入力した時にvalのdata0〜data2に1が入るようなマクロはどう書けばいいですか?

29:デフォルトの名無しさん
19/09/12 18:39:59.73 7fKDA9wF0.net
__VA_ARGS__ つこて2段呼び出しだな
qiita.com/saltheads/items/e1b0ab54d3d6029c9593

30:デフォルトの名無しさん
19/09/15 10:20:29.94 Y/GLm+KZ0.net
>>29
ありがとうございます。
リンクを参考に、可変引数にするマクロまでは出来ました。(作った関数が間違えていたらすみません。)
struct my def2(struct my val, int s, int e, int d1, int d2){
int *p = val.d0;
*(p+s) = d1:
*(p+e) = d2;
return val;
}
/*def3省略*/
#define GET_MACRO(_1,_2,_3,NAME,...) NAME
#define DEF(val,s,e,...) GET_MACRO(__VA_ARGS__, def3, def2)(val,s,e,__VA_ARGS__)
ここから、表記を変える方法が分かりません。
下のようなことをしたいのですが、このように書くとコンパイルエラーになりました。
どう書けばいいでしょうか。
#define VAL[A:B]=(...) DEF(VAL,A,B,__VA_ARGS__)

31:デフォルトの名無しさん
19/09/15 12:30:40.49 58rKn0L90.net
マクロ使わずにこれで十分だろ。
typedef struct my;
val = (my){1,1,1};
val = (my){1,1,1,1};
以下のようにはできるけど、
マクロの多用は誰もソースを読みたくなくなるから避けたほうがいいよ
#define SET(v,...) v=(struct my){__VA_ARGS__}
SET(val, 1, 1, 1)

32:デフォルトの名無しさん
19/09/15 13:05:57.26 Y/GLm+KZ0.net
>>31
すいません、説明不足でした。
どうしてマクロかと言いますと、3つのデータを入れたい場所が0〜2だけではなく5〜7や2〜4の場合もあるからです。

33:デフォルトの名無しさん
19/09/15 13:41:31.71 58rKn0L90.net
#define SET(x,s,e,...) memcpy(((int*)&val)+s,&(int[]){__VA_ARGS__},sizeof(int)*(e-s))
SET(val, 1, 3, 1, 1)
SET(val, 1, 4, 1, 1, 1)
部下がこんなコード書いてきたら突っ返すわ

34:デフォルトの名無しさん
19/09/15 15:47:59.75 v7T7Pyv90.net
ID:Y/GLm+KZ0 が上司だったらと想定してみよう。

35:デフォルトの名無しさん
19/09/15 15:59:14.90 58rKn0L90.net
自分の考えが浅はかでした。申し訳ありません

36:デフォルトの名無しさん
19/09/17 11:43:21.23 tz0JLczQ0.net
>>34
背中を撃たれてしまうのでは・・・?

37:デフォルトの名無しさん
19/09/17 13:01:08.68 pZqZMIzxM.net
うーん、どうにかして上のように[]を使って書き換えることは出来ないのですかね。
ちなみに下のようにして全パターン定義しようとしたらエラーでした。何故でしょうか。
#define val[0:2]=(...) DEF(val,0,2,__VA_ARGS__)

38:デフォルトの名無しさん
19/09/17 14:46:00.52 nfIIVgp70.net
マクロ諦めてインライン関数にしたら?

39:デフォルトの名無しさん
19/09/17 19:09:34.89 g1BlUkdva.net
>>37
なぜって、#defineを使用するための構文を完全に無視してるからだよ。こちらが思ったことを都合良く解釈してくれるわけでなく、構文通りの単純な置換をしてくれるだけだよ。
一度ちゃんと調べておいた方がいい。

40:デフォルトの名無しさん
19/09/17 19:57:33.48 pZqZMIzxM.net
>>39
なるほどです。
では、[]や:を利用して独自の構文を定義するのはC言語において不可能、ということですか?

41:デフォルトの名無しさん
19/09/17 20:37:25.67 g1BlUkdva.net
>>40
不可能。やるなら自前でプリプロセサでも書けばいいが、そんなことするくらいなら、ソース上に書くのではなく独自のデータファイルとそれを読み込んでデータを初期化するような処理でも作れば?

42:デフォルトの名無しさん
19/09/17 20:47:01.62 pZqZMIzxM.net
>>41
ありがとうございます。
最終的な目標は、Cを他言語ライクな記述でコーディングすることなので、プリプロセッサについて調べてみます。

43:デフォルトの名無しさん
19/09/17 22:44:02.30 WDh8MszDa.net
新言語作った方が良さそうな。
初期のC++みたいにC言語へのコンバータとして作っちゃえば楽だと思う。Cと同じで良い部分はほとんど素通しで行けるし。

44:デフォルトの名無しさん
19/09/18 03:52:29.58 YwguJHoc0.net
そこまでしてCに拘る意味がわからない

45:デフォルトの名無しさん
19/09/18 05:50:30.71 A+b/Im8h0.net
あの変態的にC言語には見えないObjective CでさえほとんどプリプロセッサでCに変換してからコンパイルしてたと聞くので、やろうと思えばできるんだろうね。

46:デフォルトの名無しさん
19/09/18 07:02:57.91 ik5RQtCe0.net
yaccとlexを使えばできるだろう。たぶん

47:デフォルトの名無しさん
19/09/18 08:32:22.55 cLmp+ocZM.net
独自言語を開発したときなんかはとりあえずCに変換するというのはわりとある話。
コード生成とか最適化とか考えずに済むから。
昔、独自じゃないけど、とある言語からCへのコンバータ作ったよ。
楽しかった。

48:デフォルトの名無しさん
19/09/18 08:40:59.31 vdXxwq0s0.net
コンパイル前にソースを別のソフトで変換、置き換えさせて・・・

49:デフォルトの名無しさん
19/09/18 09:00:45.02 qgVAc8a30.net
そしてCにもどるネズミの嫁入り

50:デフォルトの名無しさん
19/09/18 12:47:21.47 1Vhu13ZT0.net
BNFとyaccのお勉強から

51:デフォルトの名無しさん
19/09/19 15:34:03.81 yCvdPLl+M.net
#define ARR_NAME(n) arr##n
int arr0 [] = {0,0,0};
int arr1 [] = {1,1,1};
int* select_arr(int i){
return ARR_NAME(i);
}
これはどうしてコンパイルエラーになりますか?
ちなみにreturn ARR_NAME(0)だと正しく動きます。

52:デフォルトの名無しさん
19/09/19 16:38:05.33 1k0/HGmS0.net
タイミングの問題だ
#defineはコンパイル前に解釈されるが
関数仮引数の値は実行時に渡される
実行時とはコンパイル〜リンクまで全て終わった後の話だ
だから関数仮引数の値を#defineで置き換えることができない

53:さまよえる蟻人間
19/09/19 17:34:18.54 fzYUHnaEd.net
arriという変数はない。プリプロセッサでは変数の中身までは見られない。

54:デフォルトの名無しさん
19/09/19 18:13:33.75 yCvdPLl+M.net
分かりやすかったです。ありがとう。
この機能の代替として良き方法はありますか?配列のdimを増やすしかないですか?

55:さまよえる蟻人間
19/09/19 18:22:24.66 fzYUHnaEd.net
次元を増やすのがベストだろう。

56:デフォルトの名無しさん
19/09/19 18:23:38.47 QG4rugRZ0.net
配列変数名はコンパイル時には分かっているのだから
その配列のアドレスを格納したポインタ配列を用意してやる

57:デフォルトの名無しさん
19/09/19 18:24:58.88 Hv2f/JNH0.net
>>55
これに1票。

58:デフォルトの名無しさん
19/09/20 15:15:19.52 X5/vL2CD0.net
                            __、
                iー'゙゙゙゙''''ー-,/^´  ゙';
                |      ゙ゝ....‐  .}
                !           |,
                   i____________......r'".'''゙ヽ  . ..,,、
                ,,. -/        `'ー  |      .' 、
             ,..-'"  l゙          __.. -''′     ./
        . ,/     .`''''〜- ....---''''"゛        ,/
       /.,,                           ,,..r'"
         `''ー、,、                 _,,,-'"  `!、
               /'r‐、          ,/´ /゙゙',    ヽ
            / レ'゙ ´゙リ´ . `^^゙゙゙゙゙゙厂j  .! │    . l
           /  |  .l.      丿/ / . /      !
            l  !  .,,....--ー'''''''″ /  .| (、     . !
         _  .ィ‐¨゙゙'广゛ ......    ./  ,ノ.l.  `'ィ ..,,_/
     ..-‐'"゛  'l_゙'ーノ`' ..........,,_ .,, -"  / │   .!   ゙''''-.
   .i''i       ヽ、          /  .!    !
   ,)イ      : ..,,,,,>u;;;;,、.__ _,,,.. /    |    "
  / . 、          !  .`             |
     !,                     ,!
     ."                        ゙

59:デフォルトの名無しさん
19/09/20 17:51:25.98 /93Uxf6sM.net
それは増やさなくていいから


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1684日前に更新/17 KB
担当:undef