[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/28 01:12 / Filesize : 253 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 142



1 名前:デフォルトの名無しさん [2017/08/10(木) 20:21:23.44 ID:hEocmkh50.net]
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


mevius.2ch.net/test/read.cgi/tech/1500293207/
www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

75 名前:デフォルトの名無しさん [2017/08/18(金) 15:25:50.71 ID:+zi/zXZ30.net]
>>72
128が標準にあれば使い途いろいろあるぞ

76 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 15:40:25.23 ID:RRX5RBja0.net]
>>73
GNU make なら -d (デバグ表示)とかは?

ただ「なぜこれが実行される」って、ファイルの更新日時ぐらいしか
ないと思うけど

77 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 16:57:07.47 ID:UodSk1FQ0.net]
>>75
このコマンドを実行したのは○○より△△が古いから
って言うのを知りたいんでしょ
$^ の意味も知らないならROMってなよ

>>73
make コマンド自体に手を入れた方が早いかも

78 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:57:47.45 ID:aoGOUUu+0.net]
C関係ないんだから、別スレでやれよ

79 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:41:27.26 ID:2qfgYUHL0.net]
すみません初歩的なことですが・・
前置インクリメントa++
後置インクリメント++a
がありますが、a=a+1は後置になりますよね?

80 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:44:00.68 ID:m74Y+4jlM.net]
b=a++ と b= a= a+1 は違う気がする。

81 名前:片山博文MZ mailto:sage [2017/08/18(金) 20:47:26.76 ID:sjvn+N2bd.net]
どちらでもない。

82 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:49:13.42 ID:5LpMFucB0.net]
加算と代入

83 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:51:16.52 ID:2qfgYUHL0.net]
回答有難うございます
実験してみたのですが、a=a+1は前置(a++)にも後置(++a)にもなるのですね
i.imgur.com/teLsUGY.jpg



84 名前:デフォルトの名無しさん [2017/08/18(金) 23:11:42.85 ID:+zi/zXZ30.net]
違う! 前置だ
b = (a = a + 1);

85 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 23:21:22.94 ID:5LpMFucB0.net]
a[i++] = i; は悪魔召還だけど
インクリメント演算子なしのこれ
 a[i =i+1] = i;
も鼻から悪魔になるのかな

86 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 23:57:54.41 ID:nSj4GkNd0.net]
>>78
>前置インクリメントa++
>後置インクリメント++a

考え方が逆
変数を基準に考えるのではなく演算子を基準に考える
前置インクリメント++a : 演算子を’前’置した場合、変数(式)の評価’前’に演算子が適用される
後置インクリメントa++ : 演算子を’後’置した場合、変数(式)の評価’後’に演算子が適用される

87 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 00:03:09.07 ID:0xgPi4RO0.net]
>>84
なるでしょ
iの変更と最後のiの評価の間に順序性がない事に変わりはない

88 名前:デフォルトの名無しさん [2017/08/19(土) 09:44:47.22 ID:CpINIl4e0.net]
i = i + 1;
の、iの変更と最後のiの評価の間の順序性は?

89 名前:C言語ますたー《ますたー軍団(常時募集)の長》 [2017/08/19(土) 09:54:20.36 ID:6ANTyB1VM.net]
>>87
i+1のiは変更前のiでしょ

90 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 10:03:42.32 ID:cD3Bg7W9d.net]
>>30
デバッグしないのか?

91 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 10:37:04.42 ID:opyN89fo0.net]
デバッガはデバッガで起動すればいいし、printf があるし。

92 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 11:26:43.49 ID:0xgPi4RO0.net]
>>87
6.5.16 Assignment operators
「The side effect of updating the stored value of the left operand is sequenced

93 名前:after the value computations of the left and right operands. The evaluations of the operands are unsequenced.」
左オペランドの変更は、左右オペランドの評価の後
[]
[ここ壊れてます]



94 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 12:19:31.20 ID:9KU7ntuJ0.net]
>>84
MISRA-C で、禁止されている

a[式]
この式に、副作用があったら、ダメ。
バグるから

95 名前:デフォルトの名無しさん [2017/08/19(土) 15:28:05.17 ID:CpINIl4e0.net]
>>91
thx
だよな、そこは断り書きが必要な箇所

96 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 23:53:05.68 ID:HeBiuDVT0.net]
>>92
バグが入りやすい書き方ってだけでバグるわけじゃない

97 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 00:16:58.16 ID:856Qy56L0.net]
a[i++]= b; は問題ないしな。

98 名前:デフォルトの名無しさん [2017/08/20(日) 03:47:32.99 ID:+c5k6kJk0.net]
右辺の結果を出してから左辺の計算やってるようだな。
https://paiza.io/projects/G_durt7YVnR55npMvUcKwg

99 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 06:41:37.88 ID:6XW1JaY/0.net]
i.imgur.com/BmPLoWb.png

100 名前:デフォルトの名無しさん [2017/08/20(日) 09:25:38.38 ID:sGdhnhOm0.net]
事実上どうなっているという話ではなく
理屈の上でどうなのかという話
ちゃんと断り書きがあったからめでたしだが
そうでなかったら大変だった

101 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 09:58:54.27 ID:SbUj3AhWM.net]
>>76
ありがとう
ちょっとmake読んでくる

102 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 11:22:32.57 ID:chgkyZKA0.net]
defineした定数を文字列定数にいれるにはどうしたらいいの?

#define EOL 0x0d

const char version_message[] = "Version 1.0\x0d"

↑この文字列の改行コードに定数EOLを展開した値を入れたいです。

103 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 11:44:36.20 ID:xXPB4eWM0.net]
>>100
https://ideone.com/LeNUGK



104 名前:デフォルトの名無しさん [2017/08/22(火) 11:47:40.32 ID:przmPyd7E.net]
typedef struct hoge {
int a;
int b;
} hoge;

hoge h = {1, 2};

構造体に含まれるメンバ名と値を全て出力する方法を教えてください
上の構造体なら
a,1
b,2
と出力したいです

105 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 11:59:42.09 ID:GCxyf0Da0.net]
>>100
小さな部品を繋いで大きなものを得るのはとても簡単にできるけど
部分を削って小さな部品を得るのはとても大変なのよ
だから本来は改行文字は機能的にレイアウトなのでデータとは分離しておいて
表示なりなんなりするときに結合して使うのが望ましいもちろんVersionと数字もね

その上で既存コードのメンテ等でどうしても必要なら>>101がベスト

106 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 12:08:53.86 ID:R9ds2cCvH.net]
>>100
#define EOLSTR "\x0d"
const char version_message[] = "Version 1.0" EOLSTR;

107 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 12:11:18.37 ID:xXPB4eWM0.net]
>>104
それは迷ったんだよねー
次点でその文字列をマクロで作ることも考えたけどあかんかったw

108 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 12:14:35.93 ID:GCxyf0Da0.net]
>>102
変数名はあくまで人間が扱いやすいように何らかの領域(一般的にメモリアドレス)に付けるあだ名であって
プログラム(コンピュータ)的にはメモリアドレスのほうが扱いやすいのであだ名は不要(アドレスのほうはプログラム的に出せる)
なのであだ名のほうが欲しいなら以下のように直書きするしかない
printf("%s,%d\n", "a", h.a);

109 名前:デフォルトの名無しさん [2017/08/22(火) 12:52:42.46 ID:przmPyd7E.net]
>>106
そうなんですか・・・
全部直書きするのキツイのであだ名がなくてもかまわないのでこの場合の方法ないでしょうか?

110 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 13:00:37.52 ID:u9fcDp43H.net]
デバッグ目的ならデバッガで

111 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 13:20:20.96 ID:chgkyZKA0.net]
>>101,104、ありがとうございます、

PCとUSBシリアルで通信する組み込み機器のドライバをメンテしていて
受信したテキストの終端検出にEOLはキャラクタで扱っているし
送信する固定テキストは改行含めてリテラルにしたく
プリプロセッサの#か##で連結でなんとかできないか悩んでました。

112 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 13:21:07.96 ID:bF0tRsYk0.net]
コンパイルしたらメンバー名と型の情報は消える

113 名前:C言語ますたー《ますたー軍団(常時募集)の長》 [2017/08/22(火) 15:44:32.04 ID:tfXVsICTM.net]
メモリアドレスを出力させればいいんじゃない?
%pで&aを表示できるはず



114 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 16:43:27.00 ID:xXPB4eWM0.net]
与えられた変数から、メンバ名とその値を再帰的に列挙して欲しいんだろうけど
そんな都合の良い言語じゃないから自分で並べるしかない

必要に応じて毎回並べるか
並べて出力したものを関数化しといてそれを呼び出すか

115 名前:デフォルトの名無しさん [2017/08/22(火) 17:44:12.68 ID:NIldwpVs0.net]
再帰的に列挙は自動だととんでもない情報量になったりするからな
そこから欲しい情報をどうやって抜き出すかが頭の使いどころ

116 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 22:53:39.27 ID:YwU2BQ/U0.net]
>>100

#include <stdio.h>

#define EOL x0a
#define _STRING(s) # s
#define STRING(s) _STRING(s)
#define _VALUE(s) 0 ## s
#define VALUE(s) _VALUE(s)

char a[] = "Hello" STRING(\EOL);

void main(void) {
int n;

n = VALUE(EOL);
printf("%02x [%s] \n", n, a);
}

117 名前:デフォルトの名無しさん [2017/08/22(火) 22:53:45.07 ID:hpqXPKX70.net]
>>107
マクロでちょっと簡略化することはできる。ちょっとだけな。
https://paiza.io/projects/dRqn0XFnjDUUmr5_5AzF2A

118 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 22:56:32.37 ID:hpqXPKX70.net]
あ。もうちょっとできたので今修正した。

119 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 23:26:16.15 ID:bF0tRsYk0.net]
>>115
これってさ、メンバ名をconst char*にするんだよね?

120 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 23:41:21.22 ID:D8nSL4rC0.net]
>>115でいいと思うけど、
そもそもこれがしたい場合にC言語を使うのが間違いでしょ。
動的言語かリクレクションがある言語を使えばいいだけ。

ちなみにVC++/CLIでよければリフレクションが使えるけどね。
質問者には無理だろうけど。
レベルからいって>>108が当たりだろうね。

121 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 00:06:55.83 ID:b0JJUPNx0.net]
>>117
#x の所? そうじゃないかな。gcc -E とかやって見てみるとわかると思うが、 h.a は単純に "h.a" になっている。

>>118
C使わなきゃいいってのはその通りだが、それを言っちゃあお終いよ。

122 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 00:14:59.00 ID:PJzK0CC4M.net]
構造体のメンバ名がほしいとかデバッグ以外に何があるの

123 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 00:22:23.00 ID:CuDbJhab0.net]
>>120
有名どころはGUIのバインディング。
例えばWPFは自動的にリクレクションを使ってこれをやってくれる。詳細は以下参照。
www.atmarkit.co.jp/ait/articles/1010/08/news123.html

ただ、Cのアプリでこれは要らんし、今時生CでGUIもないよな?



124 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 06:05:17.73 ID:x0fRL5lg0.net]
テキストベースで構造体の値のファイルへの保存と読み込みをしたいのかな

125 名前:デフォルトの名無しさん [2017/08/25(金) 05:26:20.30 ID:vC6ff47f0.net]
マクロでどうにかできるかとも考えたが壊れる対処のし様がない

#define pr(a,b) printf(pr_##a(b))
#define pr_test_t(b) "#b{i:%d,s:%s}", (b).i, (b).s
typedef strct{int i; char *s;}test_t;

pr((test_t){.i=999; .s="abc"});

126 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 05:30:42.91 ID:hNG5yKqv0.net]
Cはウンコ言語なのでリフレクションはありませんの一言で終わる質問

127 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 08:26:26.12 ID:degYWVoy0.net]
C言語はもう 気ままにリフレクション

128 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 08:28:37.56 ID:+VfvF6y6d.net]
>>124
うんこじゃない言語もコンパイラはうんこ言語(お前に言わせるとC言語)でつくられてるけどな

129 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 08:31:15.05 ID:mWX/padLd.net]
本当にうんこならとっくの昔に消えてるよ

130 名前:デフォルトの名無しさん [2017/08/25(金) 15:42:32.73 ID:RGmsOxnq0.net]
Cはうんことかほざくやつ
まさかLinuxなんか使ってねえだろな

131 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 17:02:40.42 ID:mWX/padLd.net]
linuxはうんこ

132 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 17:44:02.80 ID:GY4pXB3S0.net]
Cがウンコとか言ってる奴に限ってRubyでしか書けないとかいうオチだったら笑えるんだけどな

133 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 21:36:12.81 ID:BZOsNf+t0.net]
高級アセンブラ最高じゃん



134 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 22:36:16.04 ID:+VfvF6y6d.net]
>>131
ほんそれ

135 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 22:45:39.22 ID:IHFV3+gX0.net]
むしろ Ruby で自由にコードを書ける人を尊敬する今日この頃。
最近やってるんだけど、どうしても馴染めない。普通には組めるけど、違和感が残るというか抵抗があるというか。

136 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 00:06:54.39 ID:F7j6CSPU0.net]
リフレクションを使う気がなければリフレクション自体がウンコだよ。
・ソースコードがだだ漏れ
・実行体が無駄に膨らむ(ソースコード情報を含むため)
・リクレクションが必要な用途なら、動的言語でついでに型無しの方が断然楽

GUIとかね。
ウンコと言われ続けたJavaScriptを誰も殺せず、
ついにはElectronとか言い出してデスクトップ側にも進出してきてるだろ。
やれば分かるがGUIに関しては動的型無しHTML(=JavaScript)は最強。

C言語はC言語が目指した範囲での仕様は美しいよ。
ただそこには今後ともリクレクションは必要ないね。
唯一引っかかるのは>>122か。

>>133
どの辺が?
俺はRuby使いではないが、それよりも酷いとされるJavaScriptには馴染んでしまったから、
ある程度は答えられるかも。

137 名前:デフォルトの名無しさん [2017/08/26(土) 00:48:52.34 ID:acOQPPj10.net]
lua等の組込み言語とやり取りする container生成用補助構文群が有ってもいい
関数では前方宣言とか scopeが邪魔して対処しきれないだろうから
うまくすれば文字列操作表示も標準libraryから追い出せる

138 名前:デフォルトの名無しさん [2017/08/26(土) 00:52:27.30 ID:acOQPPj10.net]
pr(test_t, (test_t){.i=999; .s="abc";});

139 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 14:20:33.57 ID:rkE5GYva0.net]
>>134
javaでアノテーションいじり始めるとリフレクションまじ便利で欲しくなるけど、c系にはなくてもいいかなというのも思う。

テバグ目的ならgdbでいいしな。

140 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 00:26:03.40 ID:+Y8D6iZy0.net]
>>134
規模が大きい場合は型があって静的に検査できるほうが便利だねというのが世間の流れだと思うが
TypeScriptとかFlowとか
速度を稼ぐ目的でwasmも今後主流になっていくだろう

巨大ストレージ、OSSが主流な時代にメタデータのサイズやソース隠蔽は気にしなくなったし

141 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 02:58:14.41 ID:Uz0lh6nE0.net]
>>138
> 規模が大きい場合は型があって静的に検査できるほうが便利だねというのが世間の流れだと思うが
違うね。今の流れは「選べる」だ。つまり、
・型無し言語に型情報を付加し、恩恵を受ける---TypeScript
・型あり言語に型推論やジェネリックを追加し、型情報を記述する煩わしさを回避---C#/C++/Java
どっちも出来ることはほぼ同じ。ほぼ全ての言語がここを目指してるでしょ。(Cを除く)
要するにいいとこ取りを目指しているわけで、自然な流れだ。
型があった方が助かるのなら書け、煩わしいだけなら書かなくて済む、という方向に進化しつつある。
なお、GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。

> 速度を稼ぐ目的でwasmも今後主流になっていくだろう
ならんと思うし、C使いにとってはなったとしてもああそうですか、でしかないと思うが。

> 巨大ストレージ、OSSが主流な時代にメタデータのサイズやソース隠蔽は気にしなくなったし
OSSについては歪んでいて、本来は選べるべきだよ。
JavaScriptのようにソース曝露必須というのは問題ではある。

富豪どころか大富豪プログラミングを自由に出来る時代ではあるが、
何だかんだで速度=バッテリの持ち/快適さなので、実際は、「気にしなくていい環境も増えた」だよ。
とはいえCレベルでのチューニングが必要なこともそうないが。

142 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 07:49:01.20 ID:pPJ906sN0.net]
>・型無し言語に型情報を付加し、恩恵を受ける---TypeScript
>・型あり言語に型推論やジェネリックを追加し、型情報を記述する煩わしさを回避---C#/C++/Java

後者は型を明示的に書かなくてもいというだけで最初からすべて型検査してるぞ。
型検査について言えば、動的型付け言語に静的な型検査を導入する流れはあるが逆はない。

143 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 08:29:00.57 ID:E7mhir0G0.net]
動かす前にバグが見つかる仕掛けがちゃんとあるなら
動的型付けでも構わんよ



144 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 14:42:19.23 ID:/UmWkn6m0.net]
無理ゲーっぽくね?

145 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 14:47:49.09 ID:/UmWkn6m0.net]
んなことはないみたいだぬ

146 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 18:55:09.32 ID:qEt/+AkhM.net]
100%は無理
そこそこなら行ける

147 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 20:04:11.09 ID://zGX0GI0.net]
option explicit +中間言語コンパイル,なら使えそうだ

148 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 22:43:29.12 ID:Uz0lh6nE0.net]
>>140
> 型検査について言えば、動的型付け言語に静的な型検査を導入する流れはあるが逆はない。
これは事実としてはその通りだが、理由はこれが型あり言語の正義だからであって、
現実は型検査がウザイだけの時も多いだろ。
C++のtemplateとか、varで書いたら勝手にtemplate化してくれ、という場合も多い。
込み入ったことをやるとコンパイルを通すだけの為に苦労したりするが、
あんなのは完全に時間と手間の無駄だ。
また、他でもよく言われているが、確かに関数ポインタを常用し始めた場合、
型あり『しか出来ない』言語は壮絶にウザイ。どうでもいい型が氾濫するだけだし。

言語として出来る/出来ないではなく、
ユーザーがやりたい時には出来る/やりたくない時には切れる、が正解なんだよ。
型無し言語はこれを認めていて、欠点を修正し始めてる。
型あり言語はこれを認められず、まだ自分たちの正義(型検査は必須)を押し売りしてるだけ。

C(と言うかC++)ではconstがこの状況に近いのではないかな?
通説ではconstは付けるべき、となっているが、俺は付けてない。理由は、
・そもそも俺はconstで苦労したことがない(必要性を感じない)
・中途半端に付けてると余計に面倒になるだけ
・const_castとか、ただの馬鹿としか思えない
なんだが、同様の意見の奴もある程度はいるだろ。
過剰な型検査ってのはあるんだよ。それが人によって異なるってだけで。
やればいいって物ではない。

149 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 22:56:30.74 ID:pPJ906sN0.net]
なんだ

150 名前:H>>139の「違うね」ってのは現状認識が違うって話じゃなくてあんたの理想と違うってことか?
そりゃ正解はあんたにしかわからんわ。
[]
[ここ壊れてます]

151 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:14:00.57 ID:Uz0lh6nE0.net]
>>147
現状認識も間違っていると思うけど。
日本語が不自由ならさようなら。

そもそも「型検査」が欲しいわけではなくて、静的チェックが欲しいだけなんだよ。
君は最初からずれている。>>141が正しい。

152 名前:デフォルトの名無しさん [2017/08/29(火) 23:17:01.52 ID:/SLQJmZn0.net]
> コンパイルを通すだけの為に苦労したりするが、
> あんなのは完全に時間と手間の無駄だ。

そうだねえ
自分の考えがはっきりしてなくて筋が通らないのを
コンパイラに突っ込まれ、そのたびに右往左往じゃ
下手の考え休むに似・・いや如かずってやつ

153 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:31:56.37 ID:pPJ906sN0.net]
「今の流れってこうだよね」
「俺の欲しいものは違う」

会話にならねぇ。



154 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:53:00.65 ID:Uz0lh6nE0.net]
>>150
そうとしか取れないのは君が未熟だからだね。

「流れ」ってのは原因ではなく、大多数が希望した「結果」なんだよ。
君は初心者だから、毎日コード書いている連中が何を求めているのか分からない。
それだけだね。

155 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:57:29.58 ID:+Y8D6iZy0.net]
>>139,146
>GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。
見てわかる程度の規模の場合は型無しでもよいだろうね

>型検査がウザイだけの時も多いだろ
どんな時?C#には動的に型解決するdynamicがあるけどほとんど使わないな
COM除けばJSONやXMLの処理で楽するときぐらい?それでも本番用ならちゃんと書くなぁ

>どうでもいい型が氾濫
ジェネリックで型指定するだけだから氾濫しなくね?

あと、constはプログラマーがミスを防ぐためのものであると同時にコンパイラーへのヒントでもある
const修飾されていれば大胆な最適化が可能な場合も多い

156 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 00:01:54.97 ID:3iEZIBUv0.net]
>>151
俺も>>150と同じように読めた。
自分の希望を大多数の希望だと決め付けるのは止めろよ。

157 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 00:53:26.35 ID:F1WQhw000.net]
>>152
> >GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。
> 見てわかる程度の規模の場合は型無しでもよいだろうね
規模にかかわらず、見ずにチェックするGUIなんて無いだろ。

> どんな時?C#には動的に型解決するdynamicがあるけどほとんど使わないな
おー、C#はやはり進んでいるというか、痒いところに手が届いているね。

要するに楽をさせてくれでしかないのだが、ぱっと思いつく遭遇したケースは、
・callbackでdelegateの型チェックがウザイ。グダグダ言わずにcallbackしてこい。
・リフレクション時がかなり最悪。(C#なら問題ないが、
VC++2008とかだと、MSDNで型を調べながら型を書くという本末転倒の事態になる)
以下にはJSONガーとか書いてあるけど、JSONをC++で受けたことはないので実感はない。
ufcpp.net/study/csharp/sp4_dynamic.html#what
後は型無しだとデタラメなパッチが可能だというのもあるし、俺は常用してるけど、
これ自体はあまり推奨されることではないね。

俺はJavaScriptで型をかかないことに慣れてしまったので、
再びVC++で型を書く時にウザくて仕方ない。
(ただしこれはVC++しかやってない時には全く感じなかった)
要するに型情報は具ではなく、ただのチェック用付加情報でしかないんだよ。
例えれば、当たり前に読める漢字にもいちいち全部ルビを付けている感じか?二度手間がウザイ。
ただし二重チェックをしたい部分もあるので、そういうところは書かせろ、とも思うが。
コンパイラにプログラマが合わせるのではなくて、プログラマにコンパイラが合わせるべき。

> ジェネリックで型指定するだけだから氾濫しなくね?
C#は多分そうだね。C#では解決済みかも。

> const修飾されていれば大胆な最適化が可能な場合も多い
この説はよく聞くが、具体的にどういうケースよ?

158 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 00:58:09.18 ID:ry+Kms2n0.net]
>>141
こういうやつってユニットテストしらないのか?

Cでも今時は書くだろ

159 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 01:17:46.58 ID:ry+Kms2n0.net]
型どうこうで考えるべきは依存関係なんだが

静的型言語はすぐに依存関係ができる
そのためにやれ継承だのインタフェースだのデザパタだのとごちゃごちゃ考えなきゃならん

しかもデザパタで実現できる疎結合は完全じゃないからね

160 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 01:56:29.11 ID:F1WQhw000.net]
>>156
それは型ではなくてラムダの利点だと思うが。
ただ、ラムダを積極活用すると型が邪魔だってのはあるし、
結果的に関数型が型無しor型推論に突き進んだのはこれが理由だと思うが。

しかもデザパタって使い物にならんだろ。
というか元々Javaという関数ポインタもラムダもない言語で(キリッされても、
他の言語ならもっとマシに出来るんじゃね?ってのが多いというか、
なんで縛りプレイに付き合わないといけないの?っていうか、
だいたい説明自体もイミフなのが多いし。

161 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 02:00:40.60 ID:vF4qFgfn0.net]
>>154
コンポーネントとかイベントの引数の型を間違えたり変更時に修正漏れが出たりはよくあるでしょ

>callbackでdelegateの型チェックがウザイ
async/awaitがある言語だとコールバックを使うことはあまりないしなぁ
どういうのを望んでるのかよくわからんが、型安全と最適化を投げ捨ててまでやることには見えん
コールバックの処理が適切なことはテストとかで保証するとか考えるとそっちが面倒そうに見えるが

>リフレクション時がかなり最悪
VC++でリフレクションって、どの話だ

>チェック用付加情報・二度手間がウザイ
どうせドキュメントとかテストに書いてくんだから二度手間は避けられん
定義が面倒な分、静的型言語では戻り値の型やメンバーが即座に確実に補完されるので非常に快適
全参照を書き換えるリファクタとかもできるし

新しい言語はそこら辺かなり解決されてる

162 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 02:07:48.34 ID:ry+Kms2n0.net]
>>157
酔ってんのか?Java?意味不明だ

レス付けるなら何を話してんのか特定しろ

163 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 02:25:01.52 ID:vF4qFgfn0.net]
>>154
constはどちらかというと、x + y = zみたいな変な呼び出しを禁じたいからつけてるから、最適化についてはパッとでは極端な例しか思いつかんな・・・
hoge(&a,&b);
c = a + b
でhogeの引数がconstなら処理を無視してa+bを静的に確定できるとか

根本的にC++は「型安全とバイナリの性能>>>楽をしたい」という発想の言語だから静的な型の確定を妨害するような機能は理念に反するでしょ
javascriptにポインタが欲しいぐらいの不自然さ



164 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 06:22:36.60 ID:dAnuHQ8p0.net]
早く夏休み終わらないかな…

165 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 07:01:40.06 ID:AqkMSzAW0.net]
いや終わらなくていいよ
電車混むし

166 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 08:10:07.81 ID:Li+Lo8rKd.net]
大学生のは未だ続くで

167 名前:デフォルトの名無しさん [2017/08/30(水) 13:51:14.27 ID:AB0hyKA3E.net]
すいません
Windowsでvirtualboxとかcygwinとかmsysみたいな名前のをインストールする予定はないんですが
WindowsでCを書く場合はVC++を使うのが定番なのでしょうか?
gccとclangを使うのはあんまりおすすめしないですか?

168 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 13:58:51.95 ID:1qHN72hha.net]
GUIないならgccでも問題ない

169 名前:デフォルトの名無しさん [2017/08/30(水) 14:33:39.82 ID:BJd10UjW0.net]
GUIあってもgcc使えるぞ
gcc your_program.c -luser32 -mwindows

-luser32ってのがインポートライブラリuser32.libを使う指定な
他に色々kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.libなんかがいるんで適宜追加しる

170 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 18:06:52.31 ID:S+MvNVsbM.net]
Windows版のgccある?

171 名前:デフォルトの名無しさん [2017/08/30(水) 18:24:32.41 ID:BJd10UjW0.net]
たとえばこんなのか?
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/

172 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 18:31:00.76 ID:S+MvNVsbM.net]
mingw 入ってない環境だとバイナリ使えないよね。
コンパイルして実行したいだけなのに。

173 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 18:43:05.43 ID:LRl1+/WB0.net]
実行ファイルの配布の意図?
mingwでコンパイルできれば、実行もできる環境が整ってるんじゃないの?



174 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 19:17:06.22 ID:58Rp2mqQ0.net]
>>169
よくごっちゃにしてる人がいるけどそれはcygwinを使う場合
mingwはランタイムにmsvcrtを使うのでcygwin1.dllは不要

175 名前:デフォルトの名無しさん [2017/08/30(水) 19:17:51.85 ID:BJd10UjW0.net]
あのなー・・・
cygwinがそういう批判を受けていたのを踏まえて
「本当のミニマリスト」を目指したのがmingwなんだよ
それすらいやなら、あとはM$純正のbashくらいだぞ

176 名前:デフォルトの名無しさん [2017/08/30(水) 19:21:14.37 ID:qx/wlZ6S0.net]
https://www.youtube.com/watch?v=VzylWELlUy4

177 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 20:36:36.61 ID:ViOUv0iA0.net]
>>167
The Perl for MS Windowsって言うのがある。
これインストールすると、gccも入る
普通にコマンドラインで使える

strawberryperl.com/

178 名前:デフォルトの名無しさん [2017/08/30(水) 20:41:41.90 ID:BJd10UjW0.net]
>>168だって本当に最小限のmingwが黙って入るから意識せずに使えるぞ
で最小限じゃないmingwが欲しくなったらmsys2とか入れるんだよ

179 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 20:52:42.57 ID:t1uAI5x90.net]
こういう枝葉でゴチャゴチャやるぐらいなら、さっさとVC入れたほうが良い
windowsで開発するなら、VCさえあれば十分

180 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 21:46:54.45 ID:1xtdX2a20.net]
コンソールアプリくらいならgccでコンパイルできても良さそうなもんだけどな。

関係ないけど .NET に JS コンパイラが入ってるの知らなかった。

181 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 22:05:25.61 ID:AIW55pOFM.net]
>>168 >>171
知らなかったです。
いいですね、MinGW

182 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:02:07.68 ID:F1WQhw000.net]
>>158
> 引数の型を間違えたり変更時に修正漏れが出たり
ねえよ。正確に言うと、『これが型検査で都合よく引っかかるのは』ねえよ。
型があってコンパイル時に落とせるのは明確なtypoだけで、それ以外は期待出来ない。
xxxx2とxxxx3とかを間違えた場合、通常、型は同じでしょ。

ただそれ以前にJavaScriptだと修正漏れ自体がないっつうか、修正しなくていいというか。
型検査は基本的にソース全体で辻褄が合っているかを検査する。
だから例えば機能追加で関数の引数が増えた場合、コンパイラは修正漏れを全て検出し、修正を促してくる。
ところがJavaScriptにはそういう機能はないから、漏れてしまう、というのがそちらの意見だと思うが、
そもそも漏れても動作するように作られてるから問題ない、というのがJavaScriptの思想。
具体的には、
・同じ関数が引数の数が違っても呼べるから、エラーにはならない。(引数の型/個数はシグニチャに入らない)
・足りてない引数は、undefind(falsy)になっているから、if (addedParameter) で簡単に対応出来る。
だから修正するパス(その機能が追加される動作パス)の部分だけ修正して、後は放置で問題ない。
もちろんこれだとソース内で引数の数の一致なんて無くなってしまう。
これでいいのか?とも思うが、俺が試した範囲では特に問題はなかった。

C#はIDEがいいから、全ソースをリファクタとかも簡単に出来るようだ。これはこれで一つの完成形だ。
そうではなく、手修正だと漏れる、だからコンパイラがそれを検出する、というのも一つの手だが、(C++)
漏れる漏れない以前に、関係ないところは修正の必要がそもそも無い、というのも一つの手だよ。(JavaScript)
ちまちま全修正するのが面倒だし危険だから、
受け側で引数違い毎にラップ(オーバーロード)してたらなんだかなぁ(俺的C++)、
みたいなのとは発想が逆だった。

183 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:03:09.90 ID:F1WQhw000.net]
async/awaitはJavaScriptにもあるが、あれはC#とかで必要なのであって、JavaScriptでは要らないね。
理由は、
・外側関数(上位階層)の変数は全部クロージャになっていて読み出せる。
・関数はどこにでも書ける。
から。C的に関数毎に変数が完全に分離している時にはasync/awaitでないと変数が共有出来ないけど、
JavaScriptの文法だとcallbackでも変数共有出来るから、要らん。具体的には、文法は適当だが、
function someTask {
var x = xxx;
var a = await funcA(x);
var b = await funcB(a,x);
}
みたいなのを、
function someTask {
var x = xxx;
var a, b; // 共有変数は上位で宣言しておく。これでクロージャから捕捉出来る。;
function funcA(){}
funcA(funcB); // funcBはcallback、funcA内でxは使える、aにも書ける
function funcB(){} // funcB内でa,xは使える、bにも書ける
}
だからawait毎にぶった切ってcallbackしても、上から順に実行するだけの単純ソースにしかならない。
JavaScriptなら、どっちでもいいや位でしかないんだよ。
C#ではこれができないから、async/awaitが必要だってだけで。

ただ俺もcallbackと言ったがこれは間違いだった。VC++では非同期のcallbackはやってないわ。
ウザイと思ったのは関数ポインタを差し込む時に型チェックがあることだった。
上記の通り、JavaScriptでは関数ポインタでさえあれば引数の型と個数は関係なく呼んでくるので、
関数ポインタを差し込む時にいちいち考える必要がないんだよ。
そして機能追加は追加パスだけの変更で済む。
C++の型チェックだと変更がソース全体に及ぶしこれを断れない。
引数の型とか個数を間違えた場合、普通は根本的に動かないなら、テストでは当てさえすれば検出出来る。
そんな簡単なエラーチェックの為にコンパイルを通すだけの為にいちいち型を合わせたり、
変更がソース全体に波及するのが危険でウザイって事。



184 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:04:03.99 ID:F1WQhw000.net]
> コールバックの処理が適切なことはテストとかで保証するとか考えると
どのみちテストはやらんと駄目でしょ。と言うか、逆に、
「コールバックの処理が適切なことは『型検査』で保証する」ってのは無理でしょ。
Haskellのキチガイ共はそういう思想らしいが。

「型安全」ってのはバグの一つの形「インタフェース(接続部)の間違い」を検出するだけであって、
処理の中身が間違っている場合は全く検出出来ない。つまりテストは省略出来ない。
それで「型安全」にするために払うコストと、それによって受ける恩恵を考えた場合、
俺にとっては「無いよりマシ」程度で、「投げ捨ててまで」って程の価値はないね。
とはいえtypoを検出する機能だけは欲しいんだが、逆に言えばそれだけで十分だ。

>>160
多分、constで最適化ガーってのはやっぱり無いんだよ。
想定されるケースはそちらの挙げたとおりで、
void someFunc(){
// (A)
hoge(&a, &b); // (B)
// (C)
}
で、(B)で変更されないことを保証されれば、
(A)時点の&a, &bのキャッシュ(というかローカル変数に取ったもの)が
(C)でも有効です、ってだけだが、そもそもこのケースがないだろ。

自関数内で変更してるかどうかはコンパイラには明確に分かるんだから、
考えられるのはこのように他関数をまたいだケースなんだけど、
それなら最初から(A)(C)(B)の順に処理しろ、でしかないし。
((B)で変更されるから(C)は(B)の後ろなのであって)

185 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:14:59.21 ID:58Rp2mqQ0.net]
ただmsvcrtを使うということはvcがサポートするC規格に引きずられるのを留意しておくこと
最新のmsvcrtでもたしかC99止まりでinttypes.hをインクルードしてもPRId64とか使えない
C11の機能が欲しければ素直にlinux+gcc|clangの環境をオススメする

186 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:55:33.72 ID:FdjUx67gd.net]
最適化かけないと通るけど、最適化かけるとセグフォ
プリントデバッグしたらプリント文置いたり減らしたりするだけで最後に表示されるものが変わる
なんだこれ

187 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:01:55.43 ID:B2+zi4Baa.net]
最後に¥0を付けてないとか

188 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:06:31.32 ID:M/UQy7Jt0.net]
>>183
malloc/free使ってる?

189 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:15:15.17 ID:AFctto/wd.net]
>>185
一切使ってないっす……
引数で配列の大きさ渡してるのがまずいのかもしれない

190 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:22:21.25 ID:Mr6ZzHeH0.net]
配列サイズを越えて代入しているとか

191 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:28:32.21 ID:K0ByhO+S0.net]
つかソース晒せないの?

192 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:28:58.33 ID:AFctto/wd.net]
配列の代入とは関係ないところで死んでるっぽいこともあるんだけど、それでも配列の範囲外アクセスとかあるものかなあ……

193 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:31:52.88 ID:AFctto/wd.net]
>>188
そこそこ依存ファイルあるし、一応研究室の研究で書いているので、失礼ながらソースは上げられないです



194 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:32:55.14 ID:AFctto/wd.net]
よく考えたらそんな状態で相談することが間違いか
やっぱり撤回します。スレ汚しすいませんでした

195 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:34:49.91 ID:M/UQy7Jt0.net]
>>190
メモリリークをチェックしてみたら

196 名前:デフォルトの名無しさん [2017/08/31(木) 02:33:47.40 ID:KfXpPD/x0.net]
最適化の有無で変わった事と言うと、この前こんなことがあった。
(以下の A, B は typedef された構造体)

A *p = NULL;
B *q = NULL;

if (...) {
 A x;

/* x の初期化などをする。 */

 p = &x;
}

if (...) {
 B y;

/* y の初期化などをする。 */

 q = &y;
}

この後で p が NULL でなければ p の指す先を使おうとして死亡。

まあ、ブロック(というかスコープ)から外れた所で使ってるんだから当然と言えば当然ではあるが、
最適化しない場合は x, y はその他のブロック外の自動変数と同じようにスタックに領域が取られ
ていて変化する事がなかった。そのため内容は保たれた。
しかし最適化したら A の領域は A のあるブロックから外に出たら破棄されたと解釈され、そして
B のあるブロックの B の領域として上の A の領域を使用するようになっていた。そのため x と y
の指す先は union のように重なってしまっておかしくなったと。

197 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 03:22:36.47 ID:IR3nOS0l0.net]
>>179
いや、もっと単純に、APIの仕様変更で取得できる情報や型が変化したけど、エラー処理とか偶然うまく見える場合とかは目視では見落としがあるよねということ
テストを書く前に簡単に修正箇所がわかれば便利みたいな話だけど、まぁ、やり方やライブラリによって違うのかもね
少なくともAngularとかはTypeScript採用だし、型あったほうが便利派は少なからずいるよとだけ

198 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 03:58:43.17 ID:IR3nOS0l0.net]
>>180,181
C#でも同じようにラムダ式やローカル関数で変数をキャプチャできるぞ
というかC++でもできるはず

コールバックは階層が増えたりエラーや例外処理、分岐などが生じるとどんどん複雑になって単純には行かなくなる
それを解決するのがPromiseで、それを更に単純に記述するのがasync/await
新しいライブラリとかはPromiseで返すのが当たり前になって来てるし、今後の言語もasyncに舵をきるんじゃないかな

>関数ポインタを差し込む時にいちいち考える必要がない
C++でどうやって実現すんの?
char *を受け取る関数ポインタにとconst char*で受ける関数ポインタを入れてエラーにしなかったらややこしくて危険なだけでしょ

コンパイルエラーじゃなくてテストで保証するとになればなおさら変

199 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 04:15:22.77 ID:IR3nOS0l0.net]
>>181
>最初から(A)(C)(B)の順に処理しろ
何言ってんだBとかCに副作用があるなら入れ替えちいかんだろ

コードは適当だけど、
void test(a,b)
{
hoge(&a,&b);
piyo(a+b);
}
test(1,2)
みたいに静的に確定するなら、piyoの引数をコンパイル時に計算してpiyo(3)みたいなコードをはいてくれたりもする

200 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 05:12:55.38 ID:egwbmqN8M.net]
スタックフレームの破壊は明白なんだから関数内で宣言してる配列全部の
範囲チェック入れてみな

201 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 11:26:29.57 ID:e5ym4hpC0.net]
やりそうなこと

□ 要素数 n=10 の配列 int array[10];
アクセス可能なのは array[0] 〜 array[n-1] まで
なのに array[n] を利用してる

□ 文字列による配列の初期化で 終端記号(\0)含んだ分の領域を用意してない
× char text[3] = "123"; // 終端記号含めると 4要素の空間が必要なのに 3要素にしてる
○ char text[] = "123";  // コンパイラにおまかせで

□ 要素数を求めるのに sizeof(a) / sizeof(a[0]) を使ってるけど
そもそも論で a が配列ではなくポインタだった為
処理したい要素数が渡っていない

202 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 13:55:57.05 ID:wUqC2S3T0.net]
>>183
研究室から出せない秘伝のソース、
なら特殊なハードウェアで、実はvolatileが欠かせない、とかじゃねえの
ソースの向こうのハードウェアが実は核分裂制御装置でした!……とかでももう驚かねえよ

203 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:11:13.20 ID:aZ9Rj489d.net]
創業当時から継ぎ足した秘伝のソース



204 名前:デフォルトの名無しさん [2017/08/31(木) 16:17:00.98 ID:JYM1pg890.net]
半分使って、半分継ぎ足しを繰り返すと79回目あたりで
アボガドロ定数の逆数くらいに薄まるよね

205 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:47:29.73 ID:aZ9Rj489d.net]
何か、酵母とか菌糸とか入ってて熟成されるんよ。ただ混ざるだけじゃないんよ。

206 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:53:34.07 ID:F9uWTtxD0.net]
>>194
> 型あったほうが便利派
半分くらいはインテリセンス目当てだと思うぞ。
そして俺自身も型を否定はしないが、C++の型検査も過剰気味だと感じている。
だからconstは使ってないし、関数ポインタの型検査もウザイ。
つーか、型を間違えること自体がほぼ無いだろ?
引数の順番を間違えたりした場合に型検査で引っかかるってだけで。

207 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:54:02.64 ID:F9uWTtxD0.net]
>>195
> ローカル関数で変数をキャプチャできるぞ
ローカル変数しかできんだろ。しかも明示しなければならない。(全指定も出来るが)
JavaScriptの場合は上位関数の変数をどこまでも辿れるので、(レキシカルスコープ)
入れ子になっていても破綻せずに分解して展開出来るんだよ。
C++方式の場合はawait内にawaitが入れ子になっていると、展開出来ないだろ。

> コールバックは階層が増えたりエラーや例外処理、分岐などが生じるとどんどん複雑になって単純には行かなくなる
> それを解決するのがPromiseで、それを更に単純に記述するのがasync/await
これは通説だが、俺はこれが嘘だと思ってるんだよね。
JavaScriptで言われているcallback地獄ってのは、非同期処理をその場で

208 名前:入れ子で書いている。
それよりawaitの方が見やすいってのは、上から順に読める形式だから。
でも>>180に書いたとおり、JavaScriptの文法ではcallbackを常に展開して書けるので、
その気になればawaitと同じ順で処理を書けるんだよ。(非同期がネストしない)
つまり、レキシカルスコープ+クロージャなら、awaitが無くてもawaitと同じ順で処理を書けるわけ。
C#やC++はレキシカルスコープがないからawaitが必要なだけ。
だからここら辺は実は文法との相性もあるんだよ。
C++はそんなのお構いなしに何でもかんでも入れてる感じだが。
(とはいえ、選択肢が増えること自体は悪いことではない)

> char *を受け取る関数ポインタにとconst char*で受ける関数ポインタを入れてエラーにしなかったらややこしくて危険なだけでしょ
そりゃconstの有無をテストで落とすのは無理だろうさ。
まあ、俺はconst自体が意味無い(無駄な手間が増えるだけ)という認識だが。
(ただし本当の意味でのconst(「定数」)の場合は使う。Cならマクロで与えていたケースとか)

そもそも君はどこまでconstを使っているんだ?
C++のconstは「定数」ではなく「再代入禁止」だ。
現実的には無駄に再代入することもないので、ローカル変数の大半にconstを付けられるはず。
これをやっているのか?
やっていないのなら、君自身も「過剰な型検査」が存在することを認めていることになるが。
[]
[ここ壊れてます]

209 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:54:22.15 ID:F9uWTtxD0.net]
>>196
コードを流用するとね、
void test(a,b)
{
// (A)
hoge(&a,&b); // (B)
piyo(a+b); // (C)
}
で、(B)をconst指定にした時のみ(C)で大胆な最適化を行えるケースは、
・(B)が(C)に影響する副作用を持っていないと「const指定した時のみ」分かる
場合だけだが、これはconst指定ではどうにもならんだろ。

これはプログラマが上位の仕様(test関数の仕様)として規定するものであって。
例えば構造体配列で、(B)は[i]への書き込み、(C)は[j]からの読み出しで、i!=jが上位で保証されているとか。
この場合は、プログラマが最初から(A)(C)(B)の順に書けるんだよ。
そうではなくて、(B)が(C)に対しての副作用を持つ可能性がある場合、つまりi!=jが保証されていない場合、
当然(B)(C)の順にする必要があるけど、
これをconst指定で最適化(=(B)が(C)に対しての副作用を持たないことを保証)することは出来ないでしょ。

210 名前:デフォルトの名無しさん [2017/09/01(金) 02:04:57.35 ID:2msaHTP30.net]
>>204
ん、C++のconstは、Cのconstよりも「定数」だぞ
int const a = 1;
switch(1) [
case a: ; //valid in C++, invalid in C
}

211 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 08:48:03.58 ID:5GGRc0nid.net]
>>206
すまん、そのコードの意味がわからん

212 名前:デフォルトの名無しさん [2017/09/01(金) 09:06:42.83 ID:2msaHTP30.net]
typoしとるな
[は{

213 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 09:55:02.84 ID:kxCoop1y0.net]
case ラベルに const な変数の変数名

C++ ならばリテラルと等価となりセーフ
C は変数のままの扱いでアウト



214 名前:デフォルトの名無しさん [2017/09/01(金) 11:36:56.59 ID:IGPoCkp90.net]
Cのconstは変更不可なオブジェクトだからな

215 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 13:20:08.84 ID:JSZHio/AM.net]
C++は使える範囲を広くしただけでconstの意味はCといっしょ
constによる最適化の話には関係しない

216 名前:デフォルトの名無しさん [2017/09/01(金) 15:37:25.51 ID:2msaHTP30.net]
違う
constはもともとC++発祥のもので、
Cでパクるにあたり微妙に改変した
constは最適化に関係するが
今この流れでは最適化とは全く無関係の話をしている

217 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 16:51:03.36 ID:dkwAUCjz0.net]
volatileについてもkwsk

218 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 17:40:42.98 ID:XJwe5Q/Z0.net]
ttps://regmedia.co.uk/2011/02/18/dennis-richie-and-brian-kernighan-pdp-11.jpg
こういう時代の揮発性のメモリ
揮発しないメモリもあるんですよ

219 名前:デフォルトの名無しさん [2017/09/01(金) 18:43:10.50 ID:2msaHTP30.net]
ビットフェードとvolatileは関係ないぞ

220 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 18:59:13.16 ID:dXFBhBz10.net]
コード中の文意では変わってなくても、他の要因で変わる可能性あるような
割り込みやマルチスレッド等で共有してる変数とか

221 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 03:14:53.65 ID:GCfgdhr+0.net]
> C++のconstは「定数」ではなく「再代入禁止」だ

代入と初期化を混同してませんか

222 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 08:56:24.33 ID:72Px+h1e0.net]
staticについてもkwsk

223 名前:デフォルトの名無しさん [2017/09/03(日) 11:44:42.91 ID:jl0cf3RS0.net]
性的な



224 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 12:14:41.26 ID:9dM4T0NO0.net]
外からは見えないように、そして、なくさないようにするエロ本

225 名前:デフォルトの名無しさん [2017/09/03(日) 17:40:32.30 ID:jXGwZqzU0.net]
一口にstaticと言っても、そのキーワードは用法で意味が変わるからなあ

226 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 17:45:54.60 ID:5WRYI1ZX0.net]
static に背負わせすぎな気がする
関数内変数の static
関数スコープ外の static
C++ ならばクラスメソッドのstatic
クラス変数の static もあったかな‥多すぎだ‥

227 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 18:29:43.87 ID:fyDk5FSQ0.net]
予約語を減らす涙ぐましい努力

228 名前:デフォルトの名無しさん [2017/09/03(日) 18:47:29.02 ID:jXGwZqzU0.net]
C99以後、仮引数のstaticもあるしな

229 名前:デフォルトの名無しさん [2017/09/04(月) 00:43:28.93 ID:QxIkVb9z0.net]
ポインタ関連で*と&の記号を使っているのも
初心者を遠ざけているよな
素直にpointerとかrefとかの予約語作ればよかったのに

230 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 01:05:35.63 ID:IeE+YITL0.net]
>>225
もともと高級アセンブラとして生まれた経緯を考えたら、ポインタ関連の基本的な記述のためにはくどいキーワードではなく最もシンプルな演算子が割り当てられるのは自然なことだと思う。

231 名前: mailto:sage [2017/09/04(月) 01:17:41.88 ID:rnM3x3Xp0.net]
>>225
C# の ref 宣言のように,宣言だけでなく呼び出し側でも ref が必要だという文法はあってもよかったかな

232 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 02:45:48.86 ID:tVodzhFi0.net]
>>224
え?そんなのあった?

233 名前:デフォルトの名無しさん [2017/09/04(月) 08:55:10.34 ID:pd3pCmCq0.net]
>>228
ISO/IEC9899:1999
6.7.5.3 Function declarators (including prototypes)
21 EXAMPLE 5
void f(double a[restrict static 3][5]);



234 名前:デフォルトの名無しさん [2017/09/05(火) 00:59:51.51 ID:2RdPD3ce0.net]
>>229
ああ。そういう使い方か。

235 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 15:42:36.42 ID:zsD50ajta.net]
以下の三つの操作に違いはありますか
NはMと比べて十分大きいとします

char s[M];
wchar_t ws[N];
mbstate_t state = {0};
// 1
scanf("%s", s);
wbsrtowcs(ws, &s, N, &state);
// 2
scanf("%ls", ws);
// 3
wscanf(L"%ls", ws);

236 名前:デフォルトの名無しさん [2017/09/08(金) 04:19:51.29 ID:LlnxN/9E0.net]
>>231
1のscanf()はchar型で文字列を受け取ろうとするのでエンコードによっては複数バイト文字が全て読めない可能性がある。
例えば2バイトづつのUnicodeの0xff以下のコードがそのまま来た場合、ビッグエンディアンならすぐに0x00が1バイト目に来てしまう。

237 名前:デフォルトの名無しさん [2017/09/08(金) 22:13:19.23 ID:Hco6il2OE.net]
兄貴すいません
アロー演算子の使い方を学びたいのですがどこを直せば動くのか教えてください

#include <stdio.h>

struct User {
char name[5];
int age;
};

int main()
{
struct User *u = { "hoge", 10 };
if (u->hoge != NULL) {
printf("%d\n", 1);
} else {
printf("%d\n", 0);
}

return 0;
}

238 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 22:41:39.10 ID:R6JsR04N0.net]
>>233
*uじゃなくてsにてもしてuに&sを入れてhogeをnameに変えれば動くけど
これnameが実体だから100% 1が出るよね

239 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 01:43:06.63 ID:DK1wXlQ90.net]
struct User {
char *name;
int age;
};

int main()
{
struct User st = { "hoge", 10 };
struct User *u = &st;
if (u->name != NULL) {
 ......

240 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 12:01:06.79 ID:KEHxH6tI0.net]
>>233
mallocして中身を詰める

#include <stdio.h>
#include <stdlib.h>

typedef struct{
char name[5];
int age;
}User;

User* new_user(const char* const name, const int age){
User* u = (User*)malloc(sizeof(User));

strcpy(u->name, name);
u->age = age;

return u;
}

int main(){
User* u = new_user("hoge", 10);

if (u->name != NULL) {
printf("%d\n", 1);
} else {
printf("%d\n", 0);
}

return 0;
}

241 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 12:54:39.58 ID:Ii5yjdZLa.net]
>>232
なるほど
ありがとうございます

fgets(s, M, stdin);
const char *p = s;
mbsrtowcs(ws, &p, N, &state);
でも1と同様の問題が起こりますか

>>231は関数名と実引数の型を間違えてました

242 名前:デフォルトの名無しさん [2017/09/09(土) 16:17:54.34 ID:qJRB74Th0.net]
>233
int main(){
return !printf("%d\n",strlen( (&(struct User){.[0]name=0, .age=10, .name={'h','o','g','e'}})->name) 1: 0), 0;
}
char[5] nameとNULLの比較じゃ意味ねーと思うんだわ

243 名前:デフォルトの名無しさん [2017/09/10(日) 04:20:42.87 ID:3lFSiHDa0.net]
>>237
大丈夫だと思う。



244 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 09:19:13.64 ID:bduAIVLIa.net]
>>238
なんか色々間違ってねーか?

245 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 10:12:13.09 ID:3KJHgwTr0.net]
>>238
>>233のような初学者にそんな解読しにくいコードを提示しても意味ねーと思うんだわ

246 名前:デフォルトの名無しさん [2017/09/10(日) 11:46:48.72 ID:uI7cAZFMa.net]
暇すぎたので昨日からC言語の勉強始めましたプログラミング初心者です。
これって趣味にできる?

247 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 11:52:24.67 ID:igLJE8zId.net]
できる

248 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 13:39:43.37 ID:3lFSiHDa0.net]
そして趣味が高じて仕事にw

249 名前:デフォルトの名無しさん [2017/09/10(日) 13:42:12.95 ID:uI7cAZFMa.net]
今本屋なんだけどどの本で学ぶのがいい?
てかphytonとか他の言語の方が良かったりする?

250 名前:デフォルトの名無しさん [2017/09/10(日) 13:45:14.25 ID:uI7cAZFMa.net]
ちなみに本職は監査法人の公認会計士で監査してるんだけど仕事に役立つならそれに越したことはない

251 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 13:50:00.90 ID:SyCSejr00.net]
幅広くエロエロやると上達早いで
もしノイマン型コンピュータの基本知識が
無いのならどこかで学習する必要がある
メモリ、アキュムレーター、インデックスレジスタ…etc

252 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 13:53:38.31 ID:rGvjr77j0.net]
>>246
公認会計士の仕事にはなかなか結びつかないだろうけれども…ガンバレ
C/C++ はどちらかというと原始的
python AI/機械学習で今はやり

ゴルフでもなんでも最初は大変だから一定の覚悟が必要

253 名前:デフォルトの名無しさん [2017/09/10(日) 13:56:43.80 ID:uI7cAZFMa.net]
あんま知識は無い。
じゃあC言語とphytonを並行して学ぼうかしら。



254 名前:デフォルトの名無しさん [2017/09/10(日) 14:35:30.74 ID:3lFSiHDa0.net]
会計ねえ。Excelとかの本のほうがいいかも知れんな。その方が仕事に結び付けられる事が多くて覚えは早いのではないかと思う。
マクロも一応プログラムだしな。Excelにくっついた形のものではあるが結構色々な事ができる。
で、それがある程度できるようになったらプログラムというものがだいたいどういうものかわかるようになってるだろうから次はVBのように似ているものをやる。
似ているのでこれの習得はかなり早いと思う。それから他の言語を色々やって幅を広げる。

255 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 14:52:01.58 ID:SyCSejr00.net]
Excelマクロ…
組むと疲れる、悪い癖が付く等良い所が無い言語

256 名前:デフォルトの名無しさん [2017/09/10(日) 15:07:37.65 ID:uI7cAZFMa.net]
まあ別に趣味だから仕事に役立たなくてもいいぞ

257 名前:デフォルトの名無しさん [2017/09/10(日) 15:12:20.15 ID:uI7cAZFMa.net]
苦しんで覚えるC言語っての買った

258 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 15:23:52.77 ID:GVNmgcdo6.net]
苦しめ

259 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 15:29:50.37 ID:7And7Hgf0.net]
俺なら楽しんで覚えるけどね

260 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 16:30:29.97 ID:TxU3QtzA0.net]
苦Cは買わなくてもネットで読めるのに・・・

261 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 16:52:57.48 ID:3KJHgwTr0.net]
見易さではいまだ紙媒体の方が上だと思うし、惜しむほどの額でもないだろう

262 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 17:48:30.86 ID:eDTlLPEV0.net]
神聖言語COBOL

263 名前:デフォルトの名無しさん [2017/09/10(日) 17:58:39.08 ID:Z8XrRGDBa.net]
受信したメールの中身を理解して必要なメールと不必要なメールを分け、必要なメールの情報を分かりやすい文章に要約して表示するプログラムC言語で作れる?
ついでに簡単な返信なら自動でしてくれたらありがたいんだが。



264 名前:デフォルトの名無しさん [2017/09/10(日) 18:04:27.57 ID:Z8XrRGDBa.net]
返信が必要なメールと判断した場合は、返信メール本文の例を1万種類ぐらい自動で作成して、その中からより最適なものを3種類ぐらい提示してきてこっちはそれを選ぶだけで良いという機能も欲しいぞ

265 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 18:16:25.18 ID:/r+wfg1UM.net]
レス乞食

266 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 18:24:18.77 ID:TxU3QtzA0.net]
>>257
それがついこの間デザインがリニューアルされたんだよ
内容は同じだけどw
前よりは見やすくなったかな

267 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 18:26:26.80 ID:VNZjd7Zj0.net]
りんなとやり取りするプログラム作って、りんなに判断してもらえ。返信内容も一緒に

268 名前:片山博文MZ mailto:sage [2017/09/10(日) 18:40:04.78 ID:m2l+DHFcd.net]
SMTP, POP3などのメールプロトコルで、メールサーバとソケット通信。
メールを分類するなら、自然言語処理とベイズ推定が必要。

269 名前:片山博文MZ mailto:sage [2017/09/10(日) 18:57:20.96 ID:m2l+DHFcd.net]
単純な分類なら、振り分けルールが使えるメーラーを使えば簡単。

270 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 19:00:07.53 ID:Fa46oRS50.net]
ヘッダーに書いてあるエンコードが嘘いってて中身は別コードを
なんとか帳尻合わして可視化する部分が厄介 (nkf で大分楽にはなるらしいけど)

271 名前:デフォルトの名無しさん [2017/09/10(日) 19:00:48.08 ID:BxaTac1G0.net]
>>259
「必要なメール」とそれ以外の境界を
おまえさんが明確化できるか否かにかかっている
何言語を使おうが同じことだ
Cは推論エンジンそのものを作れる言語で
通信アプリやドライバを作れる言語でもあるので
諦めねばならないアイディアはまずないはず

272 名前:デフォルトの名無しさん [2017/09/10(日) 19:38:42.01 ID:Z8XrRGDBa.net]
>>267
「必要なメール」とそれ以外の境界線はこれまで私自身が行ってきたメールへの対応を見てプログラム自ら学習して欲しい。
また分類や要約は高度な文脈、ニュアンス判断も伴うレベルで行わせたい。
それも様々な小説や文献を通してコンピュータ自ら学習して欲しい。

ちなみにこれ外注したらいくらぐらい?
10万円ぐらいするかな?

273 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 19:44:06.14 ID:jwBfW/fF0.net]
10倍ぐらい出せば良いんじゃねーの



274 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 19:46:11.33 ID:+BHhCGE8a.net]
linuxでpop/smtpサーバー立てればよくね
スクリプトで特定のワードが見つかったら処理すればいいし
送信はmailコマンドがあるし

275 名前:片山博文MZ mailto:sage [2017/09/10(日) 19:47:08.66 ID:m2l+DHFcd.net]
>>268
自ら学習するにしても、教師なしでは低品質になる。効率よく学習するためには、コンピュータとの対話(ダイアログ)が必要になる。

276 名前:片山博文MZ mailto:sage [2017/09/10(日) 19:52:13.40 ID:m2l+DHFcd.net]
深層学習させるにしても、タグ付けの作業が必要になる。

277 名前:デフォルトの名無しさん [2017/09/10(日) 20:10:47.20 ID:BxaTac1G0.net]
>>268
267だが、Cは推論エンジンを作れると言ったはず
おまえさん自身はそこから学習しなかったのか?

10万ねえ
支那の国家プロジェクトがどうなっているか知っているか?
支那からのSPAMに「天安門」と書いて返信すると我々にとって
ありがたい動作をしてくれるというアレだ
国家ではないが大企業のAIが共産党は無能とか言い出して
ひと騒ぎにもなったよなあ
おまえさんの10万円のソフトはおまえさんを無能とか
言い出さないか?

278 名前:デフォルトの名無しさん [2017/09/10(日) 20:26:02.78 ID:Z8XrRGDBa.net]
あとC言語でタイムマシン作れる?
といっても未来のインターネット閲覧できる程度でいいんだが。
作れる人いたら10万円までなら出すぜ。

279 名前:片山博文MZ mailto:sage [2017/09/10(日) 20:32:37.81 ID:m2l+DHFcd.net]
>>274
予測・予想が届く範囲でないと、予知はできない。できたとしても、競馬の予想や天気予報くらいだ。物理法則を超えることはできない。

280 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 20:39:00.76 ID:rIACWFTk0.net]
アホなことを書いてしまったと気付いて、ネタだったことにしてごまかそうとしている?

281 名前:デフォルトの名無しさん [2017/09/10(日) 20:42:41.68 ID:I7ZEh6pU0.net]
物理法則なんて人間が考えたものに過ぎないからどうせ間違いだらけでしょ?

282 名前:片山博文MZ mailto:sage [2017/09/10(日) 20:50:00.29 ID:m2l+DHFcd.net]
深層学習で美少女の画像を大量に生成するという技術はある。未来の人が書きそうな絵を生成することはできる。

283 名前:デフォルトの名無しさん [2017/09/10(日) 21:11:06.17 ID:n6o1Bnrv0.net]
物理は、むずかしい



284 名前:片山博文MZ mailto:sage [2017/09/10(日) 21:39:16.69 ID:m2l+DHFcd.net]
へ へ
の の
 も
 へ

285 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 03:08:03.91 ID:byfRWwJtM.net]
div B = 0
rot E = -(∂B/∂t)
div D = ρ
rot H = ∂D/∂t + j

286 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 18:24:02.20 ID:zVhRA/dD0.net]
C言語覚えればCIAのパソコン
ハッキングできたりするの?

287 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:21:49.41 ID:8ybhBsXfM.net]
なんでこんなアホがプログラム板にいるんだ?

288 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:35:17.20 ID:8gurLWtqd.net]
だって、コーダーって大概馬鹿じゃん

289 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:59:12.99 ID:C09YrKwT0.net]
夏休みはもう終わったぞ

290 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 20:22:37.24 ID:E3lbzyXMM.net]
ずっと休みの奴が張り付いてるんじゃね?

291 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 20:40:18.98 ID:oYtiliiD0.net]
printf("Hello, work!");

292 名前:デフォルトの名無しさん [2017/09/12(火) 22:47:32.51 ID:CGKPtYms0.net]
>>284
馬鹿つっても、少なくともおまえみたいな自宅警備員より1ペタくらいマシだよ
コーダーでやってけてるやつナメてんだろ、おまえ ボケ!

293 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 00:05:26.05 ID:iyeBQ3Kc0.net]
コーダーだから馬鹿だとは思わないが、>>288みたいなレスをするのは馬鹿だなと思いました。



294 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 10:49:46.10 ID:gIW5dRYoa.net]
>>239
ありがとうございました

295 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 10:57:10.59 ID:E2QlRAh70.net]
>>287
puts("Hell 'o work?");

296 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 11:29:24.17 ID:tSE5B5Al0.net]
printf("HALO world!");

297 名前:デフォルトの名無しさん [2017/09/13(水) 12:41:46.69 ID:cFJcbLHs0.net]
>>289
いいこぶってろクズ
現業がいなきゃ自分じゃ何もできないやつが
現業をバカにするのを見ると虫酸が走るんだよ

298 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 13:17:09.64 ID:z6o40qKf0.net]
>>293
安価に取り替えがきくので、低く見られるのはしょうがないと諦めろ

299 名前:デフォルトの名無しさん [2017/09/13(水) 13:33:05.82 ID:cFJcbLHs0.net]
人件費のダンピングは国が国民を保護する義務の対象だが
真面目にやってくれなくて我々はその被害を受けているのだ
本来、能力に応じた収入があるべきという感覚そのものを
捨てちまったブタはいいねえ悩みがなくて

300 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 14:36:38.24 ID:GgkwnlJN0.net]
>>295
本来能力に応じた報酬を受け取るべきと考えて、それが受け取れない事に不満を持った連中はとっくに逃げ出してる
残ってるお前らは不満を持ちながら逃げ出す事さえ出来ないゴミ
下に見られてもしょうがない

301 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 14:42:45.38 ID:yshNp3B/a.net]
確かに馬鹿な奴もいるけどレベルの高い奴もいる。コーダーに限った話じゃないだろ。
日本に馬鹿が多いんだよ。たぶん。

302 名前:デフォルトの名無しさん [2017/09/13(水) 15:31:18.76 ID:cFJcbLHs0.net]
>>296
俺より年収1桁少ないやつにだけは言われたくねえぜ
なに、2桁? そりゃ失礼したw

303 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 15:43:10.20 ID:lgdTeqni0.net]
3桁ってことか



304 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 16:11:37.47 ID:PJsF5JPod.net]
時給だろ。

305 名前:デフォルトの名無しさん [2017/09/13(水) 16:18:46.88 ID:cFJcbLHs0.net]
妻子持ちがどのくら金いるか
童貞にはわからんようだな

306 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 16:31:08.86 ID:J/ZU3q6K0.net]
板違いが分からないよりマシ

307 名前:デフォルトの名無しさん [2017/09/13(水) 16:42:40.48 ID:cFJcbLHs0.net]
284にぬかせボケ

308 名前:デフォルトの名無しさん [2017/09/13(水) 17:15:26.17 ID:7kZqRPKj0.net]
クソスレ過ぎ笑う

309 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:04:55.78 ID:FmzSjQYZ0.net]
>>298
奴隷的労働しか選択肢が無いのに妻子持ち
妻子が哀れすぎる

310 名前:デフォルトの名無しさん [2017/09/13(水) 19:25:13.27 ID:cFJcbLHs0.net]
>>305
奴隷? 俺は領主の立場だ
おまえと一緒にするな無礼な

311 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:29:03.36 ID:E/jL69iKd.net]
複雑な立場だなww

312 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:36:56.55 ID:FmzSjQYZ0.net]
>>306
僕のお父さんは奴隷のリーダーですってか?

313 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 20:24:58.56 ID:ruF3Cq7F0.net]
実際のところそれでも結構なもんだ



314 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:33:37.15 ID:qtzqYGs4M.net]
馬鹿な奴隷に指示、管理する者の気苦労が分からんのか

315 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:35:35.97 ID:PcFMQESFM.net]
>>301
妻はまだ自分の食いぶちの一部でも稼がせばいいけど子の方はマジで金かかる
国は学資保険なんてものがあることをちょっと恥じるべき

316 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:50:53.77 ID:ruF3Cq7F0.net]
金持ちしか子供作らせないのは国策

やつらに恥などない
怒れ

317 名前:デフォルトの名無しさん [2017/09/13(水) 21:56:29.09 ID:dVC5ajCT0.net]
マ板でやれ

318 名前:デフォルトの名無しさん [2017/09/13(水) 22:36:54.70 ID:cFJcbLHs0.net]
>>312
俺は金持ちじゃねえ
単年度で8桁いっても次年以後で気を抜けばボコボコだ
一生遊んで暮らせる金があるやつにしか子供を作らせないなんて国策はねえ
童貞がイソップの葡萄こいてろ、こちとら稼いでみせると必死こいてんだ

319 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 23:29:23.30 ID:ruF3Cq7F0.net]
ポッキリと折れて周囲に生暖かい目で見られるところまで見えた

320 名前:デフォルトの名無しさん [2017/09/14(木) 17:55:25.19 ID:r9C1TnUx0.net]
まんこ

321 名前:デフォルトの名無しさん [2017/09/14(木) 21:35:54.73 ID:Ng+6QcSm0.net]
>>299
3桁って、10進数だと999円が限界だぞ

322 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 22:14:40.48 ID:vjSz//mI0.net]
>>300

323 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 23:45:34.67 ID:lhu0Z/PJ0.net]
ジンバブエドルで3桁か?



324 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 11:30:59.37 ID:EItFo4370.net]
>>317
頭いいなおまえ

325 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 16:22:54.12 ID:SXimL5kTp.net]
昔"c言語をダイエットさせる本"みたいなタイトルの本読んだと思うんだが分かるやついる?
見つからなくて探してる

326 名前:デフォルトの名無しさん [2017/09/21(木) 20:42:10.28 ID:x8dEnzes0.net]
for(;~scanf("%d",&a);)とかwhile(~scanf("%d", &a))とかで~がないだけで永遠に入力ループするんだけど
~ってなにを宣言してるんだ教えてくれ

327 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 20:48:43.32 ID:BDILGhdI0.net]
~はビット単位のNOT演算子じゃないの?

328 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 21:03:53.86 ID:N1EOCCyb0.net]
~なしでよくね?

329 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 21:23:35.16 ID:kYTPFpbC0.net]
本来なら 変数a に格納されるまでループしたい意図だろうけど・・・・・

scanf の戻り値は 代入操作できた変数の数で
0 だと入力のフォーマットに合致しなかったわけなんだが (ここまでは素直)

一旦 その状態になると、次に正しく入力しても拾ってくれない scanf 独特の挙動があって
正しく入力しようが 0 のままというkuso

件の場合
 最初の入力で数値ではない o を与えると (%d で受けれないので失敗)
次のループの入力で 1 を与えても やはり変数に格納ざれずに失敗したまま

これがあるので scanf は使うな、と良く言われてる所以

330 名前:デフォルトの名無しさん [2017/09/21(木) 21:54:22.20 ID:x8dEnzes0.net]
一行読み込みで同じ処理を数値なくなるまでしたいんだけどどう読み込んだ方がいい?

331 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:19:34.61 ID:kYTPFpbC0.net]
fgets で行単位で読み込み
その行バッファに対して sscanf で変数に拾い上げするなり、11文字ずずつ字句解析するなり

char buf[512];
int a;
while (fgets(buf, 512, stdin)) {
 /* 1行読んだよ */
 
if (sscanf(buf, "%d", &a) != 1) {
  /* 数値じゃないのが来たのは無視する */
continue;
 }
/* a に値が格納されたよ */
:

}

332 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:26:26.69 ID:kYTPFpbC0.net]
日本語でおけ
× 11文字ずずつ字句解析するなり
○ 1文字づつ字句解析するなり

333 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 23:44:09.55 ID:Xpxn9Za50.net]
>>327
strtolとかstrspn?系つかったほうがよくね?



334 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 00:16:23.70 ID:zbqUBjYs0.net]
>>325
まじかよ..
scanf呼び出して戻ってきたあとも何かしらのscanf内部変数が残ってるってこと?
だとしたらクソ過ぎるだろ

335 名前:デフォルトの名無しさん [2017/09/22(金) 01:03:58.95 ID:IvB4cJv30.net]
こんなのどうかな
https://paiza.io/projects/zRvzIskw3zMy3HVdD7NsHA

336 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 01:11:24.08 ID:exEqzPdX0.net]
>>330
標準入力を勝手に読み捨てないってこと
数値以外が来たら"何もせずに"失敗で終わるから
ループするとまた失敗以前の場所からそれを繰り返すだけ

337 名前:デフォルトの名無しさん [2017/09/22(金) 01:39:40.49 ID:BRiVyzo00.net]
forの継続条件がどう動いてるのかわからないな読み込めた時はループして読み込めなかったときはループ抜けるってのがどう判定されてるのか見えないな

338 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 02:12:21.25 ID:exEqzPdX0.net]
>>333
scanf("%d",&a);
で、数値が来れば取り込みに成功した個

339 名前:数、つまり1を返し、失敗なら0を返す
それを~でビットNOT、つまり各ビットを反転させるので
成功なら0x00000001を反転で0xFFFFFFFE、失敗なら0x00000000を反転で0xFFFFFFFF

ようするにどうやってもループを抜けないので、結論としては「そもそもループ条件として間違ってる」
>>324の言う通り~は不要
[]
[ここ壊れてます]

340 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 02:35:57.85 ID:dUE2o1PV0.net]
もっとシンプルに使える入力関数を
誰かが作ってくれれば良いのに

341 名前:デフォルトの名無しさん [2017/09/22(金) 03:10:18.60 ID:IvB4cJv30.net]
>>335
簡単なので多分もう世界中に山ほどあると思うが、標準化されてないだけだろうな。

342 名前:デフォルトの名無しさん [2017/09/22(金) 05:10:39.06 ID:BRiVyzo00.net]
while((a=Console.ReadLine())!=null)こうゆうので入力がなかったら終了するって簡単にできればC言語も楽なんだけどな

343 名前:デフォルトの名無しさん [2017/09/22(金) 14:57:26.19 ID:8MJCwgYc0.net]
int *get_int(int *dst, jmp_buf err)
{
if (scanf("%d", dst) != 1)
{
if (err) longjmp(err, 1);
else return NULL;
}
return dst;
}
こんなしょーもないのでいいのに標準化委員会は斜め上なことばかり・・・



344 名前:デフォルトの名無しさん [2017/09/22(金) 20:47:03.45 ID:dtN6vQMf0.net]
>>334
でもscanfの前に~あるだけで入力なくっても無限ループしないで抜けるのはNOTと戻り値がNOTでtureだから抜けるの?

345 名前:デフォルトの名無しさん [2017/09/22(金) 22:06:16.56 ID:IvB4cJv30.net]
チルダ付けたのは失敗した時に-1が返されると思ったからかな?
てか、チルダ付けた場合はそれ以外で0にならんよな。
まあでもこれも整数値の内部表現の違う特殊な環境だったりしたらダメかも知れないが。

346 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 22:16:43.87 ID:JX9ZYj2p0.net]
組込み以外で~使ってんの初めて見た

347 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 22:21:06.44 ID:FtjqsiSd0.net]
普通にビット処理だと使うよね
ビット処理なんかしないって?

348 名前:334 mailto:sage [2017/09/22(金) 22:25:08.34 ID:exEqzPdX0.net]
ごめんウソ書いたわ
一つも変換されないで入力エラーになったらscanf()は0ではなくEOFを返すらしい

>>339
よって多くの環境ではEOF==-1(0xFFFFFFFF)だからその反転で0になってループ抜けるということだね

349 名前:片山博文MZ mailto:sage [2017/09/22(金) 23:25:37.12 ID:TihxA+yD0.net]
>>338 ゼロオーバーヘッドは正義。

350 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 07:38:02.97 ID:9QRg4G5c0.net]
>>343
入力ストリームが閉じてて変換できなかったら EOF
入力ストリームは開いてるけど変換できなかったら 0
でないのけ?

351 名前:デフォルトの名無しさん [2017/09/23(土) 11:43:39.39 ID:8bsZ0VcP0.net]
>>345
どうやらそのようだな。Linuxのmanで見てみたらそんな風に書いてあった。
とすると入力が閉じないで変換失敗した場合は0が返されて無限ループになるな。

352 名前:デフォルトの名無しさん [2017/09/23(土) 14:50:28.05 ID:IblrvTVf0.net]
Win32環境なのですが
_beginthread関数で、thread1, thread2を回し
グローバル変数g_nをthread1の中で変更しても
thread2から正しい値が参照できません。参照できないというよりthread2が機能しなくなるように見えます。変数表示がカットされる。
VisualC++でプログラムしてるのですがデバッグモードだと普通に動いて
リリースモードだと動かなくなります。グローバル変数にvolatileをつけてみてもダメでした。
何が原因でしょうか?

353 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 15:16:24.27 ID:PasvkTo90.net]
具体的なコードもなく原因を聞かれても、どうしようもないと思うぞ

VCの拡張機能で相応の機能が追加されてたような気もするが
本来volatileにスレッド間での排他やメモリバリアの機能はないからな



354 名前:片山博文MZ mailto:sage [2017/09/23(土) 15:34:39.04 ID:oO/4QkxId.net]
>>347
デバッガ側で例外をキャッチして、呼び出し履歴を調べると何かわかるかもしれない。おそらくゼロ除算かアクセス違反かスタックオーバーフロー。

355 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 16:05:08.45 ID:IblrvTVf0.net]
>>348-349
thread2の中身を以下みたいにtry〜catchで囲むと何故か直りました…
でもcatchの中は実行されてないです… 少しcatchの中身を書き足すとまたダメ…
どういうことだろう…
void thread2(void*)
{
try{

} catch (...) {

}
}

356 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:06:48.32 ID:oO/4QkxId.net]
スタックを破壊してる可能性

357 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:07:30.45 ID:oO/4QkxId.net]
呼び出し規約が間違い

358 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 16:14:51.44 ID:IblrvTVf0.net]
>>352
>呼び出し規約が間違い
これはどういう事ですか?
宜しければご教示をm(__)m

359 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:23:43.62 ID:oO/4QkxId.net]
https://msdn.microsoft.com/ja-jp/library/kdzttdcb.aspx
_beginthreadexの場合は、__stdcallを関数名の前につける。_beginthreadの場合は、__cdeclを。
__cdeclはデフォルトでは省略可能だから、間違ってはいない。
ということは、ポインターかなんかでスタック破壊している可能性が高い。

360 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:28:26.72 ID:oO/4QkxId.net]
配列の添字がオーバーしてないか?

361 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:50:48.86 ID:oO/4QkxId.net]
ideone.com に貼れ

362 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 19:47:03.99 ID:IblrvTVf0.net]
>>356
もう少し深く調べてみます!ありがとうございます!

363 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 21:54:35.77 ID:IblrvTVf0.net]
>>356
たぶん原因が分かりました。
現在は標準関数をやめてWINAPIのCreateThreadを使ってますが標準関数と原因は同じです。
CreateThreadでThread1,Thread2を作成して監視してるとあるタイミングでThread2が消失してたのですが
どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。
ようするに他のグローバル変数の書き換えが原因でした。
ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
でもこの回避作で良いんでしょうか?CriticalSectionを使ったりして処理してもうまく他スレッドでグローバル変数が
参照出来なかったのでvolatileをつけてみたら完璧に動作するようにはなったんですが……



364 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:09:28.20 ID:9QRg4G5c0.net]
排他制御の問題ではなく
最適化の作業で、変数を不変値と判断し、変数参照を追い出した翻訳をしたパターン

int a; // グローバル変数
void foo() { a = 1; while (a) { /* */ } }

a は文意から不変の定数として扱えるので
while (1) { /* */ }
に翻訳しちゃえるわけさ

365 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:20:31.54 ID:IblrvTVf0.net]
>>359
その変数達の最適化を無効にしたということですね。
ということはこの回避方法で大丈夫だということですか?

366 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:28:00.05 ID:9QRg4G5c0.net]
volatile つけるのは1つの手ではあるが 100% 回避してくれるかは、コンパイラ次第
スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー

367 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:50:44.07 ID:IblrvTVf0.net]
>>361
一旦コンパイルして普通に動作してるなら大丈夫ですか?
他の環境でいきなり動かなくなるとかもありますか?

368 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:58:35.90 ID:PasvkTo90.net]
何の変数を使ってるか知らんが、排他取ってねーんだから書き換え途中の変数を読み取ってバグることもあるだろ
最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな

まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの

369 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:10:54.21 ID:Z1NsXN0c0.net]
>>358
いや、359ではなくて、363の言うとおり、
> ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
これが問題だと思うぞ。つか、ロックしろよ。
volatileの意味分かってるか?
それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。
ただしこの場合は、
> 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ?
が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん?

つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、

370 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:20:05.48 ID:Z1NsXN0c0.net]
>>363
調べてみたんだが、これか?
> Microsoft 固有の仕様 → /volatile:ms の項目
> ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。
>  つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
>  コンパイルされたバイナリでの volatile 書き込みの前に発生します。
> ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。
>  つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
>  コンパイルされたバイナリでの volatile 読み取りの後に発生します。
https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx
これならロックではなくフェンスだね。volatileでは直らないはず。

371 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:22:23.90 ID:PasvkTo90.net]
>>365
自分も見かけただけでちゃんと調べたわけじゃないけど、それだね
フェンス+ロックが必要ってのは当然として、最近のVCならフェンスのほうが保証してくれてるってだけ

372 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:26:59.26 ID:IblrvTVf0.net]
>>361-365
CriticalSectionつかってグローバル変数の書き込み時にはロックをするのも試してみたんですが
やっぱりthread2が途中で死んで(内部のループで終了判定になってしまって)、ダメだったんですよね。
それがグローバルにvolatileをつけると普通に動作するようになってるんです……

373 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:29:48.18 ID:IblrvTVf0.net]
こういう事ですか?
CriticalSectionによるロックもやる必要がある。理由はロックしてない時固有の問題もあるから。
今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
ロック処理もvolatileも両方やる必要がある。ということですか?



374 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:33:50.34 ID:9QRg4G5c0.net]
書き込み時だけロックして 読み込み側のほうはロックせずに読み込んでる
片手落ちのように受けとれる文章だけど・・・ 排他制御をちゃんとやってたうえでの話?

375 名前:デフォルトの名無しさん [2017/09/23(土) 23:49:15.83 ID:8bsZ0VcP0.net]
volatileにしてロックして読み書きするのが普通では?

376 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:55:28.48 ID:IblrvTVf0.net]
>>369-370
volatileにして読み書きロックして厳密にやります!

377 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:57:26.40 ID:Z1NsXN0c0.net]
>>368
× > 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
○ コンパイラの不具合ではなく、君のコードの問題で、
 volatileで動いているように見えるのはバグに当たる確率が低くなっただけで、直ってはいない。

ただ、366の通り、全部ロック+フェンスすれば直りそうな気はする。
つか、そもそもフェンスが大量に要るような使い方でマルチスレッドするのが問題なんだが。

378 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:00:33.14 ID:jg2xx4vD0.net]
posixだとロックAPIにメモリ同期の効果があるから、普通はvolatileいらんけどな
CriticalSectionも共有リソースへのアクセス制御用の関数なんだから、同じはずだと思うけども

379 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:22:34.33 ID:AOwUcJWDd.net]
>>372
コードの不具合って意味だろ?
やっぱり最適化が問題だったんじゃないか?

380 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 01:04:50.76 ID:R8lp94JX0.net]
>>374
> どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。(>>358)
この場合はvolatileをつけないと話にならない。(ただし本来の使い方ではない)
コンパイラのバグではなく、多分デバッグビルド時には毎回読み出しだっただけ。(最適化なし、なおフェンスもなし)

データ同期する気がなければフェンスは本来は要らない。
ロックはしないと書きかけの値を掴んだりしてバグる。

ここら辺分かってなくてグローバルで同期ってのはマルチスレッド初心者なのだろうけど、
バグったらsync入れまくってデバッグはセオリーではあるし、まあがんばれ、と。
ただ、おそらく同期の仕方を根本的に間違ってるから、知ってる人に見てもらったほうがいいとは思うが、
コード内のグローバルは常に「最新」を期待しているのであれば、ロック+volatile+フェンスで動くはずでもある。

381 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 05:58:29.08 ID:jg2xx4vD0.net]
ロック中の読み出しが最適化で消えるなら、それはロックとコンパイラが腐ってる

382 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 08:32:31.64 ID:LX+6AD0qM.net]
>>372
> ○ コンパイラの不具合ではなく
誰もコンパイラの不具合なんて言ってない
偉そうに頓珍漢な講釈たれる前に日本語勉強し直してこい

383 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 08:36:33.73 ID:LX+6AD0qM.net]
>>373
メモリー同期と最適化は別の話
Posix は知らんけど CreateSection にはロック対象を知るすべはない



384 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 10:21:22.00 ID:jg2xx4vD0.net]
はあ、そうですか
共有リソースの排他アクセスのためのAPIなのに、ロック対象がわからないからロック無視して最適化しますと
それが真実ならWinAPIとVCが腐ってるんじゃないですか

385 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 10:22:36.14 ID:gFeQddMX0.net]
バカには使えないだけ

386 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 11:32:55.30 ID:070pAcfa0.net]
test

387 名前:デフォルトの名無しさん [2017/09/24(日) 13:57:54.86 ID:c233uqnI0.net]
腐っているのでしょう

388 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 14:40:58.49 ID:jg2xx4vD0.net]
メモリバリアを跨いでオブジェクトへのアクセス命令を最適化するとか
そんな頓珍漢なことを言う腐った奴がいるとは思わなかったわ
volatileを何だと思ってんだか

389 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 15:53:44.93 ID:gFeQddMX0.net]
CreateSection の使い方ぐらい調べてから書けばいいのに...
まあ他人事だしどうでもいいけど w

390 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 16:31:41.65 ID:jg2xx4vD0.net]
CriticalSectionの話のつもりだったんだけど、CreateSectionに変わったの?
それならごめんだわ、>>378で唐突に出てきて誤字だとばかり
さすがにそんなアホな話題転換があるとは思わなかった

391 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 16:59:33.91 ID:gFeQddMX0.net]
>>385
ああすまん、予測変換で間違えてたわ
で、CriticalSection について調べたのかな?

392 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 17:30:54.77 ID:jg2xx4vD0.net]
>The following synchronization functions use the appropriate barriers to ensure memory ordering:
>Functions that enter or leave critical sections
>Functions that signal synchronization objects
>Wait functions
>Interlocked functions
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686355(v=vs.85).aspx
調べたけどCriticalSectionだけで十分そうだよ
Internallockedとかのほうが手軽そうだけどね

393 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 02:44:46.68 ID:glvYaQMb0.net]
https://teratail.com/questions/39986
これの投稿 2016/07/04 10:48の例にあるように
最適化で変数の効果が消えてしまう場合でも
volatileじゃなく変数書き込みや参照の部分に
CriticalSectionでロックしておけば最適化で消える事はないということ?



394 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 03:09:32.37 ID:eX6e3GbIr.net]
Cのコンパイラはクリティカルセクションなんて知らない。単なる構造体かなんかのtypedefとして実直にコンパイルするだけ。
スレッド関連の関数についても単に関数の一種として扱うだけ。

従ってスレッドやクリティカルセクションを扱っているかどうかが最適化の結果に影響することはない。
一方volatile指定はコンパイラが認識するキーワードで最適化に影響する。

395 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 04:54:33.75 ID:glvYaQMb0.net]
ということは今回の事例だと排他制御しても不具合は解消できなかったという事かな?
volatile付けて最適化を無効にすることが正しい解決策だったということになる?

396 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 06:45:40.93 ID:/OvZrhVRM.net]
>>387
だからそれはメモリーバリアの話で最適化の話とは別だよ
繰り返しになるけど CriticalSection は排他制御するリソースを知ることはできないしコンパイラも CriticalSection のことを知らない

397 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 06:49:50.09 ID:/OvZrhVRM.net]
>>390
どう言うことをやりたいのかよく見てないけど排他制御と最適化の話は別だから必要なら両方やらないとダメ

398 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 08:38:06.32 ID:5M6SeBxY0.net]
eieio()

399 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 09:41:28.46 ID:Eov43usf0.net]
>>389
それ、スレッドまわりが規格化されてなかった C99 までの話だよね?

400 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 09:53:00.17 ID:eS71dZMPM.net]
最近のは規格化されてんの?

401 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 09:58:09.00 ID:Tp6H3jwU0.net]
規格化されてるのはPOSIXでじゃね?

402 名前:394 mailto:sage [2017/09/25(月) 09:59:34.82 ID:Eov43usf0.net]
こんな感じ。

www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
5.1.2.4/5
"The library defines a number of atomic operations (7.17) and operations on
mutexes (7.26.4) that are specially identified as synchronization operations.
These operations play a special role in making assignments in one thread visible
to another. ..."

403 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 12:40:04.95 ID:uoxmxxDAr.net]
>>394
おおごめん、規格自体には詳しくない

しかし…
pthread関連の標準関数や定義を仮にコンパイラが特別扱いしたとすると、標準関数をラップしたり自作ライブラリで代替した場合に最適化の結果が変わるのかな?
そんな風にコンパイラ作るものなんだろうか。



404 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 20:34:55.44 ID:6/+o0Gkh0.net]
posix-thread 関係については C++11 で追加されたが,
あくまでも言語処理系の中で定義された識別子(関数とかクラスとか)を使わないと,コンパイラには分かりえないよ.
CreateThread() とか CriticalSection とかの W32API の用語を,無指定でコンパイラが理解できるわけがない.

405 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 20:47:31.93 ID:LPAVGpvK0.net]
>>390
コンパイラは基本的に問答無用で最適化するけど、それだとマルチスレッドではプログラマの意図しない最適化が起こってしまう
だから、メモリバリアを挟んだアクセス命令を入れ替えないことにしている
言い換えると、メモリバリア前に読み込んだ値をメモリバリア後も使うような最適化はしない
よって、バリア+ロックで十分

共有リソースは全部volatile付けるなんてしてたら、kernelのソースとかvolatileまみれになるでしょ

406 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 21:45:53.20 ID:LPAVGpvK0.net]
当然、ローカル変数とか他から変更されないことが明らかなオブジェクトであれば最適化が起こる可能性は否定しない
グローバル変数の場合は、最適化されない

やってみればわかるけど、CriticalSecltionの有無でアセンブル結果が違う

407 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 21:46:58.74 ID:LPAVGpvK0.net]
アホなこと書いた、コンパイル結果だな。。。

408 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 23:03:28.51 ID:LPAVGpvK0.net]
CriticalSectionに限らず未知の関数が呼ばれたのであれば、その中でグローバル変数やらが変更される可能性を考慮しなければならない
他にも、ある関数の引数にローカル変数のアドレスを渡すと、以降の別関数内でそのアドレス経由でローカル変数を変更される可能性がある
よって、場合によってはローカル変数であっても関数呼び出しを跨いで最適化できなくなることがある

わからないからこそ、最適化してはならないんだよ

409 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 23:26:04.50 ID:3XblncDf0.net]
>>390
ならない。君のソースコードだけの問題だ。同期機構の使い方が悪いだけ。

スレッドなんてここ20年間バリバリに使われてる。
VC等の小慣れているコンパイラなら、最適化ありで全く問題なく動く。
(マルチスレッド向けのデバッグは完了している)
Debugでは動くがReleaseでは動かないケースに遭遇した初心者は、君のように
「最適化の問題であり今回はDebugを使うこと」を正当化したがるが、これは間違いだ。
ただしDebugビルドでもバイナリは出来るから、問題ないのならそれを使う手もある。

410 名前:デフォルトの名無しさん [2017/09/26(火) 00:33:15.50 ID:8E9hjYW60.net]
ちゃんと排他処理が出来ていないことに気付かず、デバッグオプション付きとか
遅いマシンとかで正常動作してしまい、何年後かに速いマシンにリプレイスしたら
丁度良くバグが顕在化するようなタイミングになってしまった、

なんてことが以前本当に起きた。

サーバ用とかでソフトが長期間使われる場合は要注意だ。

411 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 00:35:55.65 ID:piJXswiP0.net]
歯痛制御のバグ
珍しくない

発見しづらく、再現性も乏しく、解析に手間がかかりがち

レベルの低い開発者が混ざると大変

412 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 01:21:21.88 ID:mvSUAuA/0.net]
マルチスレッドは、たまたま動いているだけで、
ちょっとしたタイミングで、バグる

初心者は、たいてい、コンパイラのバグのせいにする。
それか、リリースビルドの最適化がおかしいと言う

プロは、Elixir などの関数型を使う

413 名前:デフォルトの名無しさん [2017/09/26(火) 02:12:13.37 ID:8E9hjYW60.net]
いや、ちゃんとロックすりゃなんとかなるってw
もちろん最初から考慮されてる言語は何も考える必要ないからうまく行って当然。



414 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 07:38:51.81 ID:hxYjIs4i0.net]
>>406
痛そうだな。

415 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 10:15:02.85 ID:IHENDkWx0.net]
>>406
つらそうなバグだ

416 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 12:32:55.96 ID:Ue/ou9XsK.net]
>>406
ウンコだなw

417 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 16:40:21.40 ID:zCHNwx740.net]
初心者です。エラーでまくりでコンパイルすら出来ません。アドバイスお願いします。

■やりたいこと。
マウス入力にrawinputを用いるアプリのWndProcをフックし、rawinput(WM_INPUT)を強制オフにし、DirectInputを使用するように指定。

↓ソース


// FuckRawInput.c

#include <windows.h>

LRESULT CALLBACK WinProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_CREATE:
{
RAWINPUTDEVICE Rid[1];
Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = RIDEV_NOLEGACY;
Rid[0].hwndTarget = hWnd;
RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])) == FALSE) ;
break;
}

-----
また、この方法が最適なのかも不明です。ほかの方法等もあったら教えてください

418 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 18:30:09.48 ID:Ep3hxvTm0.net]
C言語の問題?

419 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 21:09:13.07 ID:kxaL/Pai0.net]
初心者とは

420 名前:412 mailto:sage [2017/09/27(水) 21:51:08.08 ID:zCHNwx740.net]
>>414
そのままの意味でC言語初心者ですけど?
rawinputを消し去りたいがためにプログラム未経験ながらC言語入門書を読み、
Visual studio2013でハローワールドのコンパイルに成功した所です。

他スレで聞いたら、
DLLインジェクションでAPI関数を置き換えといわれたんですが、
まぁ、それと同じような事をしようとして書いたソースが>>412

目的達成するためにどこが悪いのか教えてくださいよ

421 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:01:39.03 ID:htvdQyi40.net]
日頃の行い

422 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:08:30.48 ID:6Zcxzpoi0.net]
エラーのせろハゲ!

423 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:35:55.70 ID:MZoqRzWL0.net]
どうやってWndProcをフックするつもりなのか知らんが、初心者のやることじゃない



424 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:46:41.34 ID:Ep3hxvTm0.net]
スレチ

425 名前:デフォルトの名無しさん [2017/09/28(木) 00:13:55.27 ID:LEgoP/Tm0.net]
>>412
本当にそれがソースの全てか?

426 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 06:54:14.40 ID:0QfR7+YkM.net]
>>412
とりあえず文法エラーのないソースを出せよ

427 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 08:22:53.76 ID:veeq8lRB0.net]
>>415
windowsプログラムでFuckファックは初心者がやるものではない
何故かと言うとFuckファックは非常に拙いからで、これはご存じの通りにFuckファックつまりはセクロスとかセックスを意味する
FuckRawInputなどと書かれると非常に面食らうので、動作には全く関係ないがFuckファックの箇所をHookフックとする
Fookという間違いならまだしもFuckが出てくるのは途轍もなく拙い

windowsプログラムは入門書を一通り終えた後にようやく手を出せる程度に面倒くさい

428 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 12:17:20.62 ID:wLxR5weia.net]
最近勉強始めたんだがループ動作めんどくさ

429 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 16:28:25.85 ID:p7vLxmpX0.net]
C++の標準でWindowsのCOMみたいなのはできるの?
モジュールがあれば動的リンクできて、向こう側の関数の形式とエントリポイントがわかるような。

430 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 18:20:04.96 ID:klqlvKrNM.net]
>>424
IUnknown::QueryInterfaceを実装するとかの話?
https://msdn.microsoft.com/ja-jp/library/cc351695.aspx

431 名前:412 mailto:sage [2017/09/28(木) 19:27:04.11 ID:te0QQW2V0.net]
>>418-422

WndProcフックでは目的の動作できなくて、APIフックしか手がないと分かりましたので、
MSのdetourとかいうの使ったAPIフックに変更されました。改めて、見てください。
@やりたいこと
Rawinputマウス関数が呼び出させられる代わりDirectInputマウス関数を呼び出し、強制的にマウス操作をDirectInputにする
ソース↓
// APIhook_RawInput.c
#include <windows.h>
#include "detours.h"
hoge target = NULL;  // ターゲットポインタ
hoge tp = NULL; //トランポリンポインタ

// 関数生成
BOOL WINAPI Direct_Input(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
return tp(hWnd, Msg, wParam, lParam);
}
// user32インスタンス
HINSTANCE xxxxx;
case WM_CREATE:
//user32.DLLをロード
xxxxx = LoadLibrary("user32.dll");
//Raw Inputポインタ取得
target = (hoge) GetProcAddress(xxxxx, "WM_INPUT");
// WM_INPUTフック、"WM_INPUT"→"Direct_Input"置き換え
tp = (hoge) DetourFunction((PBYTE) target, (PBYTE) Direct_Input);
break;
// 終了時の処理
case WM_DESTROY:
// フック削除
DetourRemove((PBYTE) tp, (PBYTE) Direct_Input);

432 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 21:05:11.91 ID:9JTfqDLya.net]
>>426
で、お前が聞きたいのは「C言語」に関するどんな質問なんだ?

433 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 22:00:23.65 ID:kmv+HSxh0.net]
>>421が悪い
責任もって相手しろ



434 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 22:01:12.32 ID:kmv+HSxh0.net]
>>419が正しい対応

435 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 23:13:22.30 ID:hENZyM/7a.net]
会話にすらなってないな。
こういうのホントにいるんだよなあ。、。

436 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 23:59:03.21 ID:mJZoGNOM0.net]
mevius.2ch.net/test/read.cgi/tech/1475897582/925

437 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 01:12:28.71 ID:tjqo0EG60.net]
>>415
> どこが悪いのか教えてくださいよ
頭と態度。
APIスレも見たけど、君には無理。

438 名前:デフォルトの名無しさん [2017/09/29(金) 01:17:32.92 ID:EHQhOpQV0.net]
>>426
本当にそれがソースの全てなのか?

439 名前:デフォルトの名無しさん [2017/09/30(土) 05:35:50.31 ID:/O3sxKWS0.net]
これ無理だろうWindowsプログラムの言語を理解してないと直せないっしょ

440 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 09:21:38.64 ID:SGi8KvwU0.net]
勘所がすぐつかめる人ならそうでもない
知らんOS知らん言語知らん環境でもデバッグできちゃうんだぜ
あいつら宇宙人だろ

441 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 13:06:27.14 ID:6IbuGwAs0.net]
>16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。

442 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 03:00:19.61 ID:TSZxzm0B0.net]
お助けください。
自作コードにおいて、以下の部分でmemsetの際にsegmentation faultになってしまいます。

int n = 2;
char charList[n+1][32]; // 32文字の文字列をn+1確保・・・@
func(charList); // charListに書き込む関数
for

443 名前:(int i = 0; i < n; ++i) memset(charList[i], ' ', 32); // 空白で埋めたい

funcを省いたりmemsetの前に適当にcharListをプリントしたりすると何故か問題なく動きます。
この部分だけ切り出したテストコードでは全く再現しませんでした。
この手のエラーでよくあるのは未初期化領域へのアクセスだと思いますが、
@で領域の確保はできているからこれは原因ではないですよね?
どこがエラーの原因でしょうか・・・?
[]
[ここ壊れてます]



444 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 06:29:26.41 ID:TvjHrbVD0.net]
funcがnを壊してる
とか

445 名前:デフォルトの名無しさん [2017/10/03(火) 06:57:44.74 ID:ZkSEHHAS0.net]
うん、funcが怪しい

446 名前:デフォルトの名無しさん [2017/10/03(火) 08:24:29.85 ID:759fwjeu0.net]
うん

447 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 11:40:15.04 ID:QFI8P6tG0.net]
配列サイズ 32要素で 32個 空白で生めてるが
文字列 という用語を使ってるあたり func は一般の文字列操作してそうだけど
終端記号 '\0' の分の考慮が落ちてるんでないの?

448 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 11:59:57.12 ID:QFI8P6tG0.net]
「文字列」で32文字を取り扱いたいのなら 33要素の器が必要ってことで
文字の配列なら問題ないけどねー

449 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 12:44:46.02 ID:mP+8qDfMd.net]
そもそも再現しないコードを提示されてもなあ

450 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 14:52:11.00 ID:YUFfLdQY0.net]
>>437
処理系は何じゃらほい

451 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 15:25:21.73 ID:rugh+s9w0.net]
>>437
>char charList[10000][10000]; // 32文字の文字列をn+1確保・・・@
くらい確保して実行すれば動くだろ

452 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 15:27:20.07 ID:xmgx6pPY0.net]
int n = 2;
char charList[n+1][32];

C言語的に、これってOKだっけ?

453 名前:デフォルトの名無しさん [2017/10/03(火) 15:39:40.20 ID:2Eoq+Ro56.net]
>>446
だめ



454 名前:デフォルトの名無しさん [2017/10/03(火) 16:18:15.22 ID:9r7sfmBO0.net]
char charList[n+1,32]こうしないとダメだよね?なにかっこ二つ使ってんだよ読み込めねえよって昔2次元配列で怒られたな

455 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 16:39:41.13 ID:uTLw0mNj0.net]
>>446
最近は大丈夫になった

456 名前:デフォルトの名無しさん [2017/10/03(火) 16:45:08.36 ID:ZkSEHHAS0.net]
うん、今の1回生が生まれた頃から

457 名前:デフォルトの名無しさん [2017/10/03(火) 18:25:07.16 ID:9r7sfmBO0.net]
>>449
なったのか少しは便利になったのか

458 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 18:27:21.85 ID:eHwxQvGT0.net]
最近どころか、20年近く前からだ

459 名前:
>>448みたいな文法は存在しないんだけど、どこの世界のC言語なんだろ
[]
[ここ壊れてます]

460 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 18:32:06.89 ID:HgW0fxVo6.net]
>>448みたいな文法欲しかった

461 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 18:48:25.91 ID:9KgPFlPY0.net]
>>449
最近、ダメかもしれなくなったんだが

462 名前:デフォルトの名無しさん [2017/10/03(火) 18:53:27.85 ID:9r7sfmBO0.net]
>>448
これダメだC#だった、エラーになるわ

463 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 19:11:20.28 ID:XytTuyvU0.net]
LLVMの作者に物凄い勢いで嫌われたから…



464 名前:デフォルトの名無しさん [2017/10/03(火) 22:39:06.25 ID:djTGgeKPp.net]
iOS11にしたらまともに入力できない

このクソOS

465 名前:デフォルトの名無しさん [2017/10/03(火) 22:39:07.29 ID:djTGgeKPp.net]
iOS11にしたらまともに入力できない

このクソOS

466 名前:デフォルトの名無しさん [2017/10/03(火) 22:46:23.61 ID:djTGgeKPp.net]
このクソOS死ね

467 名前:デフォルトの名無しさん [2017/10/03(火) 22:46:56.99 ID:djTGgeKPp.net]
まともに入力できないって

468 名前:デフォルトの名無しさん [2017/10/04(水) 00:38:32.06 ID:JPTWWYYO0.net]
>>446
www.buildinsider.net/language/clang/01

469 名前:437 mailto:sage [2017/10/04(水) 01:30:41.39 ID:+TP/cS/R0.net]
返事が遅れてすみません。レスありがとうございます。
再現性の乏しい質問で申し訳ないです。

>>438
nは変わらないです。

>>441
文字列操作ではあるんですが終端記号は書き込みません(全部文字だけ)

>>444
OSはCentOS 6.9、言語はc++、コンパイラはgcc7.1.0です。

さっぱり原因が想像できないのですが、考えられる可能性としては、funcの中でメモリがずたずたに壊れたものの
偶然エラーにならずに戻ってきてmemsetでやっと死んだ、というパターンでしょうか?

470 名前:デフォルトの名無しさん [2017/10/04(水) 06:19:36.24 ID:Sd/env2d0.net]
>>452
存在するだろ
char charList[32]と等価になるぞ

471 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 06:24:24.64 ID:dCjKMF950.net]
二次元配列の宣言についての話で合って
コンパイルが通るかどうかだけの話なんてしてねーぞ

472 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 07:22:39.57 ID:zhlDARQmM.net]
>>462
func何やってんの?

473 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 08:10:59.64 ID:F93q6j3ba.net]
*charList=0とかやってんじゃない?



474 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 08:22:11.58 ID:F93q6j3ba.net]
ってか二次元配列と二重配列間違ってねーか?
それとfunc呼んでからmemsetしたらfunc呼ぶ意味あるの?
memsetもループさせるんじゃなく一回で全部fillした方がよくない?
とかとか。

475 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 11:24:36.83 ID:hBVSLcAId.net]
>>467
1行目 イミフ
2行目 意味があるから呼んでるんだろ
3行目 明確な利点があるならそれを書け

476 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 13:29:31.00 ID:ugGBRoRga.net]
>>468
ポインタの配列と二次元配列を間違ってるのではないかってこと。
書き込んだあと空白で埋めたら意味なくないか?funcが何してるか知らんけど

477 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 13:49:31.85 ID:hBVSLcAId.net]
>>469
funcの中身を知らないのに「意味無い」とか「意味あるの?」とかっていう書き込み、意味あるの?
それを聞けば問題の解決になるの?

少なくとも空白を埋めてない部分があるし
問題が発生する範囲で簡略化したのかもしれないし
当然意味があるから呼んでるんだろうと思うのが普通

478 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:20:16.63 ID:Ot6iICCz0.net]
C言語は俺に訊くなスレになってるな

479 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:30:40.85 ID:eeE5kOTG0.net]
最近オブジェクト指向が入り口で、C言語がわからんっていう子が多いからなあ

480 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:50:53.16 ID:38WTG0/g0.net]
再現する最小限のコードに削ってるうちに問題点を自ら発見して終了

481 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:54:54.68 ID:PNa+p1hk0.net]
つーかfunc()以外の部分で特に問題が見当たらないならfunc()のせいで確定という単純明快な話
自作コードならfunc()もうpできるっしょ

482 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:56:07.21 ID:6Zs0a9ZSa.net]
>>470
出されたソースのコメント見ると、配列の考え方が間違ってるように感じるけどね。それを示唆したかっただけだよ。

483 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 15:12:09.84 ID:f7rOF4qk0.net]
>>462
ふと疑問に思ったんだが、

>func(charList); // charListに書き込む関数

関数を呼び出す際に、nの値を教えなくて良いのか?



484 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 16:34:23.23 ID:hBVSLcAId.net]
>>475
例外とは関係ない
合コンじゃないんだから無駄に話を広げる必要はない
問題の解決が遅くなるだけ

485 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 16:35:46.39 ID:hBVSLcAId.net]
あとはfuncの中身を見ないとなんとも

組み込みのショボい環境だとスタックオーバーフローって可能性も無いことは無いが

486 名前:デフォルトの名無しさん [2017/10/04(水) 16:51:26.35 ID:+admsRHQ0.net]
struct I2C_MEM //構造体の型宣言
{
char DEV_ADR ;
char REG_ADR ;
char DATA[0x03] ;
};



struct I2C_MEM I2C_MEM[3] =//構造体の型宣言
{
{ 0x7C , 0x01 , 0x00000000 }
{ 0x7C , 0x01 , 0x00000000 }
{ 0x7C , 0x01 , 0x00000000 }
} ;

487 名前:デフォルトの名無しさん [2017/10/04(水) 16:56:16.34 ID:+admsRHQ0.net]
↑構造体の初期化で
charを連続4byte設定するときの書き方
0x00000000はたぶん違いますよね?
どう書けば良いんですか?

初心者過ぎてすいません

488 名前:デフォルトの名無しさん [2017/10/04(水) 16:59:03.20 ID:+admsRHQ0.net]
struct I2C_MEM      //構造体の型宣言
{
char DEV_ADR ;
char REG_ADR ;
char DATA[0x03] ;
};

struct I2C_MEM I2C_MEM[3] =     //構造体の初期化
{
{ 0x7C , 0x01 , 0x00000000 }
{ 0x7C , 0x02 , 0x00000000 }
{ 0x7C , 0x03 , 0x00000000 }
} ;

489 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:01:20.64 ID:HMkkIXOid.net]
>>479
> struct I2C_MEM
> {
> char DEV_ADR ;
> char REG_ADR ;
> char DATA[0x03] ;
> };
struct I2C_MEM I2C_MEM[3] =
{
{ 0x7C , 0x01 , {0} }
{ 0x7C , 0x01 , {0} }
{ 0x7C , 0x01 , {0} }
} ;

490 名前:デフォルトの名無しさん [2017/10/04(水) 17:04:07.51 ID:+admsRHQ0.net]
>>482

回答ありがとうございます!
ちなみにこれだったらどうかくんでしょうか?



struct I2C_MEM I2C_MEM[3] =     //構造体の初期化
{
{ 0x7C , 0x01 , 0x12345678 },
{ 0x7C , 0x02 , 0x12345678 },
{ 0x7C , 0x03 , 0x12345678 },
} ;

491 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:19:18.44 ID:HMkkIXOid.net]
>>483
struct I2C_MEM I2C_MEM[3] =
{
#ifdef BIG_ENDIAN //ビッグエンディアンの場合
{ 0x7C , 0x01 , {0x12, 0x34, 0x56, 0x78} },
{ 0x7C , 0x02 , {0x12, 0x34, 0x56, 0x78} },
{ 0x7C , 0x03 , {0x12, 0x34, 0x56, 0x78} },
#else // リトルエンディアンの場合
{ 0x7C , 0x01 , {0x78, 0x56, 0x34, 0x12} },
{ 0x7C , 0x02 , {0x78, 0x56, 0x34, 0x12} },
{ 0x7C , 0x03 , {0x78, 0x56, 0x34, 0x12} },
#endif
} ;

492 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:21:40.35 ID:HMkkIXOid.net]
>>484
> char DATA[0x03] ;
おっと、これじゃあ4バイト入らないぜ。
char DATA[4];
にしないと。

493 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 17:27:10.52 ID:PA2rRcfg0.net]
全くどうでもいいことだが最近の若いモンはスマホに合わせて上矢印なのな
一つ勉強になった



494 名前:デフォルトの名無しさん [2017/10/04(水) 17:28:20.90 ID:VznoOWf36.net]
PCでも上じゃね?

495 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:40:04.96 ID:HMkkIXOid.net]
>>484

#ifdef BIG_ENDIAN
# define ENDIAN_FIX(a,b,c,d) a,b,c,d
#else
# define ENDIAN_FIX(a,b,c,d) d,c,b,a
#endif

struct I2C_MEM I2C_MEM[3] =
{
{ 0x7C , 0x01 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} },
{ 0x7C , 0x02 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} },
{ 0x7C , 0x03 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} },
} ;

496 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:04:30.94 ID:9y3nqzOw0.net]
構造体の中身から推測すると、
書く順番はエンディアンに依存しないと思う
単純に配列の頭から1バイトずつ送信するだけ

仮にエンディアンで順番が変わるとしても
どうせガッツリ環境依存なコードなんだから
依存しちゃえばいい
環境依存が無いコードを書くつもりなら、
charが1バイトかどうかにも依存しないようにしないとね

497 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:10:15.78 ID:9y3nqzOw0.net]
>>488みたいなマクロは最悪
エンディアンていう言葉を覚えたばっかりの初心者が作る糞コード

498 名前:デフォルトの名無しさん [2017/10/04(水) 18:48:35.51 ID:VznoOWf36.net]
もちつけよw

499 名前:片山博文MZ mailto:sage [2017/10/04(水) 19:22:55.76 ID:HMkkIXOid.net]
エンディアンについて解説が必要ですか?
はい/いいえ

500 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:07:04.96 ID:V7FXDajl0.net]
いいえ

501 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:09:03.80 ID:V7FXDajl0.net]
Definitely no.

502 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:18:42.31 ID:38WTG0/g0.net]
struct I2C_MEM //構造体の型宣言
struct I2C_MEM I2C_MEM[3] =//構造体の型宣言

この手の文法で自明なことをコメントにする文化はなくならないのかな

503 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:46:10.64 ID:hBVSLcAId.net]
俺のコードはその対極
大きな流れしかコメントをかかない



504 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:20:04.88 ID:azmmV5/P0.net]
I2Cか。データは8ビットで受けて、8ビットシフトしてビットORだな。
data = hi<<16 | mid<<8 | lo

505 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:27:53.34 ID:hBVSLcAId.net]
どう見ても送信

506 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:31:39.40 ID:hBVSLcAId.net]
>>492
お前の糞マクロ、どの辺が糞か解説が必要?

507 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:32:35.25 ID:hBVSLcAId.net]
ちなみに、ゆで玉子は輪切り派

508 名前:デフォルトの名無しさん [2017/10/05(木) 01:23:13.38 ID:ioWgBjMx0.net]
>>483
やってみな。

509 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 01:24:28.79 ID:ioWgBjMx0.net]
やってみなじゃない。どう動くかじゃなくてどう書くかか。
どうなって欲しいのかが書かれてないから答えられないな。

510 名前:437 mailto:sage [2017/10/05(木) 03:25:02.16 ID:JVwY/YZa0.net]
>>465
全体のコードは自作というか(自社製)ですが、funcは他社のライブラリなんです。
ソースがあればなんとかなったのかもですが・・・。

>>467
実際はfunc呼んだ後にcharListの値を呼んで色々作業しています。

>>469
普通の2次元char配列のつもりです。2次元配列というのはC言語的にはシンタックスシュガーにすぎず、
char a[m][n]もchar a[m*n]も等価なのですよね。なので、先頭ポインタから(m*n-1)個先までの
アドレスの範囲内なら範囲外アクセスエラーは起こり得ないと理解しています。



>>474の結論に至る前に、何かC言語で致命的な勘違いや思い込みをしているのかと
思って質問した次第です。今思うとエスパー回答を強いてしまって大変申し訳ありませんでした。

ひとまずはfuncを一切呼ばない形に直して事なきを得ました。
>>437で言った、「charListをプリントしたりすると何故か問題なく動く」からそれで一時凌ぎする考えも
頭をよぎりましたが、思いとどまりました。

ひとまずこれで終えます。回答くださった方々、本当にありがとうございました。

511 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 03:26:43.92 ID:JVwY/YZa0.net]
>>503
×charListの値を呼んで
○charListの内容をstringに変換して(charListは不変)

512 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 05:32:30.50 ID:PdAAtG4s0.net]
>>503
>char a[m][n]もchar a[m*n]も等価なのですよね

そうだっけ?

513 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 05:39:44.88 ID:+DJIpzmcM.net]
char[m][n]はchar**、char[m*n]はchar*、データ型は違う



514 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 08:10:49.48 ID:2SMjslBqM.net]
funcに与える引数の条件がちゃんと理解できてないとか

515 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 08:15:39.56 ID:Nh1QNpvaF.net]
char[m*n]って何?
結局ただの一次元配列でしょ?

516 名前:デフォルトの名無しさん [2017/10/05(木) 10:10:50.98 ID:6niZC7Nf0.net]
>>506
堂々と嘘つくんじゃねえ
sizeof(char[m][n]) != sizeof(char**)

517 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 10:11:07.83 ID:TrTYAooo0.net]
>>503
> 2次元配列というのはC言語的にはシンタックスシュガーにすぎず、
> char a[m][n]もchar a[m*n]も等価なのですよね。なので、先頭ポインタから(m*n-1)個先までの
> アドレスの範囲内なら範囲外アクセスエラーは起こり得ないと理解しています。

だいたいの実装では、特に char 類なら、動作上問題が起こることは考えにくいものの、
言語規格上の保証は無いよ。
https://www.jpcert.or.jp/m/sc-rules/c-arr30-c.html

518 名前:デフォルトの名無しさん [2017/10/05(木) 12:14:43.27 ID:6niZC7Nf0.net]
そういう保証は紙っきれの条文より自分で確認・検証することが最重要だ
いくら「保証されている」ことでもコンパイラがバグったり中には確信的に違反するケースまである

空想論の域を出ないくだらんことのために
現実的なアイディアを諦めていては生産性が上がらない

519 名前:デフォルトの名無しさん [2017/10/05(木) 12:51:26.83 ID:TRdRMfhC0.net]
struct I2C_MEM
{
char DEV_ADR ;
char REG_ADR ;
char DATA[4] ;
} static I2C_MEM0 ;


I2C_MEM0.DEV_ADR = 0x7C ;
I2C_MEM0.REG_ADR = 0x01 ;
I2C_MEM0.DATA[4] = { 0x11,0x12,0x13,0x14 } ;  ←これはエラーになる
//I2C_MEM0.DATA[0] = 0x11 ;            ←こちらのパターンはエラーにならない
//I2C_MEM0.DATA[1] = 0x12 ;
//I2C_MEM0.DATA[2] = 0x13 ;
//I2C_MEM0.DATA[3] = 0x14 ;

4バイト一気に設定の書き方はどうすればいいんでしょうか?

520 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:51:30.07 ID:/OlbfMDH0.net]
コメント邪魔

521 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:52:03.70 ID:/OlbfMDH0.net]
誤爆m(_'_)m

522 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:59:34.91 ID:/OlbfMDH0.net]
>>512
一気に初期化する必要性がわからんが

糞コード
assert( 4 == sizeof ( unsigned long ) );

*( unsigned long* )I2C_MEM0.DATA = *( unsigned long* )"\x11\x12\x13\x14";

523 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 13:01:44.78 ID:gOaVCYiad.net]
>>512
配列の複数の要素を一気に代入する記述はない
そういう風にひとつひとつ代入するか
memcpy使ったり構造体にして代入したりする



524 名前:デフォルトの名無しさん [2017/10/05(木) 13:04:36.67 ID:TRdRMfhC0.net]
なるほどー ありがとうございました

525 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 13:06:18.55 ID:/OlbfMDH0.net]
ARMだと1バイトづつ初期化した方が小さくなるような気がする

526 名前:デフォルトの名無しさん [2017/10/05(木) 13:13:39.58 ID:/W/G46pt6.net]
無名配列のリテラルは初期化時には使えるけど代入には使えないってこと?

527 名前:デフォルトの名無しさん [2017/10/05(木) 13:16:53.65 ID:/W/G46pt6.net]
初期化時というか宣言時

528 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 19:51:18.71 ID:72rIdNeW0.net]
ビッグエンディアンの環境を教えてください

529 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:02:42.15 ID:Xv32D2hUd.net]
HP-UX、MOTOROLA、AIX、Solaris

530 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:09:22.11 ID:Xv32D2hUd.net]
Apple PowerPC Mac、Sun Blade、SGI O2

531 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:14:07.63 ID:Xv32D2hUd.net]
ビッグエンディアンの仮想環境はQEMU以外にないから、エミュレータを作れば有名になれるよ。

532 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:29:07.01 ID:Xv32D2hUd.net]
>>524
ごめん、PowerPCのエミュレータにPearPCがあった。

533 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:30:19.57 ID:3IfCpLlr0.net]
SH



534 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:32:46.00 ID:Xv32D2hUd.net]
SolarisエミュレータにCHARONがある(有料)。ビッグエンディアンの環境はお金がかかるよ。

535 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:34:21.70 ID:3IfCpLlr0.net]
整数の負の数に1の補数を用いる環境
整数の負の数に絶対値と符号ビットを用いる環境
整数にトラップ表現がある環境
charが8の倍数ビットでない環境

を教えてください

536 名前:デフォルトの名無しさん [2017/10/05(木) 20:34:53.22 ID:olaqz/S6p.net]
ARMは選択出来たっけ?
まあ、みんなリトルで使ってるがな。
地味にMicroBlazeがビッグだな。

537 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:39:08.91 ID:3IfCpLlr0.net]
MIPSもバイ

ミドルエンディアンの環境を教えて下さい

538 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:41:19.68 ID:3IfCpLlr0.net]
おれはリトル
わざわざお尻から食べないよね普通

539 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:42:01.73 ID:Xv32D2hUd.net]
博物館に所蔵されてるようなコンピュータ調べて何の意味があるんだろう。。。

540 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:44:02.75 ID:3IfCpLlr0.net]
>>522 >>523 のこと?

541 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:46:00.84 ID:Xv32D2hUd.net]
>>528
絶滅したコンピュータアーキテクチャの話はしたくない。

542 名前:デフォルトの名無しさん [2017/10/05(木) 20:46:52.00 ID:olaqz/S6p.net]
6502とか、地味に生きてるやん?
あ、あれはエミュレータか。

543 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:04:49.44 ID:Xv32D2hUd.net]
ほとんどの環境のcharが8ビットなのは、基本ASCIIが7ビットで表現できることと、7ビットより8ビットの方が切りが良くてパリティビットなどに使えて便利だったことによる。



544 名前:デフォルトの名無しさん [2017/10/05(木) 21:09:26.31 ID:PAHxl06e0.net]
最近C言語ハマってる
言語がシンプルなのと直にコンピュータを操ってる感

545 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:16:28.12 ID:Xv32D2hUd.net]
charが7ビットだったら、パックトBCDもなかった。

546 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:25:12.02 ID:Xv32D2hUd.net]
7ビットだったら1バイトの16進表示で1ビット無駄になるところだった。

547 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:44:27.38 ID:Xv32D2hUd.net]
GCCかLLVMを使えば、適当なアーキテクチャのC言語コンパイラーを自由に作ることができるらしい。

548 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:54:15.38 ID:Xv32D2hUd.net]
まあ、例えばNintendo SwitchのアーキテクチャをGCCかLLVMで定義すれば、そのアーキテクチャのコンパイラーが作れる訳だ。

549 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/05(木) 22:04:36.58 ID:dkgh60ez0.net]
そういう用途なら「高位合成」でggrと幸せになれるぞ
LLVMは多分出番なしだ

550 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 23:19:53.46 ID:G8RM0vBkM.net]
スイッチはテグラじゃないの?

551 名前:片山博文MZ mailto:sage [2017/10/05(木) 23:34:31.98 ID:Xv32D2hUd.net]
うん、NVIDIA Tegra のカスタムだね。例えが悪かったか。

552 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 23:36:35.55 ID:3IfCpLlr0.net]
>>536
charが16bitなら最近使ったけど

553 名前:デフォルトの名無しさん [2017/10/05(木) 23:58:01.04 ID:ioWgBjMx0.net]
>>512
strncpy(I2C_MEM0.DATA, "\x11\x12\x13\x14", 4);



554 名前:デフォルトの名無しさん [2017/10/06(金) 00:05:52.06 ID:L6h7mNkA0.net]
実行時間の長い再帰関数(ハノイの塔)を実行しながら過程をglutというOpenGLライブラリで開いたウィンドウに描画させたいのですが方法ありませんか?
ステップ毎に再帰関数を最初から実行するしかないですか?

555 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 01:40:53.41 ID:tqIbkLAn0.net]
再帰して、関数を無限に呼ばない。
答えをメモ化しろ

「メモ化」で検索!

556 名前:デフォルトの名無しさん [2017/10/06(金) 01:51:40.09 ID:FhOeSxdK0.net]
-1.400000e+01 2.043459e+01 1.738866e-15
-1.398525e+01 2.029842e+01 3.900652e-01
-1.399008e+01 2.029842e+01 -1.300367e-01

3DデータのSTLと言う形式で使われてるこの様な数字の型は
printfで出力する場合どの型フィールドになるのでしょうか
%e %gだけでは何だか違います

557 名前:デフォルトの名無しさん [2017/10/06(金) 02:18:01.36 ID:x0C9073k0.net]
>>549
いやずばり %e だと思うが?

558 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/06(金) 03:03:00.77 ID:RA0YJgv70.net]
>>546
最近出来た関数かな?

559 名前:デフォルトの名無しさん [2017/10/06(金) 03:37:10.08 ID:x0C9073k0.net]
>>551
最近って・・・うーん。

560 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 03:40:43.51 ID:aYA4G4wj0.net]
>>547
ハノイの塔の実行スレッド(A)と描画スレッド(B)を別にする
Bは計算過程を変数Cに書き込む
Aは画面リフレッシュのタイミングでCを描画

561 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 03:41:39.90 ID:aYA4G4wj0.net]
逆だw
Aは計算過程を変数Cに逐次書き込む
Bは画面リフレッシュのタイミングでCを描画

562 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/06(金) 04:15:34.73 ID:RA0YJgv70.net]
>>552
memcpyとか、strcpyとか、strncpyは知っているし、_s付き
なんてのも知っているけど、これは初めてかな

563 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 06:22:04.70 ID:RySAjNni0.net]
スペルミスかと思ったけど合ってるよな
間違い探し難しい

どこが変?



564 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 07:43:06.02 ID:p4va+yl10.net]
検索でちゃんと 555 と 546 がヒットするし何か見間違えたんだろうか

565 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 07:45:29.75 ID:iQ5MtuBR0.net]
目を細めて見るとstmcpyに… いや無理があるな

566 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 08:33:19.91 ID:4Iec6HYc0.net]
老眼がすすんで字が読めなくなったジジイだろ
>>546が本当にスペルミスだったとしても全然面白くないツッコミだし

老害は早く死ねば良いのに

567 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/06(金) 09:47:31.52 ID:RA0YJgv70.net]
str[n]cpyが最後に0を書く条件は?
memcpyを使わない理由は?

568 名前:デフォルトの名無しさん [2017/10/06(金) 10:38:12.40 ID:EDz06gtM6.net]
自分のミスはスルー

569 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 10:39:45.78 ID:d6jfQR1X0.net]
strncpyは0で終端される条件が毎回わからなくて敬遠していたんです。
でも、strlcpyを使うようになってから肌年齢が10歳若返りました!
今は毎日がとっても楽しいです。

570 名前:デフォルトの名無しさん [2017/10/06(金) 10:54:46.60 ID:U5/7Dlcy0.net]
>>548
おお!センクス!

571 名前:デフォルトの名無しさん [2017/10/06(金) 13:16:11.88 ID:qH0Ei3hn0.net]
>>559
おまえさんが言わなくても老いた者は死にゆくように自然はできている
それを妨げるなという主張なら医療業界に言え

572 名前:デフォルトの名無しさん [2017/10/06(金) 14:05:32.93 ID:UT/zOTNDp.net]
何の為にサイズ指定があるか、考えりゃわかるじゃん?

573 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 14:53:14.89 ID:4Iec6HYc0.net]
>>564
「早く」の意味を調べてからほざきなさい



574 名前:デフォルトの名無しさん [2017/10/06(金) 15:16:39.88 ID:qH0Ei3hn0.net]
>>566
形容詞には比較をつけろ
一年目でおぼえる初歩だろうがボケ

575 名前:デフォルトの名無しさん [2017/10/06(金) 15:20:28.76 ID:B4vVDMXU0.net]
うんち!

576 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 17:45:14.09 ID:4Iec6HYc0.net]
>>567
朝鮮語ではそう言うルールがあるのか?
日本語にはないぞ

577 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 18:41:01.91 ID:fZ4i0/3ka.net]
>>567
>>559のレスの中の「早く」の使い方は自然だと思うが…。
日本語学校の1年目に、どう教わったの?

578 名前:デフォルトの名無しさん [2017/10/06(金) 20:42:56.05 ID:qH0Ei3hn0.net]
>>569
朝鮮語か日本語かには関係ない
電気屋のルールだ

579 名前:デフォルトの名無しさん [2017/10/07(土) 14:47:24.49 ID:f9dDdlSq0.net]
>>555
>>546にはそのstrncpy()が書かれているが?

580 名前:デフォルトの名無しさん [2017/10/08(日) 10:02:50.14 ID:iaWD4MFGE.net]
PHPしかできないザコだったけどC言語が楽しい
Cのスタンダードなコーディングスタイルってないですか?
インデントにタブ使ってたりifに{}使ってなかったりするコードをよく見かけますけど

581 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 10:09:18.29 ID:+nfO/L5n0.net]
戦争でも起こす気か?

582 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:30:23.33 ID:HosRocIl0.net]
>>573
C言語 コーディングスタイル
でググれ
あと結果の報告は要らん
と言うか報告するな
理由は>>574に書いてある

583 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:56:53.58 ID:SX/6L99bd.net]
戦いの火蓋は切って落とされた



584 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:00:43.13 ID:FR3ELF64M.net]
インデントは空白4個だね

585 名前:デフォルトの名無しさん [2017/10/08(日) 13:04:33.16 ID:SXbZ1Yc30.net]
>>573
ほんまC言語楽しいよな
俺もC#かWeb系スクリプト言語しか使ったことなかったんだが

586 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:04:53.34 ID:e96mZsST0.net]
>>577
2つで十分ですよ

587 名前:デフォルトの名無しさん [2017/10/08(日) 13:05:13.53 ID:SXbZ1Yc30.net]
C++はゴミ

588 名前:デフォルトの名無しさん [2017/10/08(日) 14:51:03.41 ID:c+/m9riq0.net]
>>579
いやタブ1つにして表示幅はスペース4つ分だ。

589 名前:デフォルトの名無しさん [2017/10/08(日) 14:54:49.62 ID:c+/m9riq0.net]
>>576
ああ。もうこのスレはスペース開けるか開けないか改行するかしないか何文字にするか中括弧はどうするか行末にバックスラッシュ入れて次行に書くか書かないかgotoどうするか等の話で延々と10年ぐらい費やされるんだろうな。
もちろんエディタの話に飛び火してviがvimがemacsがとなる。

590 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 14:55:08.52 ID:bhcsmcAx0.net]
スペース一つで充分

591 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 15:03:04.04 ID:Eg4i3QFB0.net]
プログラム終了前にfree()が必要かどうかを忘れちゃいかん。

592 名前:デフォルトの名無しさん [2017/10/08(日) 16:00:19.88 ID:tULmhvm40.net]
ちょっと教えてくださいとあるHPから抜粋
意味が分からないので解説お願いします
私が負荷した文は<<  >>で囲みます

struct Person {
char name[20];
int sex;
// char sex;
int age;
double height;
double weight;
} person_s;               <<←今までの自分の認識:Person構造体のインスタンスperson_sを生成 しかしこの認識は後述@でpがインスタンスであると推定できることから間違っていると推定できる>>
                      << person_sは構造体宣言の為の鋳型と推定 しかし様々なプログラムをチェックするとここでインスタンス宣言している例も見受けられる >>
                      << 変数が構造体宣言の為の鋳型なのかインスタンスなのかはコンパイラが記述から自動判断???>>
person_s p;               << ←pがPerson構造体のインスタンスであることは後述@のメンバ呼び出しで推定できる >> 

とかけば、不要な宣言を減らすことができます。
構造体メンバの初期化
各メンバの初期化方法として次のようなものがあります

person_s p = {"Tom", 0, 20, 175.2, 66.5};  <<←構造体宣言鋳型person_sを使用しpをインスタンス宣言??>>

// または

person_s p;         << 構造体宣言鋳型person_sを使用しpをインスタンス宣言?? >>
p.name = "Tom";     << この記述でpが構造体Personのインスタンスであると推定できる ・・・@ >>
p.sex = 0;

<< person_sは構造体宣言の鋳型 pはインスタンスであると推定できるが >>
<< 何故ダイレクトにPersonを使ってpを宣言しないのか? >>
<< 何故person_sなどという変数を使って間接的に宣言するのか? >>
<< うんちくきぼんぬ >>

593 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:03:19.22 ID:dE95R3nJ0.net]
struct Person の前に typedef がありそうな雰囲気



594 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:13:28.90 ID:yi/NbOiJ0.net]
ここかな
https://qiita.com/nom

595 名前:unomu/items/1a72b0150ea0fcf442b0
typedef の書き漏れだろうね
[]
[ここ壊れてます]

596 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:38:19.39 ID:HosRocIl0.net]
>>584
exit() の前にだろ

597 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:08:17.03 ID:F9J/pQ0V0.net]
C++ならtypedefなくても可
多分.cppでビルド通したんだろうね

598 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:13:11.77 ID:dE95R3nJ0.net]
>>589
後の句 person_s を型名として使ってるんで typedef は必須じゃない?
(strust 省略の Person で宣言してるのとは違う)

599 名前:デフォルトの名無しさん [2017/10/08(日) 17:16:54.10 ID:tULmhvm40.net]
なるほどー ありがとうございました

600 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:26:51.19 ID:F9J/pQ0V0.net]
>>590
C++ではtypedefは不要だよ(別にあっても構わないけど)
structとclassはメンバーのデフォルト設定がpublicかprivateかという違いを除けば構文的には全く同じように使える
structで継承することすら出来る

601 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:32:00.82 ID:dE95R3nJ0.net]
>>592
論点はそこじゃなくて
 struct Person { };
 Person p;
が C++ では文法として通るのは指摘の通り

質問元の記述では
 struct Person { } person_s;
 person_s p;

こうなってるから、これじゃ C++ の文法でも通らないでしょうよ ってことで

602 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:37:28.39 ID:F9J/pQ0V0.net]
通るよ
class宣言ではいちいちtypedefなど使わないのと同じように構造体でもtypedefは省略するのが一般的
むしろ先頭の構造体テンプレート名を省略して最後の型名だけ宣言する場合も多い

603 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:42:06.58 ID:dE95R3nJ0.net]
https://ideone.com/e1pLf2
通ったっけ? って確認コード
インスタンスとtypedef の区別つく?



604 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:04:45.47 ID:PUMPETat0.net]
structが省略可能になってtypedefしなくなったのを
typedefが省略可能と間違って覚えてるんじゃないだろうか

605 名前: mailto:sage [2017/10/08(日) 18:08:10.27 ID:dlDwfjxk0.net]
>>594
>>595 を見る限り通らないようだね

606 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:14:58.26 ID:ALuk3l/eM.net]
あれ?
通らないのかこれ?

607 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:20:47.85 ID:dE95R3nJ0.net]
型名のエイリアス宣言と  その型のインスタンスの生成
typedef を省略した場合には、全く同じ記述になるんだけど
後者のインスタンスの生成で翻訳してるぜ

608 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:29:26.73 ID:HosRocIl0.net]
通ると思う方がどうかしてる

609 名前: []
[ここ壊れてます]

610 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:32:58.84 ID:LFQQ2ZHvd.net]
なぜ通ると思ったのか

611 名前:デフォルトの名無しさん [2017/10/08(日) 19:03:56.08 ID:uO7C8UFXE.net]
コーディングスタイルってたくさんあるんですね
とりあえず検索したらエリートの人達が使ってそうなものを集めてみました

C Coding Standard - CMU (ECE)
https://users.ece.cmu.edu/~eno/coding/CCodingStandard.html
GNU Coding Standards
https://www.gnu.org/prep/standards/html_node/Writing-C.html
NASA C Style Guide
homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
C Coding Style - GNOME Developer Center
https://developer.gnome.org/programming-guidelines/stable/c-coding-style.html.en
CERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
Linux kernel coding style
https://www.kernel.org/doc/html/v4.10/process/coding-style.html

どれも難しそうなのでコーディングスタイル見るのやめようと思います。
githubで適当に見ても全然統一されてないし
とりあえずインデントは空白8個で{}を省略しないルールだけにしたいと思います。

612 名前:デフォルトの名無しさん [2017/10/08(日) 19:04:57.70 ID:uO7C8UFXE.net]
空白8個なのはメモ帳で見た時にこのくらいだから合わせてるだけです

613 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:18:41.81 ID:PUMPETat0.net]
また戦争がしたいのか、アンタは



614 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:26:45.12 ID:+nfO/L5n0.net]
戦闘民族

615 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:30:12.30 ID:HosRocIl0.net]
書いてりゃわかると思うけど8は多すぎ
単に昔のシステムがそうだったと言うだけのことだから4とか2でいいと思う

616 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:36:28.95 ID:+nfO/L5n0.net]
あーあ

617 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 21:11:10.70 ID:bhcsmcAx0.net]
>>573
会社や複数人作業ならそれにあわせる
一人で書く分には何でもいいだろ
なんなら、PHPで使ってたスタイルでいいだろ
ってか、PHPの時はどうしてたんだよ

618 名前:デフォルトの名無しさん [2017/10/09(月) 01:05:37.72 ID:6VRPxojV0.net]
マンデルブロの描画がうまくいきません。ズームするとすぐに単調になってしまいます。

動画
https://youtu.be/Ompp_YwrLPw

ソースコード
codepad.org/mlm33eRT

619 名前:片山博文MZ mailto:sage [2017/10/09(月) 01:30:56.68 ID:vdfcSFiBd.net]
>>609
クリックしたら画面の中心を移動させる。

620 名前:片山博文MZ mailto:sage [2017/10/09(月) 01:32:01.57 ID:vdfcSFiBd.net]
ドラッグされたらずらす。

621 名前:デフォルトの名無しさん [2017/10/09(月) 01:53:40.87 ID:6VRPxojV0.net]
>>610
一応クリックするとある境界線付近を拡大するようにプログラムに書いてるのですが...

622 名前:片山博文MZ mailto:sage [2017/10/09(月) 03:32:25.69 ID:vdfcSFiBd.net]
>>612
環境によって座標系が違うのかも知れない。ずらす値を変えてみては?

623 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 03:39:59.55 ID:69HXGpsc0.net]
>>609
単調になるのは k のループ回数が少ないせいでは



624 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 06:38:40.98 ID:hRP3P7r40.net]
そうだね k=1000くらいで

625 名前:デフォルトの名無しさん [2017/10/09(月) 08:53:44.75 ID:IXUwPWpS6.net]
>>613
変えても同じでした
>>614
>>615
なるほど!家に帰ったらやって見ます!

626 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:35:07.86 ID:IkImbMA7a.net]
>>594
変数宣言が全てtypedefになるなんて狂気な言語
実例を教えてくれ

627 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:51:45.98 ID:UMVukllE0.net]
俺はこの書き方
if (condition) {
}
else {
}

628 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:55:27.10 ID:pMEz2IHg0.net]
コーディングスタイルにこだわる奴は素人。

629 名前:デフォルトの名無しさん [2017/10/09(月) 12:12:59.35 ID:9ioWbZDx6.net]
Linuxのソースコードは?

630 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 13:24:11.42 ID:N3YX2Zf80.net]
ソース整形ツールの動作オプションの数で眩暈がするぜw

631 名前:デフォルトの名無しさん [2017/10/09(月) 14:12:40.72 ID:98rFBdXp0.net]
■■たびたびお世話になります なにが悪いのかご指摘おねがいします■■

struct I2C_MEM 
{
char DEV_ADR ;
char REG_ADR ;
char DATA[4] ;
} static I2C_MEM[2] ;

task02_tst ( struct I2C_MEM *aaa )
{
char i,a[2],b[2],c[2];
i = 0 ;

while ( i <= 1 )
{
aaa -> DEV_ADR ;
a[i] = *aaa ;         // データタイプがインコンパチでエラーになる char DEV_ADR を参照してくれない?
aaa -> REG_ADR ;
b[i] = *aaa ;        // データタイプがインコンパチでエラーになる char REG_ADR を参照してくれない?
aaa -> DATA ;
c[i] = *aaa         // データタイプがインコンパチでエラーになる char DATA を参照してくれない?
p += 1 ;

i += 1 ;
}
}

632 名前:デフォルトの名無しさん [2017/10/09(月) 14:22:20.38 ID:98rFBdXp0.net]
↑単純に関数内で構造体のデータにポインタ+インデックスでアクセスしたい

633 名前:デフォルトの名無しさん [2017/10/09(月) 14:26:06.29 ID:98rFBdXp0.net]
間違い発見
p += 1 ; は aaa += 1 ; に置き換えてください



634 名前:片山博文MZ mailto:sage [2017/10/09(月) 14:39:31.76 ID:vdfcSFiBd.net]
>>622
何がしたいのかわからない。
代入の左辺は右辺と互換性のある型じゃないといけないし、配列まるごとの代入はできない。
まずは代入の型をそろえないと。

635 名前:片山博文MZ mailto:sage [2017/10/09(月) 15:09:21.54 ID:vdfcSFiBd.net]
char型のデータを代入したいのなら、両辺の型をcharにしないといけないよ。

636 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 15:26:29.02 ID:G+wiEnLh0.net]
>>622
> aaa -> DEV_ADR ;
> a[i] = *aaa ;

例えばこの部分は a[i] = aaa->DEV_ADR; という処理を意図してるのではないかと思う
ただし aaa->DATA のところは char* 型になるので char 型の c[i] に代入できない

637 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 15:56:12.50 ID:of8Vs49yM.net]
>>622
エスパーするとたぶんこう言うことだと思う
task02_tst ( struct I2C_MEM *aaa ){
int i;
char a[2],b[2],c[2];
for(i = 0; i < 2; i++){
a[i] = aaa[i].DEV_ADR;
b[i] = aaa[i].REG_ADR;
c[i] = aaa[i].DATA; // ここは >>627 の言う通りなにをしたいのかよくわからん
}
}

638 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:01:40.23 ID:u+Z6y4O20.net]
初心者相手に表記法を変えると理解しにくいかも。
本質から外れた部分が目についてしまうからね。

int i = 0;

while ( i <= 1 )
{
a[i] = aaa -> DEV_ADR ; // ポインタaaaが指す構造体の DEV_ADR メンバの値
b[i] = aaa -> REG_ADR ; // ポインタaaaが指す構造体の REG_ADR メンバの値
c[i] = aaa -> DATA ; // c[i] の型と DATA メンバの型が違うからエラー
aaa += 1 ;

i += 1 ;
}

てな感じかと。
>>627-628 をまとめただけ、だけど。

639 名前:デフォルトの名無しさん [2017/10/09(月) 17:19:35.64 ID:tFlwnlNI0.net]
>>629
c を char *c[2] で宣言しておけばなんとかなるね。

640 名前:デフォルトの名無しさん [2017/10/09(月) 17:34:38.15 ID:98rFBdXp0.net]
皆様 どうもありがとうございます
とりあえず代入の書き方が知りたかっただけでありまして
ちなみにインデックスを使用した配列メンバーのアクセスなんだけど
c[i] = aaa -> DATA +0 ;
d[i] = aaa -> DATA +1 ;
e[i] = aaa -> DATA +2 ;
f[i] = aaa -> DATA +3 ;
こんな書き方ってできるの?

641 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:44:30.12 ID:N3YX2Zf80.net]
ポインタを返す場合はそういう書き方
aaa->DATA+3
ポインタの指してる先を求めたい場合は
aaa->DATA[3]

左辺が何を要求しているのか(どういうものを操作したいのか)を頭の中で整理せずに
記述法だけを即物的にトレースするのはとてもまずい

642 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:00:40.01 ID:tNKVEDsJ0.net]
task02_tst()の呼び出しが
task02_tst(I2C_MEM)なのか
task02_tst(&I2C_MEM[1])なのかわからん

前者と仮定するとDEV_ADRにアクセスする方法は
1. (*(aaa + i)).DEV_ADR
2. aaa[i].DEV_ADR
3. (aaa + i)->DEV_ADR
なんかが考えられるけど(2は1の糖衣構文)、ドットとアローそれぞれの
左側の違いを理解しないと先には進めないよ

643 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:02:21.36 ID:tda6mQVw0.net]
>>631
意図が分からないからマトモに答えら



644 名前:れない
実際に数字入れて教えてくれ
例えば>>622はI2C_MEM = {4, 8, {0, 1, 2, 3}} でa,b,cはどうなるの?
[]
[ここ壊れてます]

645 名前:デフォルトの名無しさん [2017/10/12(木) 10:23:33.14 ID:jY+yK3vs6.net]
過疎ってるな

646 名前:デフォルトの名無しさん [2017/10/12(木) 11:18:46.53 ID:mQ4S5/8+0.net]
ちょっと質問です
↓下記のようなwhileの中身を複製するために使う実体化されない変数iをコンパイラ制御のための変数と明示する書き方ってあるんですか?

task02_tst ( I2C_MEM_typ *p , char i)
{
char i ;
i = 0 ;
while ( i < 2 )
{
p = p + i ;
a[i] = p -> DEV_ADR ;
b[i] = p -> REG_ADR ;
c[i][0] = p -> DATA[0] ;
c[i][1] = p -> DATA[1] ;
c[i][2] = p -> DATA[2] ;
c[i][3] = p -> DATA[3] ;
}
}

647 名前:デフォルトの名無しさん [2017/10/12(木) 11:24:19.55 ID:mQ4S5/8+0.net]
task02_tst ( I2C_MEM_typ *p )
{
char i ;
i = 0 ;
while ( i < 2 )
{
p = p + i ;
a[i] = p -> DEV_ADR ;
b[i] = p -> REG_ADR ;
c[i][0] = p -> DATA[0] ;
c[i][1] = p -> DATA[1] ;
c[i][2] = p -> DATA[2] ;
c[i][3] = p -> DATA[3] ;
}
}

に修正します

648 名前:デフォルトの名無しさん [2017/10/12(木) 11:26:34.34 ID:mQ4S5/8+0.net]
task02_tst ( I2C_MEM_typ *p )
{
char i ;
i = 0 ;
while ( i < 2 )
{
p = p + i ;
a[i] = p -> DEV_ADR ;
b[i] = p -> REG_ADR ;
c[i][0] = p -> DATA[0] ;
c[i][1] = p -> DATA[1] ;
c[i][2] = p -> DATA[2] ;
c[i][3] = p -> DATA[3] ;

i += 1 ;
}
}

に修正します

649 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 11:50:40.24 ID:z+R5CP9n0.net]
>>636
先ず日本語をなんとかした方がいい
『whileの中身を複製する』とはどういうことか?
『実体化されない変数』とは何か?
『コンパイラ制御のための変数』とは何か?

650 名前:デフォルトの名無しさん [2017/10/12(木) 12:32:35.60 ID:mQ4S5/8+0.net]
こんな感じで構造体をインデックスで指定した転送命令にコンパイルする意図で書いています

p = p + i ;                            //*実体化されない(マシンコード化されない)コード
mov a[0] ,  [構造体I2C_MEMの基底番地+0]
mov b[0] ,  [構造体I2C_MEMの基底番地+1]
mov c[0][0] ,  [構造体I2C_MEMの基底番地+2]
          :
mov c[0][3] ,  [構造体I2C_MEMの基底番地+5]
i += 1 ;                              //*実体化されない(マシンコード化されない)コード


p = p + i ;                            //*実体化されない(マシンコード化されない)コード
mov a[1] ,  [構造体I2C_MEMの基底番地+6]
mov b[1] ,  [構造体I2C_MEMの基底番地+7]
mov c[1][0] ,  [構造体I2C_MEMの基底番地+8]
          :
mov c[1][3] ,  [構造体I2C_MEMの基底番地+11]
i += 1 ;                              //*実体化されない(マシンコード化されない)コード

・・・で意図通りコンパイルしてくれるわけですが

実体化されない(メモリー空間またはレジスタファイルにアサインされない)char iの意味が
希薄になるのでコンパイラに対する変数だよと明示(コンパイラ&設計者に)したいのだが
そんな書き方ある?ということでありまして

651 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 12:41:11.33 ID:Z8zboj8V0.net]
多少は意図した記述に沿って機械語出力するだろうけど、
保障されてるわけでもないし、最適化他でどうなるかもわからん

「機械語でこうなって欲しい」という目的を達成させるならその部分を機械語で書くか、
(環境によるだろうけど)その部分だけをインラインアセンブラにする

652 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 12:42:56.26 ID:cscfLNVP0.net]
memcpy使ったらいいんじゃないの?

653 名前:片山博文MZ mailto:sage [2017/10/12(木) 12:52:32.73 ID:loBt1/dEd.net]
volatile



654 名前:デフォルトの名無しさん [2017/10/12(木) 13:04:26.04 ID:mQ4S5/8+0.net]
うーーん・・・

volatileは最適化抑止(消すなー!)のための記述と認識しているんですが
volatileの逆の機能が欲しいんですよね 実体化するなー!ってやつです

655 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 13:37:51.69 ID:jX4dlPv10.net]
volatile揮発性の当初の意図は
70年代コンピュータでの磁気コアメモリに置いておく、程度なんじゃあねえの

656 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 13:45:28.14 ID:Z8zboj8V0.net]
実体化するな=機械語としてコードにおくな
ということは、言語上での変数を一切使わずに繰り返し展開するような
テンプレートやマクロでメタプログラミングしたい って話になるが・・・

#define IMP(idx) do { \
a[idx] = p[idx].DEV_ADR; \
b[idx] = p[idx].REG_ADR; \
:
: 以下同じ様に記述
:
c[idx][3] = p[idx].DATA[3] ; } whle(0)

IMP(0);
IMP(1);
IMP(2);

変数を使ってループできないから 繰り返し分リテラルを手で並べる必要あるしー
正直ほめられたやりかたじゃないと思うわ

657 名前:デフォルトの名無しさん [2017/10/12(木) 14:25:00.48 ID:1sF6m3D2p.net]
実体化させたく無いものを記述?
…スラ二本じゃダメなのか?

658 名前:デフォルトの名無しさん [2017/10/12(木) 14:30:09.97 ID:9bJ1Vwh10.net]
そういう話ではないでしょ
そもそもループによるコードのキャストは
記述を短縮化するのが目的なんだから

キャストのためのループであることをコンパイラに
推論させるための変数指定の仕組みがあるのかな?ってはなし

659 名前:デフォルトの名無しさん [2017/10/12(木) 14:32:07.54 ID:9bJ1Vwh10.net]
まあ 指定しなくても現状でコンパイラは推論してるけれどもねw
なんかキモチ悪いといえばキモチ悪いんで指定できればうれしいってだけです

660 名前:デフォルトの名無しさん [2017/10/12(木) 14:36:32.09 ID:OhN0e73F6.net]
死ねゴミ

661 名前:デフォルトの名無しさん [2017/10/12(木) 14:37:45.66 ID:9bJ1Vwh10.net]
なんかすぐ出てこないところをみると
そこらへんはコンパイラまかせなのね

662 名前:デフォルトの名無しさん [2017/10/12(木) 14:38:53.90 ID:OhN0e73F6.net]
クッサ

663 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:45:29.40 ID:Z8zboj8V0.net]
結局 >>639 だったのか・・・



664 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:46:41.92 ID:z+R5CP9n0.net]
返答が幾つもついてるのに出てこないとか言っちゃうのは見たいものしか見ない人の典型だね

665 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:48:17.07 ID:XqOCC09Fd.net]
とりあえずお前には無理だ
諦めな

666 名前:デフォルトの名無しさん [2017/10/12(木) 15:03:43.28 ID:9bJ1Vwh10.net]
大体わかりました
ありがとうございました

667 名前:デフォルトの名無しさん [2017/10/12(木) 15:06:24.03 ID:OhN0e73F6.net]
一から10まで足し合わせるプログラムを教えてください。

668 名前:片山博文MZ mailto:sage [2017/10/12(木) 15:10:29.76 ID:loBt1/dEd.net]
>>657
#include <stdio.h>
int main(void) {
int i, n = 0;
for (i = 1; i <= 10; ++i) n += i;
printf("%d\n", n);
return 0;
}

669 名前:デフォルトの名無しさん [2017/10/12(木) 15:18:14.51 ID:OhN0e73F6.net]
>>658
ありがとうございます!

670 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 18:50:09.63 ID:7bIAw6590.net]
人に思いを正しく伝えられない奴がうまくプログラミングできるとは思えないけど大丈夫なんだろう

671 名前:デフォルトの名無しさん [2017/10/12(木) 20:36:00.66 ID:1sF6m3D2p.net]
俺は逆だと思っている。
人に上手く思いを伝えられないからこそ、
表現手段を駆使して伝えようと努力するんだよな。
絵とか音楽とか、クリエイターってそんな生き物。

672 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 21:49:52.42 ID:wn8w1zGC0.net]
>>661
> 絵とか音楽とか、クリエイターってそんな生き物。
全然違う
あいつらは自分の思いを伝えられるのは自分の表現法方だけだと思ってる
絵を描く奴で説明文を書いて思いを伝えるやつなんていないだろ

673 名前:デフォルトの名無しさん [2017/10/12(木) 23:57:59.88 ID:5ILt7KpA0.net]
>>645
メモリマップドI/Oに使える。特定のアドレスを読むとキーボードで入力した文字が読めるとか、そういうやつ。
読んだ直後に内容が変わる可能性があるので volatile でないとまずい。



674 名前:デフォルトの名無しさん [2017/10/13(金) 00:30:38.46 ID:neFZx4WS0.net]
共有メモリとか mmap() して複数のプロセスまたはスレッドがアクセスする領域も同じか。
あれ? こんなのちょっと前に話題にならなかったか?

675 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 06:51:32.49 ID:txebgbcNM.net]
DMAとかもあるわな

676 名前:デフォルトの名無しさん [2017/10/13(金) 12:09:21.29 ID:UePpwGnn0.net]
ちょっとお尋ねします

char *a ;  と記述すると
 ↓
char a ; 実体化
int (&a) ; 非実体化(コンパイラが使用する変数)

が生成される
*の概念が無いと

char a ;    実体化
int a_point ; 実体化(アドレス長=intとする)
a_point = &a ; 実体化

例えばこう書くことになる


ポインタは関数内で宣言できる
その場合そのポインタの寿命は関数内に限定される


こんな感じの認識であってますか?

677 名前:デフォルトの名無しさん [2017/10/13(金) 12:21:34.93 ID:ZC5rLpvkM.net]
ポインタの寿命はプログラム内じゃないん?

678 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:24:24.54 ID:y6HLA65k0.net]
実体化とか 非実体化とかの オレオレ用語は何を意図してるのかわからん

679 名前:デフォルトの名無しさん [2017/10/13(金) 12:29:00.47 ID:UePpwGnn0.net]
>>667
ということはプログラム内でユニークな名前をつけなければならないということですね?

680 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:29:33.87 ID:x6piWjtI0.net]
>>666
言ってる意味がわからない
何の言語やってたの?

681 名前: mailto:sage [2017/10/13(金) 12:30:40.15 ID:KnON5zi30.net]
>>666
>char a ; 実体化
>int (&a) ; 非実体化(コンパイラが使用する変数)
ポインタを定義したからといって,即応して実体が生成されることはない
ポインタがさす実体は自分で生成しないといけない

682 名前:デフォルトの名無しさん [2017/10/13(金) 12:31:44.24 ID:UePpwGnn0.net]
C言語です
実体/非実体とは機械語に変換されるかどうかということです

683 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:33:52.57 ID:piAojqU/0.net]
実体化とか非実体化とか、オブジェクト指向の概念でしょ。
Cではリテラルに対応するエリアがあって、それをデータの入れ物にするか、アドレスの入れ物にするか、だけでしょ。
いずれにしろ変数の寿命はグローバルスコープに定義するか、静的(static)に定義しないかぎり、
使われる関数のスコープ内に限られるでしょ。



684 名前:デフォルトの名無しさん [2017/10/13(金) 12:33:53.32 ID:/fw1jTt60.net]
>>666
> char a; 実体化
というのを除き、だいたい合ってる
char *a;ではcharの実体は作られずに
int(&a);だけが作られる

Cの前身のBでは、*3 = 1;で
メモリの3番地に1を書き込むようになっていた

アドレス演算子もあって
auto a, b; /* 型の概念がないので記憶クラスだけ */
a = &b; /* bとして使っているメモリのアドレスを取得 */
*a = 1; /* bに1を代入 */

つまり、おまえさんの言うように整数変数を
そのままアドレスの表現に使っていた

685 名前:デフォルトの名無しさん [2017/10/13(金) 12:42:43.01 ID:UePpwGnn0.net]
なるほど ありがとうございました

686 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:46:55.16 ID:DPD6/A6xM.net]
>>672
そんなものはコンパイラ次第で変わる
定数でアドレス取ってなきゃ実体を生成しないとか普通にあるし

687 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:48:21.81 ID:y6HLA65k0.net]
機械語に翻訳されるかどうかは
それまでの文意や環境(特に最適化)次第だもんな

688 名前:デフォルトの名無しさん [2017/10/13(金) 12:49:08.21 ID:UePpwGnn0.net]
ちょっとお尋ねします
ベテランとお見受けする方は

/*    */ 
↑コメントにこれつかいますけど

//
↑何故これつかわないんですか?
なにかしらトラブルの元になったりするんですか?

689 名前:デフォルトの名無しさん [2017/10/13(金) 12:49:26.38 ID:Xi3f71oh0.net]
すげえややこしいな
コンパイラ作りたくなってきた

690 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 13:06:01.52 ID:QZe0YwYUM.net]
>>678
C99準拠を仮定できないなら前者を使わざるをえない
複数行をコメントする場合や文の途中をコメントする場合は基本的に前者を使う
行の後半にコメントを書く場合は両方使う

691 名前:デフォルトの名無しさん [2017/10/13(金) 13:09:27.27 ID:UePpwGnn0.net]
おおおおおお
ありがとうございます
なるほどねー
そういうことですか

692 名前:デフォルトの名無しさん [2017/10/13(金) 14:53:58.16 ID:yVfJQeWEp.net]
//は、文字コード特有のバグがあってだな。

693 名前:デフォルトの名無しさん [2017/10/13(金) 15:14:34.29 ID:/fw1jTt60.net]
>>678
1行コメントならもちろん//を使うが
コメントが2行以上になる可能性が否定できない場合、
毎行いちいち//が必要なのは面倒なので
/*
*/
と折り返す恰好にする

それと1行コメントは内容的に馬鹿っぽくなりやすい
なんて気持ちもちょっとある



694 名前:デフォルトの名無しさん [2017/10/13(金) 16:31:54.32 ID:UePpwGnn0.net]
C99非準拠の環境って工場のメンテとかそんな感じっすかね

695 名前:デフォルトの名無しさん [2017/10/13(金) 16:50:15.81 ID:UePpwGnn0.net]
>>682
も気になるな

アスキーコード "2F2F"って何かあるんですか?

696 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:10:14.68 ID:51NkmwHu0.net]
emacsだとコメントリージョンは/*になるからだろうな。

697 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:23:15.84 ID:kwktlkZb0.net]
>>682 の話は行の最後に \ があると次の行に継続するってやつかな。
その言語仕様と Shift-JIS の特定文字との組み合わせで問題が起きる。
「表」や「能」は文末に来る可能性が高い字でしょ。

698 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:26:39.84 ID:KnON5zi30.net]
いまどき shift jis ですか?

699 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:37:27.25 ID:nzA1z5Pk0.net]
苦Cで勉強してるけど文字列がよくわからん
あれいる?

700 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:43:15.33 ID:KnON5zi30.net]
>>689
どれだ?

701 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:43:35.67 ID:z3X0WVAY0.net]
ただの\0終端の文字型の配列を便宜的に文字列と呼んでいるだけ

702 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:52:09.39 ID:nzA1z5Pk0.net]
文字列処理関数
わざわざ配列に文字列入れる意味あるのか?

703 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:56:53.82 ID:KnON5zi30.net]
>>692
https://9cguide.appspot.com/14-03.html
か?
入力に scanf() 系を薦めているのは古い(fgets() を使うべき)とか問題はあるが、
内容は基本的で絶対に必要なものだ
C には「文字列型」はなく文字型の配列で扱うのは基本的な了解事項だ



704 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:02:19.89 ID:nzA1z5Pk0.net]
>>693
それ
結構重要なんだな
atoi型とかもよくわからんが

705 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:05:48.92 ID:1QR3MvqoM.net]
>>692
入れないと文字処理何もできないよ

706 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:06:49.21 ID:KnON5zi30.net]
>>694
atoi() は文字列の表現からint型に収まる表現に変換するもの
C では "123" と 123 を厳密に区別する

707 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:07:38.35 ID:nzA1z5Pk0.net]
わざわざ配列でやるのってprintfじゃ上書きできないから?

708 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:09:43.61 ID:KnON5zi30.net]
sprintf() というものはある

709 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:26:23.09 ID:D1RCmTnA0.net]
atoi は 文字列から数値へ変換する方向
(s)printf は 数値から文字列に変換する方向

710 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:46:00.32 ID:nzA1z5Pk0.net]
すまんよくわからん
まぁ配列の重要性はわかったけどさ

711 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 19:47:45.81 ID:9FeTZoAH0.net]
入力して下さい ?
? の二倍は---
っての作りたい

712 名前:デフォルトの名無しさん [2017/10/13(金) 19:53:08.82 ID:/fw1jTt60.net]
またfgets厨が湧いたか
Cスレには付きものだが
誰が吹き込んでるんだかしつこさが異常なんだよな
まったく

713 名前:デフォルトの名無しさん [2017/10/13(金) 20:16:18.00 ID:qDJA92iZ6.net]
>>701
/* -*- C -*- */

#include <stdio.h>

int main()
{
int input;
scanf("入力して下さい:%d", &input);
printf("%dの二倍は%d\n", input, input * 2);
return 0;
}



714 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 20:21:21.47 ID:KnON5zi30.net]
>>702
fgets() の方が総合的にすぐれていると思うのだが

715 名前:デフォルトの名無しさん [2017/10/13(金) 21:08:48.11 ID:/fw1jTt60.net]
何がどのように何に対して優れているんだ?
腐っても工学者たるもの客観的で再検証可能な主張をしてみな

716 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 21:11:50.63 ID:D1RCmTnA0.net]
>>703
scanf はメッセージを出力したうえで値を受け取る関数じゃないんだ 残念ながら

717 名前:デフォルトの名無しさん [2017/10/13(金) 21:17:30.86 ID:yVfJQeWEp.net]
え?scanfは、この通り打ち込まないと認識しないよって事だろ?

718 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 21:20:10.60 ID:D1RCmTnA0.net]
>>701 のは 入力して下さい も含めて入力を要求してたのか
こりゃ失礼

719 名前:デフォルトの名無しさん [2017/10/13(金) 21:31:55.79 ID:DZqiVJRN0.net]
>>706
dクス

720 名前:片山博文MZ mailto:sage [2017/10/13(金) 21:37:13.63 ID:aO55acrud.net]
>>701
#include <stdio.h>
int main(void)
{
int n;
char buf[32];
printf("入力して下さい:");
fgets(buf, sizeof(buf), stdin);
n = atoi(buf);
printf("%dの二倍は%d\n", n, n * 2);
return 0;
}

721 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 21:39:30.87 ID:KnON5zi30.net]
>>705
scanf() はバッファオーバーランの温床
scanf("%s"); と何気なく書いてしまうとアウト
最初からバッファサイズを意識しなければならない fgets() の方が教育的

722 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:15:45.85 ID:xDZ8VANT0.net]
それ都市伝説だから、単に使い方間違えてるだけだから!
フィールド幅をちゃんと指定すればscanf系でも安全だよ?

まぁ、エラーメッセージの都合上fgets使うかもだけど。。。

723 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:16:23.56 ID:HDAg9FRW0.net]
gets_s()やscanf_s()を使えば済む話に思えるが



724 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:20:11.49 ID:vlU7OwXLM.net]
言いたいことは分かるなぁ
printfだって使い方間違えればフォーマットストリングで死ぬしな

725 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:28:05.05 ID:KnON5zi30.net]
>>712
そのフィールド幅の設定にマクロを使って指定できない,ハードコーディングの形になってしまう
これでは確保側との連携が取れない

726 名前:デフォルトの名無しさん [2017/10/13(金) 22:31:22.01 ID:KDt3KwS+0.net]
C言語はアセンブラのラッパー言語だから、そう言うもんは各自が気を付ければいいのであって、へんな関数量産すんな。

727 名前:デフォルトの名無しさん [2017/10/14(土) 04:50:34.97 ID:rkGKts9o0.net]
scanf() は POSIX.1-2008 で m という修飾子が規定されてだな・・・
https://paiza.io/projects/que1l9qus5fMStBgkGgF9w

728 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 05:25:15.07 ID:G4fIdpwa0.net]
m修飾子はscanf()の中でバッファの確保とポインタ代入をしてくれる、か。
使用者側がバッファを用意して容量はこれだけ、と言明するのとはちと違うね。

実用だと書式文字列をsnprintf()か何かで生成する手かなぁ。

729 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 06:38:32.00 ID:qjmLCkqj0.net]
実用なら動的確保で問題ねーだろ

730 名前:デフォルトの名無しさん [2017/10/14(土) 06:44:41.93 ID:YpZiBRe40.net]
>>718
文字数制限したい場合は %3mc のように c を使うとできる。メモリ確保は相変わらず scanf() 側でやるので後で free() が必要であることには変わりがないが。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/scanf.3.html

731 名前:デフォルトの名無しさん [2017/10/14(土) 07:16:53.80 ID:F19RwFTi0.net]
>>711
くだらんなあ
%sのためにわざわざscanfなんぞ使う珍獣の話しかできんのかおまえは

732 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 09:37:54.97 ID:wj7CJkun0.net]
>>721
この話の発端のとあるC教育サイト
https://9cguide.appspot.com/14-03.html
では
scanf("%s");
を使っちまっている
珍獣というほどのものではないのでは?
禁じ手をやってしまう scanf() は悪

733 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:38:59.99 ID:wj7CJkun0.net]
>>720
所有権をうんぬんするようなところ、たとえば malloc() したところで free() する、という教義のもとでは使うのに抵抗があるかもしれない、
win32api などはそんなかんじ



734 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:40:09.00 ID:kY4tNrcHd.net]
>>723
教義という表現に込められたいやらしさ

735 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:41:35.66 ID:qjmLCkqj0.net]
>>723
windowsならscanf_s使え、posixならm修飾使えで解決ってことだな

736 名前:デフォルトの名無しさん [2017/10/14(土) 13:41:17.27 ID:YpZiBRe40.net]
windowsの方でもscanf()のmあるのでは?

737 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 14:15:25.78 ID:qjmLCkqj0.net]
なんでposix拡張があると思うの?

738 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 14:56:12.00 ID:VRAn8B+V0.net]
配列って[]だったら自力でEOS入れなきゃいけないけど[]の中に数字入れると自動で入るの?

739 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 15:53:03.38 ID:wj7CJkun0.net]
>>728
逆だ
数字いれると自分で \0 を入れないといけない
数字がない場合は、\0 を自力で書かなくとも良い

740 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 15:58:39.20 ID:pEkiZp92a.net]
[迷信] scanf ではバッファオーバーランを防げない
www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html
[迷信] scanf でキーボードから入力
www.kijineko.co.jp/tech/superstitions/input-from-keyboard-by-scanf.html

741 名前:デフォルトの名無しさん [2017/10/14(土) 15:59:02.19 ID:bKRFV+pB0.net]
はい ちょっとお邪魔しますよ
ISR() signal() の違いについて
どちらを使うべきなのか うんちくきぼんぬですよ

742 名前:デフォルトの名無しさん [2017/10/14(土) 16:17:48.14 ID:bKRFV+pB0.net]
↑割り込みハンドラで使う関数についての質問です

743 名前:デフォルトの名無しさん [2017/10/14(土) 16:24:17.93 ID:J5VLsuMb0.net]
組み込み系だとmallocなんか初期化関数ん中でしか使わない。



744 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 16:32:11.89 ID:qjmLCkqj0.net]
>>731
AVR libc独自か、規格で定められているかの違い
環境が限定されるならISRで良い

745 名前:デフォルトの名無しさん [2017/10/14(土) 16:42:09.10 ID:bKRFV+pB0.net]
なるほど! ありがとうございました

746 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 16:57:24.91 ID:/3exgnU7M.net]
>>731
環境わからんけどavrならISR()推奨
avrwiki.osdn.jp/cgi-bin/wiki.cgi?page=%B3%E4%A4%EA%B9%FE%A4%DF

747 名前:デフォルトの名無しさん [2017/10/14(土) 17:13:04.55 ID:bKRFV+pB0.net]
割り込みにまさかの独自ライブラリがあるとは思わなかった
>>736の参照先見ると色々なアトリビュートが設定できるようになっとるわw
その内容をみると自前で割り込み関係のレジスタ叩けば実現可能な機能ばかり
##pop/push/reti自動付加禁止だけはsignal()では実現不能?
signalでよさそうな気が。。。

748 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 17:25:11.34 ID:qjmLCkqj0.net]
ANSI Cのsignalじゃなくて、AVR拡張のSIGNALのこと言ってたの?
なら、manualでSIGNALじゃなくてISR使えってなってるよ
違いも、属性指定できるかどうかだけ

www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#ga67cd0dea412157775c2f2a3ffe9fb8ff

749 名前:デフォルトの名無しさん [2017/10/14(土) 19:42:35.98 ID:F19RwFTi0.net]
>>722
他には?
珍獣でないと主張するにはnが小さすぎるぜ
その小さすぎるnでどうたら言っちゃうおまえ
自らへの死刑宣告を読み上げている自覚はあるのか?

750 名前:デフォルトの名無しさん [2017/10/14(土) 19:59:48.25 ID:4XKuJznc0.net]
クッサ

751 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 02:10:37.75 ID:12RNBD+40.net]
>>739
https://qiita.com/Tsutajiro/items/a5620b17ac530cc96e87
https://ja.wikipedia.org/wiki/Scanf
www9.plala.or.jp/sgwr-t/c/sec05.html
rainbow.pc.uec.ac.jp/edu/program/b1/Ex2-1b.htm
https://stackoverflow.com/questions/2155518/what-is-scanfs-and-scanfd-format-identifiers

「scanf("%s"」とグルるだけで、バッファオーバーランの危険がある注記のない上記記事が山のようにでてくる。
おすきなだけどうぞ、このように説明の手間を省きおざなりに scanf("%s") としてその場をとりつくろい、
読んだ人間は経験が少ないため、これでもいいのか、と勘違いしてしまう例は多々ある

scanf() は悪
やるんなら、fgets() してから sscanf() だの atoi() だの strtol() だので処理するのが定石

752 名前:デフォルトの名無しさん [2017/10/15(日) 04:40:36.84 ID:aLoOQk2A0.net]
>>727
てか、C言語のライブラリの問題なのであるともないとも言えるよな。
POSIX準拠でないCコンパイラでも同じ動きをするライブラリをリンク時または実行時にリンクするならそう動くわけだし。
WindowsでもGCCでコンパイルするならそうなるわけだし。Cygwinの中ならなおのことそうだ。

753 名前:デフォルトの名無しさん [2017/10/15(日) 05:29:35.87 ID:ZgJv24or0.net]
そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。
で、だいたいは妙に長いバッファ用意して誤魔化す(またはそういう仕様にするw)わけだが、
そういうのが通用しない場合はそれを上回る入力をされた時にエラーにするかまたは入力に
残った不要な文字列を捨てる処理はあった方が良い。そうでないなら GCC の getline() を
使うかまたは自作するかだ。



754 名前: mailto:sage [2017/10/15(日) 06:22:39.79 ID:12RNBD+40.net]
>>743
昔宿題スレで作ったけれども忘れてしまった,まあ誰しも一回はつくるものじゃないかな

755 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 07:05:24.20 ID:KCBqed/H0.net]
>>743
> そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。
当たり前だろ
より長い入力が想定されるなら普通に改行がでてくるまで続けて読めばいいだけだし
妙に長いバッファとかアホすぎる w

756 名前:名無し@キムチ [2017/10/15(日) 08:51:39.88 ID:kjrLb6gv0.net]
フィギュアスケートアニメーション作成ソフト「振付王」公開!!

ダウンロード↓
www.vector.co.jp/soft/winnt/game/se516681.html
デモ動画↓
youtu.be/j8KjRXr7zGs

757 名前:デフォルトの名無しさん [2017/10/15(日) 09:47:59.48 ID:J//jr+AC0.net]
はははは、やっとn=6か
で、%sさえ使わなきゃscanfは安全なのか?

758 名前:デフォルトの名無しさん [2017/10/15(日) 09:48:32.63 ID:J//jr+AC0.net]
>>741
>>747

759 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 10:01:56.35 ID:12RNBD+40.net]
>>747
>はははは、やっとn=6か
いくらでも増やせますが

>で、%sさえ使わなきゃscanfは安全なのか?
fgets() 推しの俺にきかれても,そんなことはわからない‥(困惑)

760 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 10:17:19.28 ID:2VM8B8DT0.net]
%sの危険性を長々と説明しているwikipediaを挙げてるんだからギャグのつもりだろ
stackoverflowも%sではなく%*sだし、scanf使ったことないのかな?

761 名前:デフォルトの名無しさん [2017/10/15(日) 13:38:38.59 ID:R4tP3Q0h0.net]
>>749
わからないだと?
おまえシッタカこいてただけか

まあそうだろうな、%s以外に言及できないようだから

762 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 14:19:43.64 ID:12RNBD+40.net]
>>751
fgets()でとりあえず読み込むのは有力な方針だからね、まあsscanf() を後段で使うことはあるね
scanf() のチマチマした書式は必要時に追いかければいい、今調べる必要はないと思うね

>シッタカ
大局観といってほしいね

763 名前:デフォルトの名無しさん [2017/10/15(日) 17:10:16.88 ID:/ln1Xcyy0.net]
scanf vs fgets
もう終わり?



764 名前:デフォルトの名無しさん [2017/10/15(日) 17:14:39.09 ID:Yk/ODCzd0.net]
くだらん戦いだ

765 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 17:27:36.97 ID:12RNBD+40.net]
あおりネタがなくてごめん…

766 名前:デフォルトの名無しさん [2017/10/15(日) 19:51:17.65 ID:DZC0OlhV0.net]
>>753
終わりつーか始まってない
そもそもscanfを把握してない御仁とでは話にならなくて

767 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 20:51:34.80 ID:12RNBD+40.net]
scanf() の詳細仕様を把握しないと判断できない、というのはどうかな?
scanf() が初期のころから建て増し建て増しでどんどん増えていったあの方向性は、正しくない複雑化のしかただと思うよ
scanf() を書く側にたってみると、おぞましい

768 名前:デフォルトの名無しさん [2017/10/15(日) 21:09:03.11 ID:Yk/ODCzd0.net]
scanf()
scanf()
scanf()
scanf()
scanf()

769 名前:デフォルトの名無しさん [2017/10/15(日) 21:13:13.74 ID:Y+x8OcED0.net]
超ド級初心者なんだけどおすすめの開発環境とかある?

770 名前:片山博文MZ mailto:sage [2017/10/15(日) 21:14:17.56 ID:3VVV/TO4d.net]
>>759
Visual Studio 2017。デバッグが簡単で分

771 名前:ゥりやすい。 []
[ここ壊れてます]

772 名前:デフォルトの名無しさん [2017/10/15(日) 21:17:59.72 ID:Y+x8OcED0.net]
vs2017コンパイルの仕方がわからなかった(´・ω:;.:...

773 名前:片山博文MZ mailto:sage [2017/10/15(日) 21:20:39.95 ID:3VVV/TO4d.net]
>>761
プロジェクトにソースファイルを追加して、デバッグメニューからビルドを選ぶだけだぜ。



774 名前:デフォルトの名無しさん [2017/10/15(日) 21:22:30.69 ID:Y+x8OcED0.net]
ビルド押したんだけど反応がなかったんだ・・・
もっかい調べなおしてみる
ありがとう

775 名前:デフォルトの名無しさん [2017/10/15(日) 21:51:37.18 ID:DZC0OlhV0.net]
>>757
建て増しする前の単純な仕様のscanfでさえ
%sしか攻撃できない空っぽ脳みそと
どうやってコミュしろというのか教えてくれ

776 名前:デフォルトの名無しさん [2017/10/15(日) 21:56:59.72 ID:kn6M0KEM0.net]
>>763
プロジェクト作成しないとビルドできない

777 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 22:38:21.05 ID:kUtdNYE20.net]
開発環境はvim+gccだろ?

778 名前:デフォルトの名無しさん [2017/10/16(月) 05:28:44.80 ID:6Nh3McCV0.net]
C言語知ってたらC++簡単に扱える?

779 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 05:48:39.32 ID:imM7X4iq0.net]
基本的に別の言語

780 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 06:10:08.45 ID:00rzJKO2d.net]
vs2017ならフォルダを開くで
勝手にプロジェクトが作られるんじゃなかったかな

781 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 06:35:40.79 ID:IzFutT5/0.net]
開発環境はvim+gcc、そしてmakeだな。

人に勧めようとは思わないけどね。

782 名前:デフォルトの名無しさん [2017/10/16(月) 06:42:19.28 ID:6Nh3McCV0.net]
まあ入出力でCとC++で違うのは解ってたけど本読んで書いてあったのはC++で書いて動かなかったら
最悪Cで書けば動かせるということは書いてあったな

783 名前:デフォルトの名無しさん [2017/10/16(月) 11:15:45.26 ID:tZR41NVXp.net]
つか、コマンドラインアプリで文字列受け取るのは、実行時引数だけで充分だろ。



784 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 13:10:18.09 ID:IgMp2p2X0.net]
パイプやリダイレクト

785 名前:デフォルトの名無しさん [2017/10/16(月) 14:21:36.48 ID:JrEYnkdn0.net]
対話型ツールなら、きちんと入力解析エンジン載せれや。
なんだよscanfってw

786 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:22:15.72 ID:QsDGIdoW0.net]
gccのワーニングで、「declared inside parameter list」これを無視したいです。
-Wではじまるオプションはなにを指定すればよろしいですか?

#pragma GCC diagnostic ignored "-W???

787 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:30:52.70 ID:XYyvKIYbd.net]
>>775
[enabled by default]と書いてあるだろ? この警告はフラグで消せない。アホなコードを直すしかない。

788 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:47:20.37 ID:QsDGIdoW0.net]
>>776
フラグ以外での除去方法もないのでしょうか?
大量にでるために困っています

789 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:50:42.52 ID:XYyvKIYbd.net]
>>777
警告は、引数リストの外側で必要なものを宣言すべきという意味だ。

790 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:55:55.53 ID:IgMp2p2X0.net]
https://ideone.com/91sohX
へぇ 構造体のポインタだし通しそうだけど警告出す仕様なのか
(3行目 実体は不明だけど構造体のポインタを受け取るぞ宣言で警告)

791 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:58:01.40 ID:rvbv2fod0.net]
>>775
gcc -w

792 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:58:20.84 ID:XYyvKIYbd.net]
関数の前にstruct aho;とでも書いておけ。

793 名前:デフォルトの名無しさん [2017/10/16(月) 15:04:51.05 ID:QsDGIdoW0.net]
>>778
原因はわかっています。
構造体宣言を別のヘッダーで行っているにもかかわらず、
プロトタイプ宣言しているヘッダーより上に定義がないのが原因です

>>780
gcc -w ?
#pragma GCC diagnostic ignored "-w" でしょうか?



794 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 15:09:07.34 ID:IgMp2p2X0.net]
本当の定義じゃなくて 仮定義を前に置くだけで消えるのな
struct foo;
void func(struct foo* arg);

795 名前:sage [2017/10/16(月) 15:25:30.24 ID:QsDGIdoW0.net]
>>783
やはりそのように潰していくしかないのでしょうね。

796 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 15:43:34.17 ID:rvbv2fod0.net]
>>782
-Wで始まるオプション名は無いので無視するにはコマンドラインで-wを指定するしかない

797 名前:デフォルトの名無しさん [2017/10/16(月) 22:46:04.81 ID:snZUUJVe0.net]
>>784
いや、てか、そのヘッダ書き換えられないのか?

798 名前:デフォルトの名無しさん [2017/10/16(月) 22:49:48.00 ID:tZR41NVXp.net]
自身のポインタを構造体に宣言するのと同じ様に書けよ。

799 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:21:23.22 ID:7Byc8Q4r0.net]
>>767
C 高級アセンブラ
++ ハナモゲラ

800 名前:デフォルトの名無しさん [2017/10/17(火) 20:18:22.83 ID:Q3d5MYhb0.net]
とりあえず勉強の成果として作ってみたら失敗した
なんでだ

#include <stdio.h>

int main(void)
{
int hyoji;
int kakikomi;
printf("階乗の表示:");
scanf("%d\n",&kakikomi);
for (hyoji = 1;kakikomi > 0;kakikomi--) {
hyoji = hyoji * kakikomi;
}
printf("結果は%dです", hyoji);

fflush(stdin);
getchar();

return 0;

}

801 名前:デフォルトの名無しさん [2017/10/17(火) 20:29:18.04 ID:FJCAd6676.net]
>>789
scanfのところの\nって要らなくね

802 名前:デフォルトの名無しさん [2017/10/17(火) 20:54:03.89 ID:Usq7nzejp.net]
こんなすぐに桁溢れしちまう様なサンプル作ったら、何を試したいのかわからんだろ。

803 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:06:51.02 ID:BSHBGdow0.net]
しかしてfor文の中身を見るに全くの素人じゃあないな



804 名前:デフォルトの名無しさん [2017/10/17(火) 21:08:48.81 ID:Q3d5MYhb0.net]
>>790
消したら動いた
ありがとう

805 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:24:15.93 ID:0jVjcAN80.net]
>>792
どのあたりが?

806 名前:デフォルトの名無しさん [2017/10/17(火) 21:33:12.55 ID:Usq7nzejp.net]
初期化をあんなとこに書いたらコーディング規約で叩かれるしなぁ〜

807 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:46:54.15 ID:fHKaWaxJM.net]
>>794
forのカッコ内には同じ変数しか書いちゃダメって思ってる初心者はいるかも
個人的には変数名からCOBOLer疑惑の方が強い気がする

808 名前:デフォルトの名無しさん [2017/10/17(火) 21:57:54.65 ID:Q3d5MYhb0.net]
VS2017でやってるんだがさっき作ったプログラムを保存して別のファイルで勉強を再開しようとして新しくファイルを作ったんだ
そしてテストも兼ねてさっきのプログラムコピペしたら
プリコンパイルヘッダーを検索中に不明なEOFが見つかりました。
'#include"stdafx.h"をソースに追加しましたか?
と出た
さっきは何もなかったのに

809 名前:デフォルトの名無しさん [2017/10/17(火) 22:19:31.03 ID:PpmRGT3a0.net]
>>797
それな
よく分からんけど空のプロジェクトってやつでプロジェクト作って自分でソースファイル作成すれば出てこない
まあ詳しい人が教えてくれるかも

810 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:26:24.33 ID:/2LkUivAd.net]
>>797
プリコンパイルヘッダーというのは、プロジェクト内のヘッダーを事前にまとめてコンパイルしてビルドを早くする仕組みのことだ。
通常、stdafx.hというヘッダーにプロジェクトで使うヘッダーをまとめる。
一つ一つのソースファイルごとのプロパティでプリコンパイルヘッダーを作成するか、使用するかを設定できる。

811 名前:デフォルトの名無しさん [2017/10/17(火) 22:30:05.39 ID:Q3d5MYhb0.net]
>>799
つまり…どういうことだってばよ

812 名前:デフォルトの名無しさん [2017/10/17(火) 22:35:56.33 ID:Q3d5MYhb0.net]
ソースコード関係の知識は苦Cやらで積めるけどソフトやらの知識はどこで積むんだ

813 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:36:28.37 ID:/2LkUivAd.net]
プリコンパイルヘッダーを使用するのであれば、プロジェクト内のどこかのソースファイル(例えばstdafx.cpp)を使って、プリコンパイルヘッダーを作成しないといけない。
あるソースファイルにおいてプリコンパイルヘッダーを使用するのであれば、プリコンパイル対象のヘッダーを#includeして、そのソースファイルがプリコンパイルヘッダーを使用することを設定する。
プリコンパイルヘッダーを使用しないなら、すべてのソースのプロパティでプリコンパイルヘッダーを使用しないように設定する(空のプロジェクトの規定値)。



814 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:39:12.15 ID:/2LkUivAd.net]
ソースファイルが二、三個なら、とくにプリコンパイルヘッダーは、必要ない。

815 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 22:43:34.43 ID:kMB04QqG0.net]
>>800
おとなしく>>798の言う通りにしろってこと

816 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:44:21.68 ID:/2LkUivAd.net]
ソースファイルのプロパティは、IDE内のソースファイルのアイコンを右クリックして「プロパティ」を選ぶと設定できる。

817 名前:デフォルトの名無しさん [2017/10/17(火) 22:59:14.26 ID:Q3d5MYhb0.net]
>>804
とりあえず空のファイルは作れたけどソースが書けん

818 名前:デフォルトの名無しさん [2017/10/17(火) 23:01:36.30 ID:PpmRGT3a0.net]
新しいプロジェクト

空のプロジェクトを作成

空のソースコードファイルを追加

>>789をコピペ

実行

819 名前:デフォルトの名無しさん [2017/10/17(火) 23:02:26.49 ID:Q3d5MYhb0.net]
>>807
空のソースコードファイルどうやって作るんだ

820 名前:デフォルトの名無しさん [2017/10/17(火) 23:08:36.86 ID:PpmRGT3a0.net]
>>808
プロジェクト開いたときの右にあるソリューションエクスプローラの中のソースファイルというフォルダを右クリックして「追加」から「新しい項目」をクリック。
「C++ファイル」を選択した状態でファイル名の拡張子を.cに変えて「追加」ボタンを押す。

821 名前:デフォルトの名無しさん [2017/10/17(火) 23:15:28.33 ID:Q3d5MYhb0.net]
>>809
できた
もしこれから新しくファイルを作る場合はこれを一からやるのか?

822 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 23:17:42.23 ID:nwT4mK5H0.net]
そろそろ適切なスレに移動しようか

823 名前:デフォルトの名無しさん [2017/10/17(火) 23:18:59.07 ID:PpmRGT3a0.net]
>>810
うん。
簡単なプログラムならVSでプロジェクト作るよりもスタートメニューのVSのフォルダの中にある開発者コマンドプロンプト使ってclコマンドでコンパイルした方が手軽だな



824 名前:デフォルトの名無しさん [2017/10/17(火) 23:21:25.70 ID:Q3d5MYhb0.net]
>>812
ありがとう
これ以上はスレチだからやめておこう

825 名前:デフォルトの名無しさん [2017/10/17(火) 23:46:56.11 ID:PpmRGT3a0.net]
スレチかもしれないけどVS2017でANSI C(C99/98, ブロック先頭でしか宣言できないやつ)だけしかかけないようにできますか?

826 名前:デフォルトの名無しさん [2017/10/18(水) 18:18:50.69 ID:oOtBC3bP0.net]
みなさんは関数名の後に続く中括弧の前に改行を入れますか?入れませんか?

例えば、
int main(void) {
  /* 処理 */
}
のようにするか、

int main(void)
{
  /* 処理 */
}
のように書くのか、どちらが多いのか気になります。

827 名前:デフォルトの名無しさん [2017/10/18(水) 18:20:58.46 ID:M3PcmRrI6.net]
入れます

828 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 19:40:16.86 ID:3bYwz/rX0.net]
if ()
{
}
ならいいけど
for () {
}
だと整合性無いじゃん
って話なら気にするな
だな

829 名前:デフォルトの名無しさん [2017/10/18(水) 21:12:51.09 ID:QINtBhkfp.net]
各社のコーディング規約に合わせます。

830 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 21:18:46.08 ID:lHCL+31VM.net]
>>815
>>604

831 名前:デフォルトの名無しさん [2017/10/18(水) 23:24:47.06 ID:bG8m3FQp0.net]
>>815
改行入れるね。

なんでそうなったかというと、C言語は昔は引数の型をカッコ内に書けなかった。つまり

int main(argc, argv)
int argc;
char *argv[];
{
 ・
 ・
 ・

 return 0;
}

のようにしか書けなかった。その当時から覚え始めたというのと、K&R もそれで書いて
あったのでそのまま何も考えず俺の中で改行入れるのが定着した。

832 名前:デフォルトの名無しさん [2017/10/19(木) 01:30:41.79 ID:gvKdwGxW0.net]
for()
{

}
こうしたときに一行増えるから嫌だだっていう人が多そうだな

833 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 07:54:32.06 ID:b5KBJ9M60.net]
それは宗教問題なので決着は付きません。



834 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 09:08:44.46 ID:TosC+FXp0.net]
関数では改行して、制御構文では改行しない
みたいなオレルールにしてる

835 名前:デフォルトの名無しさん [2017/10/19(木) 10:07:41.47 ID:+lKpulfRp.net]
c#みたいにメソッドを直接鉤括弧内にベタ書き出来る言語でもなけりゃ先行改行一択なんだがなあ

836 名前:デフォルトの名無しさん [2017/10/19(木) 10:25:15.32 ID:r/pcyA6+0.net]
貴重な一行

837 名前:デフォルトの名無しさん [2017/10/19(木) 10:27:21.64 ID:SxBqlyg46.net]
>>824
どういう意味?

838 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 11:44:04.67 ID:zAbDVwTYM.net]
今みたいに時間単価での清算が主流になる前は、
ステップ単価清算ってのもあって、K&R以外で書くと
増量しているって言われていたの。

cb とか indent なんてコマンドはその名残かな

839 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 12:07:16.71 ID:TosC+FXp0.net]
>>826


840 名前:名関数が書けると最初の { 前の改行がおかしい気になるので
自動的に改行入れない派になるという話では?
[]
[ここ壊れてます]

841 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 12:17:59.77 ID:rxi99hG50.net]
>>823
俺もそれで落ち着いた

842 名前:デフォルトの名無しさん [2017/10/19(木) 12:34:12.75 ID:LAmWAPnYM.net]
>>815
統計取る方法がないから、確実な答えはわからないと思うよ。
で、戦争のたびに出る結論が「気にするな」「仕事環境に従え」なんだよねー。

で、俺はどうかと言うと、俺も不思議と>>823に落ち着いた。

843 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 14:41:51.95 ID:cxE3kH8I0.net]
https://ja.wikipedia.org/wiki/字下げスタイル
戦争だ



844 名前:デフォルトの名無しさん [2017/10/19(木) 15:33:33.89 ID:PsgLgPWo0.net]
9cguide.appspot.com/15-05.html
これのモードの切り替えってところで判定結果違うんだが俺だけ?
pがでたらめな数字になる
コピペしても変わらなかったから多分タイプミスとかじゃないと思う

845 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 15:40:34.18 ID:cxE3kH8I0.net]
下の[実行結果] のように出力されるためには

× printf("p = %d\n",p);
○ printf("*p = %d\n",*p);

でないとな

846 名前:デフォルトの名無しさん [2017/10/19(木) 15:50:26.60 ID:PsgLgPWo0.net]
できた
ありがとう

847 名前:デフォルトの名無しさん [2017/10/19(木) 22:50:52.77 ID:4jVxr5CI0.net]
10 1
scanf("%d%d", a, b);
こう読み込んだ時に空白を飛び越えて読み込んでくれるん?
10,1
この時はエラーになっちゃう?

848 名前:デフォルトの名無しさん [2017/10/19(木) 22:53:39.25 ID:Y4NllfOF0.net]
多分空白はできる
,を入れたかったら%d,%dすれば多分できる

849 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:25:36.20 ID:6TDKNKTM0.net]
scanfのフォーマット指定は面倒だぞ
正直使いこなす気すらない

850 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:26:22.86 ID:6TDKNKTM0.net]
if ()
{
}
else
{
}
無いわな

851 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:41:36.02 ID:c1L92+Tr0.net]
if () {

}
else {

}

このフォーマットだと心が平和

852 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:52:20.12 ID:vx5pXf0B0.net]
>>828
うん、さっぱり分からん
そもそも鉤括弧って「」だし。

853 名前:デフォルトの名無しさん [2017/10/20(金) 00:41:34.11 ID:Wby94Fq80.net]
>>837
入力が決められてなかったらscanfじゃあできないからわかるわー



854 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 01:19:37.06 ID:l11teSHI0.net]
>>839
俺もそれ

855 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 04:37:42.47 ID:yDlUYSKqd.net]
>>827
バージョン管理、コーティング規約対応用だろ

空白文字の使い方に無頓着なカスが存在する限り必須

856 名前:デフォルトの名無しさん [2017/10/20(金) 09:24:11.93 ID:NCAWbF0uE.net]
本買うお金がないのですが公式なドキュメントってどこで見れますかね?

857 名前:デフォルトの名無しさん [2017/10/20(金) 09:53:04.65 ID:VprmOZRL0.net]
>>1に書いてあるのではだめなん。

858 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 09:58:32.79 ID:rxHA3C970.net]
質問が漠然としすぎてる。

859 名前:デフォルトの名無しさん [2017/10/20(金) 10:55:02.73 ID:7oD3lqB2p.net]
C言語の仕様は規格が決まってるから、調べれば幾らでもネットに落ちてるんだがなぁ〜

860 名前:デフォルトの名無しさん [2017/10/20(金) 10:56:41.44 ID:7oD3lqB2p.net]
ランタイムライブラリやプラグマやデファインの事なら使ってるコンパイラにドキュメントがあるだろ?

861 名前:デフォルトの名無しさん [2017/10/20(金) 12:36:54.91 ID:XMzxe3/+0.net]
ネスティングを気にするかどうかは各自のスタイルによる
気にならない書き方はいくらでもできるし
ファイル分割がいやでべた書きする奴はネスティング気にするだろ

862 名前:デフォルトの名無しさん [2017/10/20(金) 12:40:39.31 ID:3KJGg1dF6.net]
どう思う?


#include <stdio.h>

void test(a, b, c)
int *a;
int *b;
int *c;
{
*c = *a + *b;
}

int main(void)
{
auto register int a;
auto register int b;
auto register int result;

a = 10;
b = 32;
test(&a, &b, &result);

printf("%d + %d = %d\n", a, b, result);
return 0;
}

863 名前:デフォルトの名無しさん [2017/10/20(金) 12:43:18.91 ID:XMzxe3/+0.net]
ネスティングが浅い記述



864 名前:しか書かない奴にとってはどうでも良い案件なんですよ
技術計算を多用するコード例だとネスティングちゃんとしないと分けがわからなくなる
[]
[ここ壊れてます]

865 名前:デフォルトの名無しさん [2017/10/20(金) 17:02:28.07 ID:Hcn/q6HeM.net]
なんで配列の要素数って省略してもいいのですか?

866 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 17:49:45.76 ID:vESwnO6R0.net]
>>852 どの場面での話かな?

867 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 17:51:51.23 ID:w9jbL0YF0.net]
>>852
コンパイラは要素数を数えられるから
(要素数を数えられない場合は省略できない)

868 名前:デフォルトの名無しさん [2017/10/20(金) 17:57:17.39 ID:7oD3lqB2p.net]
配列は何次元でも扱える代わりに中身の管理は利用者に一任されたんだ。

869 名前:デフォルトの名無しさん [2017/10/20(金) 18:16:01.46 ID:Hcn/q6HeM.net]
>>853
配列の宣言の時です。
省略してはいけないのはどういう場面ですか?

870 名前:デフォルトの名無しさん [2017/10/20(金) 18:42:47.35 ID:3KJGg1dF6.net]
>>856
初期化無しの宣言とか?

871 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:01:48.14 ID:l11teSHI0.net]
>>856
× int ary[];
○ int ary[] = {1,2,3};

872 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 02:37:55.69 ID:xu+p9cdr0.net]
>>850
どうも思わない。

ま、 register はコンパイラが無視するんだろうな。

873 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 07:38:47.06 ID:KIdTQfIK0.net]
>>850 すごく… 古くさいです…

それはともかく register 宣言した変数は
アドレス取ろうとした時点でコンパイルエラーじゃなかったかな?
あと俺の環境では auto と register の同時指定がダメと言われる。

古いコンパイラだとどっちも許されるんだっけ。



874 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:06:44.87 ID:Q5TWqxQz0.net]
実装は知らんが、言語仕様だと昔からstorage classの指定は1つだけ

875 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:49:05.01 ID:TZDyO3Kt0.net]
registerは可能ならばレジスタに割り当てると言う意味なので、アドレス演算子を使えばレジスタに割り当てられない
利用可能なレジスタ数を超えてregisterが使われうる可能性を考えれば明らか
autoとも併用できないし、半可通としか言いようがない

876 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:07:38.36 ID:1UmE9CdHM.net]
>>862
それC++限定じゃね?

877 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:44:36.79 ID:TZDyO3Kt0.net]
>>863
言いがかりをつけたいなら「規格書のxxにこう書いてある」と調べてからつけろ

878 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:55:57.60 ID:fkuXV6f/0.net]
C++のautoは別の話

879 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:41:15.21 ID:1UmE9CdHM.net]
>>862
の前半、register変数のアドレスを取ろうとすると
gccもclangもエラーになるけど、これは規格違反と?

880 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:46:45.41 ID:KlHNvq3I0.net]
仕事で5年くらいMATLABやってたけど来月からC言語やらなあかん
難しそうで、もうイヤイヤ期よ

C なんて10年くらい前に大学の講義でチョロチョロってやっただけ

応援メッセージ待ってます!
(´;ω;`)

881 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:51:19.46 ID:sVexF7NP0.net]
がんぱれ

882 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:33:55.75 ID:fkuXV6f/0.net]
>>866
Visual Studioでもエラーになる
まあ当然だわな

883 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:38:57.68 ID:Q5TWqxQz0.net]
>>864
規格書の
6.5.3.2 Address and indirection operators

The operand of the unary & operator shall be either a function designator, the result of a [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier.
こう書いてある



884 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:53:08.06 ID:Q5TWqxQz0.net]
K&Rの1stでも
the address-of operator & cannot be applied to them.
って書いてあるよ

885 名前:デフォルトの名無しさん [2017/10/21(土) 12:04:46.13 ID:VJktQUPlp.net]
俺にはレジスタ変数に割り当てた変数を関数のアドレス渡し引数にする意図が想像できない。
そんなにオーバーヘッド気になるなら、グローバル変数でレジスタ変数宣言してしまえって思う。

886 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:12:52.67 ID:Q5TWqxQz0.net]
>>872
外部宣言にregisterは使えないぞ

887 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:18:48.95 ID:Hb3Ud/Wn0.net]
オーバーヘッド気にしてたらコンテキストスイッチングとかどうすんだ?

888 名前:デフォルトの名無しさん [2017/10/21(土) 12:43:51.25 ID:VJktQUPlp.net]
じゃあそんなクリティカルな問題無い様に、関数化する事自体を諦めた方がいいのでは?

889 名前:デフォルトの名無しさん [2017/10/21(土) 12:46:37.26 ID:VJktQUPlp.net]
ヘッダーファイルにインライン宣言した関数を記述してしまうって解決方法もあるよな?

890 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:55:25.34 ID:fkuXV6f/0.net]
>>873
さすがにネタだろ

891 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 18:44:07.64 ID:KlHNvq3I0.net]
>>868
ありがとう

このスレに書いている単語が全然分からんw
何を話してるのかも分からんw
みんな凄すぎやわ…

892 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 20:20:57.18 ID:fkuXV6f/0.net]
>>878
register関係は爺の昔話だから無視していい

893 名前:デフォルトの名無しさん [2017/10/21(土) 20:38:07.37 ID:LO7dvffl0.net]
グローバル変数をregister指定できたり楽しかったなあ



894 名前:デフォルトの名無しさん [2017/10/21(土) 20:48:45.74 ID:S+Fuo4jD0.net]
いや、指定しても実際効果あるか無いかってだけだからなぁ

895 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 21:14:54.66 ID:sahtjmhqM.net]
>>878
ネットのプログラミング自習動画見てみたら?

896 名前:デフォルトの名無しさん [2017/10/21(土) 23:00:30.68 ID:qfiVibk/0.net]
10年前にC言語覚えたなC#もないopenGL作る時も基礎が出来てない白紙から打ち込んでたから凄い大変だったのを思い出したわ

897 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 05:28:16.50 ID:m20yJ7cw0.net]
register宣言とアドレス演算子の話だけど、
Cではエラー、C++だとアドレスを取れる(register指定は無視される)、みたいね。
望洋さんのファックとWikipediaのC++に出てたわ。

…実は逆に覚えててね。
レジスタに割り当てた変数の変数のアドレスが欲しいってのは矛盾してるから、
C++は厳格にチェックするかと。

898 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 07:11:33.28 ID:dj2Vz85u0.net]
>>884
俺もそう思う
registerはprvalueであるべき

899 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 11:32:38.17 ID:r2h/pPG10.net]
レジスタってメモリ番地をもってるのか?
持ってない番外地なんじゃねえの?

900 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 11:38:07.26 ID:rLWliBun0.net]
>>886
そうだよ。そこは誰も疑問に思ってない。

901 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 12:31:48.51 ID:NaoIEEjs0.net]
世の中には、レジスタがメモリーの先頭と同じ位置にマッピングされてるCPUだってあるけどな。

902 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 13:39:13.59 ID:f5TzHp7R0.net]
質問です。ポインタ変数を用いてキーボードから入力された5つの整数を配列xに保存し、その要素の列挙と合計値を求めるプログラムを作ったのですが、
#include <stdio.h>
#include <stdlib.h>

int main (void){
int *p,x[4],sum=0,i,j;
p=&x[0];
for(i=0;i<=4;i++){
printf("%dつ目の整数を入力してください ",i+1);
scanf("%d",p);
sum=sum+*p; }
for(j=0;j<=4;j++){
printf("%d ",*(p+j));} /*配列の要素を列挙*/
printf("\n和=%d",sum); /*配列の要素の和*/
return 0;}
で、結果が
1つ目の整数を入力してください 1
2つ目の整数を入力してください 2
3つ目の整数を入力してください 3
4つ目の整数を入力してください 4
5つ目の整数を入力してください 5
5 4200864 6422368 4200955 6422288
和=15
となり、要素の列挙がうまくいかないので対策を教えていただきたいです。

903 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 13:49:53.88 ID:rI45lLhS0.net]
そりゃ最初に p に代入した同じ入れ物に入力値を保存してるからね。
++p とかしてみたら?



904 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 13:55:57.90 ID:pqhboyRRp.net]
素直に配列使え。

905 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 14:15:34.40 ID:m20yJ7cw0.net]
scanf() での値の格納先 (== sumに加える値の参照先) である p を
初期化時の &x[0] のまま進めてないから入力した値が上書きされるんだよ。
もちろん x[1], x[2], ... には値が入らない。


質問の趣旨と関係ない部分を指摘して混乱させるつもりはないんだけど、
配列 x[] の要素数が足りないのがオジさん気になるなぁ。

906 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:12:18.96 ID:2+N8xzsVa.net]
>>889
既に>>890-892が指摘済みだけど

#include <stdio.h>
#include <stdlib.h>

int main (void){
int *p,x[5],sum=0,i,j; /* x[5] */
p = x;
for(i = 0;i <= 4; i++, p++){
printf("%dつ目の整数を入力してください ",i+1);
scanf("%d", p);
sum += *p;
}
p = x; /* ポインタの参照位置を配列先頭へ */
for(j = 0; j <= 4; j++){
printf("x[%d]=%d, ", j, *(p+j) );
}/*配列の要素を列挙*/
printf("\n和=%d\n ",sum); /*配列の要素の和*/
return 0;
}

907 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:20:05.53 ID:f5TzHp7R0.net]
大学で勉強し始めたばかりなので全然で…
みなさんありがとうございました。

908 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 15:27:37.67 ID:NaoIEEjs0.net]
まあ、なんでポインタに拘るのかわからんが、
つうか、書きと読みでアクセス方法は合わせた方がいいと思うが、
動きゃいいかw

909 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:34:28.08 ID:rLWliBun0.net]
学習をし始めた頃は敢えてポインタを使っていろんな書き方を試してみるのもいいと思う。
数をこなすうちに自然とよい書き方に気づくと思う。

910 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 16:41:26.75 ID:iiKpFSsu0.net]
起動の度に外部ファイルで変数の初期値を変えて起動したいんだけどどうすんの?

911 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 16:53:41.42 ID:utzmEkdP0.net]
外部ファイルを読んで変数に代入する

912 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 17:06:30.45 ID:iiKpFSsu0.net]
外部ファイルに変数名と初期値を書いておきたい

913 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 17:11:49.57 ID:Qdw/5tAf0.net]
環境依存だし基本的に無理
バッチなりシェルスクリプトに記述しといてコマンドライン引数で渡す方が建設的



914 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:05:00.75 ID:m20yJ7cw0.net]
ソースに書いてない変数を実行時に導入したいってのとは違うんでないか?
あらかじめ外部ファイルで値を設定できる変数は決まっていて、
要するにリソースファイルみたいな使い方をしたいのかも知れん。

fscanf(fp, "%s=%d\n", varname, &varval);
if (strcmp(varname, "width") == 0) {
 width = varval;
} else if (strcmp(varname, "height") == 0) {
 height = varval;
} else {
 fprintf(stderr, "cannot use variable '%s'\n", varname);
}

みたいな感じ?
この場で書いてるから洗練されてないし、動くか怪しいけど。

915 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 18:08:18.57 ID:NaoIEEjs0.net]
人が読み書きしない前提なら、構造体の領域をまるまんま読み書きしてしまえば楽だぜ。

916 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:09:51.31 ID:4HKeVMJe0.net]
動作時に殆ど変えない値ならファイルで良いかもしれないが
起動の都度値を変化させたいなら、コマンドラインの方が良いぞ

917 名前:901 mailto:sage [2017/10/22(日) 18:29:59.97 ID:m20yJ7cw0.net]
>>901 で使った「リソースファイル」って言葉は曖昧だったね。
「設定ファイル」の方が通りがよかったかも。

皆さん文脈から分かってくれると思うけど、
VisualStudio なんかで別の意味で使う言葉だし。

918 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:44:14.78 ID:IdeA6XVs0.net]
「鶏を割くに焉んぞ牛刀を用いん」とも言えるけど
json,yaml,toml

919 名前:なんかの読み込みライブラリ使うとか
Lua,Pythonを組み込むとかも一応回答としてはありかもね
[]
[ここ壊れてます]

920 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 20:27:33.99 ID:Cn2ZDyn4d.net]
>>888
つーか全部レジスタの方面の話じゃね?
大分前の話だが、DSPでそういうのがあった

921 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 20:32:16.01 ID:EROQgIiX0.net]
>>906
ファミコンとかで使われていた6502のゼロページレジスタ
がそうだよ
MELPS7700とか名前を変えて長いこと使われた

922 名前:デフォルトの名無しさん [2017/10/22(日) 21:19:51.70 ID:bXoG3HvV0.net]
メインフレームでDIAGNOSEを使うときなんか
WCSのアドレスを指定とかね

923 名前:デフォルトの名無しさん [2017/10/23(月) 01:07:16.21 ID:mBA7Qm4F0.net]
スタック変数いらねえな
グローバル変数で性能追求しようぜ



924 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 01:22:42.10 ID:gdiUlDLR0.net]
6502のゼロページが全部レジスタだと思い込んでるような記述がたまにあるけど
普通にメモリだよ

925 名前:デフォルトの名無しさん [2017/10/23(月) 01:37:37.69 ID:mBA7Qm4F0.net]
オペランドを8bitに限定してコード効率上げるってのがゼロページの発想でしょ
メモリ素子が高価な時代の涙ぐましい仕組みのひとつ

926 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 01:46:50.56 ID:EhEnOqp90.net]
CPUの一時キャッシュメモリをレジスタ変数に割り当てる方が速いんじゃないか?

927 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 05:14:49.57 ID:u4PJ0rqa0.net]
>>911 アドレス値のフェッチが1byteだけで済むから
16bit(2byte)の絶対アドレスより速い、てメリットもあるしね。

>>912 これはアリかも。
CPUにデカいキャッシュが載る時代のゼロページ的な使い方だな。

928 名前:デフォルトの名無しさん [2017/10/23(月) 05:45:57.83 ID:iFI38Dlw0.net]
%%%%1000%%%%

000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221%
001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7%
002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA,
003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end

929 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 17:06:19.86 ID:WoZMAj8B0.net]
ルネサスRXなんかもレジスタがメモリマップされてるな
アクセス禁止領域だけど

930 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 19:08:39.57 ID:Ob3tZ8JSM.net]
SFRと汎用レジスタの区別が出来ない奴

931 名前:デフォルトの名無しさん [2017/10/23(月) 19:25:26.97 ID:nagTo3YF0.net]
>>915
そこって、デバッガがCPUレジスタ参照する為の窓だから、プログラムがその領域指すと、デバッグが困難になるから禁止してるんじゃね?

932 名前:デフォルトの名無しさん [2017/10/23(月) 19:29:22.87 ID:nagTo3YF0.net]
デバッガー専用の作業メモリー領域もプログラムから使用禁止だったりするだろ?

933 名前:デフォルトの名無しさん [2017/10/23(月) 19:30:14.37 ID:HemzWECS0.net]
レクサスRXに見えた



934 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 20:21:25.70 ID:WoZMAj8B0.net]
>>917
その通りだと思うよ

935 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 20:22:52.11 ID:WoZMAj8B0.net]
>>916
sfrをアクセス禁止領域に置いてどーすんだよw

936 名前:デフォルトの名無しさん [2017/10/23(月) 20:30:23.77 ID:nagTo3YF0.net]
>>921
アクセス禁止じゃねーよw
使用禁止だ。
デバッガー使わないなら好きに使えばいい。

937 名前:デフォルトの名無しさん [2017/10/23(月) 20:37:44.96 ID:nagTo3YF0.net]
あ、レス間違えたわw

938 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 03:02:06.36 ID:75BFZUbG0.net]
int i=1,n
n=i/2*2

n=0になる理由教えてください

939 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 03:50:48.19 ID:senjN+vb0.net]
int型は小数が扱えないので0方向に丸められる

940 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 05:57:30.66 ID:2rmlfNW20.net]
>>924 https://ideone.com/HQ4Zos

941 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 06:48:50.75 ID:kt50Dt6N0.net]
負の除算の丸め方は処理系依存

942 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 07:33:37.46 ID:VjHIGh6G0.net]
左結合で i/2 の後に *2 が処理される

整数どおしの除算なので丸めが発生
丸めた値に 乗算が行われる

943 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 07:45:07.35 ID:75BFZUbG0.net]
おおおお!
なるほど!ありがとうございます!



944 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:07:36.73 ID:SPAXueit0.net]
int func(int) は、引数が int 型で、int 型の値を返す関数
int func(void) は、引数が無しで、int 型の値を返す関数

というのは分かったのですが

int func() のように () の中が空の場合は、どうゆう意味になりますか?
int func(void) と同じ?

945 名前:デフォルトの名無しさん [2017/10/24(火) 12:12:42.21 ID:b8RDVE7X6.net]
https://i.imgur.com/DWw6T08.png

946 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:24:20.33 ID:SPAXueit0.net]
わかりました、ありがとうございます

947 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:51:09.78 ID:k+hUXLmG0.net]
>>931
包茎手術じゃなくて脱毛で良かったな

948 名前:デフォルトの名無しさん [2017/10/24(火) 13:44:26.08 ID:/a/Ldfbw0.net]
DMAでも使うならともかく
レジスタをメモリ空間にマッピングする利点なんてないだろ

949 名前:デフォルトの名無しさん mailto:釣宣言 [2017/10/24(火) 13:58:10.44 ID:48RRVnNoM.net]
PCI以降DMAでデータ転送なんてのは無い。
あるのはバースト転送モードだ。

当然、転送に必要なレジスタはメモリにマッピングされている。

950 名前:デフォルトの名無しさん [2017/10/24(火) 14:14:56.50 ID:gWGoT/ywp.net]
>>934
むしろデメリットさえあるな。だからデバッガが使う以外は利用されてないだろ?

951 名前:デフォルトの名無しさん [2017/10/24(火) 14:24:36.56 ID:fybDUnFS0.net]
ふふ、トヨ〇の要求。今は知らん。

952 名前:デフォルトの名無しさん [2017/10/24(火) 16:20:50.45 ID:b8RDVE7X6.net]
まだやってたのかよレジスタ

953 名前:デフォルトの名無しさん [2017/10/24(火) 18:07:58.27 ID:gWGoT/ywp.net]
内部レジスタと外部レジスタは意味がまるっきり違うんだがなぁ



954 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 18:48:56.59 ID:ffssQfLj0.net]
>>939
二重帳簿やっているように聞こえる

955 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 01:31:11.21 ID:a9TiLHl10.net]
>>930
同じなんだけどコンパイル時の引数チェックをしなくなる。
int func(void) の関数に対して func(123) みたいにして呼ぶとコンパイルエラーだが
int func() の関数に対して func(123) で呼び出す記述があってもエラーにならない。

なんでこうなっているのかというと、昔のCにはvoidがなくて引数なしの関数は
int func() のように書くしか方法がなく、尚且つ昔のC言語は引数のチェックを
していなかったため。つまり過去のC言語ソースをコンパイルできるようにする
ためにこのような記述が残されている。今となっては余程の事がない限りこんな
書き方はしない方が良い。バグの元だ。

956 名前:デフォルトの名無しさん [2017/10/25(水) 15:47:29.67 ID:Ls3qnFv30.net]
ヤフー知恵袋って色んな奴がC言語勉強してるやつがいるな、素人みたいな質問やら専門的な質問や大学の問題の質問やらのプログラミング質問が

957 名前:デフォルトの名無しさん [2017/10/25(水) 17:13:54.92 ID:3egWGIK90.net]
>>941

へーへー

958 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:14:39.48 ID:2J1yyAIT0.net]
https://ideone.com/0GCZnF
がエラーになるのですが、
どうすればいいでしょうか?

959 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:15:57.84 ID:16XMr+7o0.net]
DDOS攻撃してサイト毎潰す

960 名前:デフォルトの名無しさん [2017/10/25(水) 18:20:37.33 ID:Ls3qnFv30.net]
>>944
まず何のプログラミングか言わなきゃダメでしょうみんなプロだから挙動で読めちゃう人いるけどさ

961 名前:デフォルトの名無しさん [2017/10/25(水) 18:28:36.51 ID:Ho4Id2OA0.net]
>>944
printfでNULL->valueをしてるから

962 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:35:07.38 ID:2J1yyAIT0.net]
>>946
>>947
hoge()でdata->valueに値をセットしたいです。
10を表示したいです。

963 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:06:17.58 ID:N2zX2Cru0.net]
void hoge(data_t **data, int value) {
 *data = NULL;
 *data = malloc(sizeof(data_t));
 if (data == NULL) return;
 (*data)->value = value;
}

呼び出しを
 hoge(&data,10);

これではどうか



964 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:07:10.40 ID:N2zX2Cru0.net]
if (*data == NULL) return;

ここ間違えた、訂正

965 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:12:01.89 ID:2J1yyAIT0.net]
>>949
ありがとうございます。
できました!超天才!

966 名前:デフォルトの名無しさん [2017/10/25(水) 19:16:50.46 ID:Ho4Id2OA0.net]
そういうことか
全然分からんかった
引数に受け渡されたポインタ変数のコピーに新しく確保したメモリのアドレス入れても呼び出し元のポインタ変数はなんも変化しないのか

967 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:21:03.77 ID:BohOgQqE0.net]
引数で int の変数を書き換えても 呼び出し元には伝わらない それの延長線
int を data_t* に読み替えれば同じ理屈よ

968 名前:デフォルトの名無しさん [2017/10/25(水) 20:39:40.86 ID:Ls3qnFv30.net]
俺の頭じゃあ理解できなかったわアロー関数は苦手だ、ここには天才がやっぱいるわ

969 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 22:59:11.01 ID:SHE9E59e0.net]
この程度でプロとか天才とかw レベル低っ

970 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 23:31:22.55 ID:A9sEwxck0.net]
追い詰められてる時って、ちょっとしたことを見落としたりしがちだし。
そういうときにちょっとしたつまらない問題点を指摘してくれる人が神様に思えることはある。
本当に何でこれに気づかない?って問題に延々と気づかないことあるから。

971 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 01:05:20.57 ID:WmOJzpQL0.net]
実務の世界だと、開発リーダーにとっては、この程度はさらさらと書いて欲しいと思うだろうな
この辺の考え方が理解できてないと、構造体を使ったリスト構造、木構造が作れないと思う

972 名前:デフォルトの名無しさん [2017/10/26(木) 01:22:11.08 ID:FPgm8C1h0.net]
急に語り出したぞ、おい

973 名前:デフォルトの名無しさん [2017/10/26(木) 03:22:11.49 ID:kwyo2eDl0.net]
リスト構造、木構造という言葉がわからなかったのかな?



974 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 03:35:02.17 ID:ByFyiJTd0.net]
分からなくてもググれば速攻定義出ますがな

975 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 06:24:41.35 ID:8UQnYlEC0.net]
>>944 からの流れだとすると、実務で使う人とは感じなかったな。
専門外の学生さんが単位を取るために四苦ハック、
進級できたら思い出しもしない、という立場からの質問だろうと。

976 名前:デフォルトの名無しさん [2017/10/26(木) 10:26:24.17 ID:Z8IKw2VS6.net]
リスト構造木構造とか理系大学の情報系科目で誰でもやるがな
こんなところ見てる奴が知らんわけないだらアホ

977 名前:デフォルトの名無しさん [2017/10/26(木) 10:46:18.77 ID:DmfMCHFwp.net]
リストもツリーも基本の構造は一緒だろ。
ただ、鎖ね繋がってる数が違うから、
扱いが違うだけでな。

978 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:26:11.84 ID:nuX2FTeTa.net]
文系経済学部ですわ

979 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:46:06.22 ID:oyaJ8gC3M.net]
>>962
> こんなところ見てる奴が知らんわけないだらアホ
>>952みたいな奴もいるのに何を言ってるんだよ w

980 名前:デフォルトの名無しさん [2017/10/26(木) 12:51:34.13 ID:jbwuNtau6.net]
>>965
リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ

981 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 13:41:10.56 ID:VaLFaSbf0.net]
怪しくなったら戻り値で返せ

982 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 14:50:55.37 ID:ujDNQjK/M.net]
そういうときに限って二つ返したくなる

983 名前:デフォルトの名無しさん [2017/10/26(木) 18:29:14.01 ID:l+WAoJAx ]
[ここ壊れてます]



984 名前:0.net mailto: 自分の知ってる関数解ってる宣言の仕方ならわかるけどさ解らない奴使ってたらもう変数が動いてるかわからんだろう
そうなったらもう謎でコードなんか読めないだろ?
[]
[ここ壊れてます]

985 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:40:00.02 ID:6866r+hk0.net]
んなこたぁ、ない

986 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:44:09.81 ID:AI1MxGuX0.net]
引数の書き戻し系は 渡すときに値を必要としてるのかどうかは仕様次第なので 少し気を使う

987 名前:デフォルトの名無しさん [2017/10/26(木) 20:03:01.42 ID:DmfMCHFwp.net]
それより、そのアドレスはアクセス権のある場所を指してるんだよな?

988 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:41:04.91 ID:oyaJ8gC3M.net]
>>966
レベルの問題
> リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ
そんな奴がいないとは言わないがそう言う奴はごろごろいるとは思えないだろ

989 名前:デフォルトの名無しさん [2017/10/26(木) 21:42:34.03 ID:Fjma9sq90.net]
とりまリスト構造なんて誰でもしってること
>>959のレスはイミフ

990 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 03:11:40.50 ID:QY+Fa/Ak0.net]
>>966
これはトリック、か?

991 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 06:49:46.56 ID:VPed4ksO0.net]
「関数の引数に値渡ししかないから、
ポインタを渡すことで呼出側の変数の内容を関数側で変更する」
というのが他の言語と比較した場合、C特有のトリックと呼べるかも。

もちろん、Cの村では当然かつ基本のことだけど。

992 名前:デフォルトの名無しさん [2017/10/27(金) 08:36:39.71 ID:JYNAFOfl0.net]
たくさん値を返したいなら、
戻り値を型宣言した構造体にしたらいい。

993 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 09:39:08.11 ID:a5gmSSmH0.net]
残念だったな、トリックだよ



994 名前:デフォルトの名無しさん [2017/10/27(金) 09:42:57.69 ID:Q7q08ysx0.net]
>>977
autoでもできるのですか?

995 名前:デフォルトの名無しさん [2017/10/27(金) 09:57:16.24 ID:CUGbjFhkp.net]
ああ、昔はauto変数に取った構造体を戻り値にして割り込み系で散々な目に遭ったよな。
あれは言語仕様に沿って無いコンパイラが悪いんだがな。

996 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:00:31.70 ID:v/FEPkkV0.net]
古いコンパイラではNGだったけど
構造体の引数での値渡し、戻り値での値戻しは可能

997 名前:デフォルトの名無しさん [2017/10/27(金) 10:18:09.15 ID:CUGbjFhkp.net]
古くなくてもニッチな環境では要注意だ。
コンパイラの吐き出すコードが言語仕様に沿って無い場合がある。

998 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:27:32.22 ID:8fSPZcAJ0.net]
>>976
トリックと言うか他の言語ではコンパイラがやってることをアセンブラやCでは明示的に書くと言うだけ

999 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 13:06:16.96 ID:v/FEPkkV0.net]
>>982
なんてこったw
ニッチな環境だとメンテもされてないことあるだろうしねー

1000 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 15:36:47.12 ID:dGyUnw2Y0.net]
ホワイトスミスなんて、printfすら無いような処理系作って
いた人がANSIの役員していて2度びっくり

1001 名前:デフォルトの名無しさん [2017/10/27(金) 18:41:59.37 ID:BvMxy0d+0.net]
C言語のポインタで
int *a;
int b;
a = 10;
これは理解できるんだけど
a = &b;
*a = 10;
これはどうなってるん?aにアドレス入ってるのにどうやって10を送ってるん?

1002 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 18:47:48.96 ID:/LUCvRWS0.net]
> int *a;
> a = 10;
> これは理解できるんだけど
説明できるのなら その先も分かるはず

1003 名前:片山博文MZ mailto:sage [2017/10/27(金) 18:49:13.82 ID:xRxq9X9wd.net]
>>986
> int *a;
> int b;
> a = 10; //エラー。ポインタに整数は代入できない。そもそも全角文字と半角文字を間違っている。
> a = &b;
> *a = 10;
アスタリスク(*)で実体の整数データを手繰り寄せているイメージね。



1004 名前:デフォルトの名無しさん [2017/10/27(金) 18:55:00.02 ID:BvMxy0d+0.net]
>>988
*aで中にあるアドレスで探って送ってるイメージ?

1005 名前:片山博文MZ mailto:sage [2017/10/27(金) 18:57:22.58 ID:xRxq9X9wd.net]
うん。アスタリスクを付ければ、アドレス先への代入になる。

ポインタにゼロ以外の整数は代入できないに訂正。

1006 名前:デフォルトの名無しさん [2017/10/27(金) 19:14:00.54 ID:CUGbjFhkp.net]
宣言とフィールドで意味の違う*が悪い。

1007 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:16:29.79 ID:t/XrhBpFM.net]
アーキテクチャとアセンブリ言語勉強するのが早道な気がする

1008 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:19:35.75 ID:t/XrhBpFM.net]
>>991
意味は同じだよ。*aがintだと宣言してるから整合してる。
初期化構文がちょいと怪しいが。

1009 名前:デフォルトの名無しさん [2017/10/27(金) 19:21:42.60 ID:CUGbjFhkp.net]
>>993
宣言ではポインタである事を表すが、
フィールドでは、掛け算記号だったり、ポインタの内容だったりするだろ?

1010 名前:デフォルトの名無しさん [2017/10/27(金) 19:56:47.39 ID:BvMxy0d+0.net]
char *c;
int *a;
この二つはポインタだけど使い方が違うのか?

1011 名前:片山博文MZ mailto:sage [2017/10/27(金) 20:00:41.33 ID:xRxq9X9wd.net]
sizeof(*c) == sizeof(char)で、
sizeof(*a) == sizeof(int)だ。

1012 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:11:43.60 ID:HlvRN0vUF.net]
Cの文法特にポインタ宣言周辺は、
頭が悪いと読めないよう定められてる。

ソフトウェア開発は馬鹿でも手伝わせる
必要があるくらい人手不足なのに、
なんでこんな文法にしたのか不思議。

1013 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:21:32.42 ID:3Ly7XcHr0.net]
えっ、Cの由来を知らないの?



1014 名前:片山博文MZ mailto:sage [2017/10/27(金) 20:26:24.89 ID:xRxq9X9wd.net]
次スレお願い

1015 名前:あぼーん mailto:あぼーん [2017/10/27(金) 21:22:14.66 ID:zFbk1AXy0.net]
あぼーん

1016 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 78日 1時間 0分 51秒

1017 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<253KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef