C言語なら俺に聞け 143

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ b375-rVGZ)2017/10/27(金) 21:28:08.20ID:pAogLeJi0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

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

前スレ
C言語なら俺に聞け 142
http://mevius.2ch.net/test/read.cgi/tech/1502364083/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

おっつ おっつ

3デフォルトの名無しさん (ブーイモ MMeb-gj0X)2017/10/27(金) 23:12:15.85ID:67YjQzLBM
>>1

「新スレッドは○番に書き込んだ人が立てる」みたいなガイドラインを
テンプレートに盛り込んだ方が安心じゃないかな。

前スレッドの終了まで新スレッド(ここ)が立たなかったし、
999番で「誰か立ててくれ」と書き込まれたのに応じて
「立てたよ、リンク先は…」と誘導に使われるべき1000番が
無意味な「あぼーん」で潰されたし。

5デフォルトの名無しさん (ワッチョイ d18a-bYcA)2017/10/28(土) 09:22:16.51ID:6bG+Py6x0
あぁあああもうポインタ全然分かんねえよおおお

6デフォルトの名無しさん (ワッチョイ 6b15-OCcV)2017/10/28(土) 10:32:21.81ID:QoaQu2To0
前スレへのリンクがあって、スレタイにも番号がついてるわけで
1000いったら次スレなんて言われんでもわかるし望む者がいるから立っている
それだけのことで、別に何かする必要はないと思うな

7デフォルトの名無しさん (ワッチョイ 719f-WLyz)2017/10/28(土) 13:13:54.08ID:cK0+9veY0
>>5
文字通り何かを指し示すものだよ。

8デフォルトの名無しさん (ワッチョイ 21d2-Eec1)2017/10/28(土) 13:25:50.21ID:NBGUhvqo0
data8<7-0> にdata32<31-00>の中のdata32<07-00>を抜き出して代入したい

data8 = data32 % 256 ;

と書いてもコンパイラが素直に推論してくれません
キャリー処理のコードっぽいものをつけてきやがります
どうしたらいいでしょうか?

あまりにも挫折者が多すぎる
教え方が悪いとか例題が少ないとかじゃねえのかと

変数とか言うふわふわしたモンがいきなり具体的なものになるから分かりにくいんじゃないのかね
メモリとかアドレスとかいきなし言われても分んねーよ、とかなるし
しまいにはアドレスの値だって気にかけなくなる

いきなり「変数は値と場所、二つの数字をもちます」とか言われると混乱するんだよ

10デフォルトの名無しさん (ワッチョイ 719f-WLyz)2017/10/28(土) 13:51:05.54ID:cK0+9veY0
>>8
君の言いたいことがよくわからない。とりあえず全部日本語に翻訳してくれ。

11デフォルトの名無しさん (ワッチョイ d171-6HSk)2017/10/28(土) 14:04:12.56ID:4nXMq3qA0
先にメモリとアドレスから入ればいいのさ

12デフォルトの名無しさん (ワッチョイ d1eb-RMpS)2017/10/28(土) 14:07:01.68ID:tCIUZaJu0
ビットが取れればいいだけなら、data8 や data32 の型を符号無しにするだけで
いけそうな気もするが、よく分からん

13デフォルトの名無しさん (ワッチョイ 21d2-Eec1)2017/10/28(土) 14:11:40.74ID:NBGUhvqo0
両変数ともunsigned宣言はしています

14デフォルトの名無しさん (ワッチョイ 137f-wCMw)2017/10/28(土) 14:16:17.83ID:MGjkWSIK0
>>13
こーゆー事?
data8 = data32 & 0x000000ff;
適宜 cast してね

15デフォルトの名無しさん (ワッチョイ d1b3-ZNPd)2017/10/28(土) 14:18:02.62ID:fKJ32+jb0
printf で
data8 の実際の型にあった表示フォーマット使ってなかったとかのオチ?
(data8 の最上位ビットが足ってるとかサ-

16デフォルトの名無しさん (ワッチョイ 1be7-DNJs)2017/10/28(土) 16:17:52.03ID:DjUYz3cS0
int *a = 0;
*a = 1;
これは入るけど1は入るん?0の番地って存在するん?

17デフォルトの名無しさん (ワッチョイ 7181-/MqV)2017/10/28(土) 16:21:22.21ID:U1K93bKt0
>>16
ワープに成功しましたってメッセージが出る

18デフォルトの名無しさん (ワッチョイ 698a-dSdw)2017/10/28(土) 16:29:25.72ID:MyIroYJQ0
>>16
0番地の住人に怒られる

19デフォルトの名無しさん (ワッチョイ 69f7-sKFa)2017/10/28(土) 16:50:59.06ID:IMJtHdwY0
ぬるぽ

20デフォルトの名無しさん (ワッチョイ 9193-cGPg)2017/10/28(土) 17:33:04.44ID:VIxhg0oq0
>>8
「リテラルの数値256での剰余だから結果の範囲は0-255、
unsigned char の範囲からはみ出す可能性はない」
ということまでコンパイラが見抜いてくれないってことだよね。

data8 = (unsigined char) data32;

てな具合に明示的なキャストで上手くいかんかな。
あるいはコンパイラの最適化オプションを強めにするか。

21デフォルトの名無しさん (ワッチョイ 21d2-Eec1)2017/10/28(土) 17:42:28.64ID:NBGUhvqo0
ちょっと勘違いしてました
>>8の質問はとりさげます
ちなみに%256の推論はしているみたいです

22デフォルトの名無しさん (ワッチョイ 137c-Jgbf)2017/10/28(土) 18:42:28.70ID:STqPADGQ0
リファクタリングして短いコード吐くかなと思ったら
がんがんループ展開されて元より長いコードを出すこともあるよね

23デフォルトの名無しさん (ワッチョイ 6b15-OCcV)2017/10/28(土) 18:54:14.85ID:QoaQu2To0
希望的観測でタカをくくって結果を見もしないやつが一番悪い

24デフォルトの名無しさん (JP 0Hc5-xXVv)2017/10/28(土) 20:47:38.03ID:VLfN62TLH
>>16
現代のマルチタスクOSではアドレスをずらしたりして0番地付近は見えなくされる




じゃなかったかな

25デフォルトの名無しさん (ワッチョイ 138a-whYl)2017/10/28(土) 20:49:51.90ID:i6LcJWfh0
物理0と論理0が違うってのなら、仮想記憶なOSなら
普通そうだよ

26デフォルトの名無しさん (ワッチョイ 9ba1-qonp)2017/10/28(土) 20:54:20.70ID:uE8IWkSS0
>>16
ヌルポインタに関しては、なんかややこしい事情があるみたいね。
規格ではいかなるオブジェクトとも一致しない特殊なポインタってことになってるようだけど、
自分が使ってる組込み用のコンパイラではただの 0 になる。しかも0番地から普通の RAM なんで、
値も普通に格納される。
どうなるかは確認するしかないんじゃなかろうか。

27デフォルトの名無しさん (ワッチョイ 9150-FcU6)2017/10/28(土) 21:07:29.96ID:gfV3l07s0
>>20
32bitの範囲の数値を8bitの最大値で割るんだから
最大24bitの数値になるんじゃないの?
data8 = *(unsigined char*) &data32;
リトルエンディアンだと仮定するとこうなると思う

28デフォルトの名無しさん (ワッチョイ 9150-FcU6)2017/10/28(土) 21:24:13.85ID:gfV3l07s0
すみません
剰余を除算と勘違いしていました
無視してください

29デフォルトの名無しさん (ワッチョイ 719f-WLyz)2017/10/28(土) 23:08:15.00ID:cK0+9veY0
>>16
あるけど今時のだいたいのOSではアクセスすると例外発生してプログラムが停止させられると思う。
そうでなくてもCPUによってアドレス0付近が特別扱いされている事が多いのでアクセスできたとしても要注意だったりする。
なのでそういうのが必要な時というのはOSそのものやデバイスドライバを作る時ぐらいしかないと考えて良い。

30デフォルトの名無しさん (ワッチョイ 1be7-DNJs)2017/10/28(土) 23:16:46.23ID:DjUYz3cS0
最近ヤフー知恵袋で初心者なんですけど将来プログラマになりたくてC言語やってみたいんですけどどうですかって
質問が多いがプログラマが時代の流行になってきたか?

31デフォルトの名無しさん (ワッチョイ d18a-bYcA)2017/10/28(土) 23:27:04.65ID:6bG+Py6x0
>>30
とりあえずみんなc言語やるんだな

32デフォルトの名無しさん (ワッチョイ 1be7-DNJs)2017/10/28(土) 23:47:39.21ID:DjUYz3cS0
>>31
おすすめの本やらおすすめの開発アプリやらおすすめのサイトやら学校のカリキュラムの評価やら色んな質問が多いしC言語やるならC#やった方が良いと思うんだけどなstring型ないだけで文字列処理とか大変だし不規則な空白・カンマ区切りとかの処理大変だし
そうゆうのを除外してくれる関数あるから楽なのになC言語はchar型で文字列操作してから処理しないとint型にしたりするのが大変だからな

33デフォルトの名無しさん (ワッチョイ 1312-nu9H)2017/10/29(日) 00:35:52.85ID:CCoHsvZa0
義務教育のカリキュラムなもんで実用性の1側面に問題の作り易さもある
ペーパーテストにはうってつけだろC言語は

34デフォルトの名無しさん (ワッチョイ 9193-cGPg)2017/10/29(日) 06:18:21.91ID:7nxu6Zdr0
教育だと一般性ってのも考えなきゃならないからね。
次々出てくる「Cを改良したネット時代の言語」とかの新しいやつも
10年たったら別の新言語と置き換わってるかも知れないし。
その点、Cなら古くさくても基本として残ってるだろう。

資格試験はまた別だがね。時々変えないと商売にならん。

35デフォルトの名無しさん (JP 0Hc5-xXVv)2017/10/29(日) 10:11:30.74ID:NWVP0NdTH
Cは一人でやるとちょっとしたミスで手も足も出なくなるから論外
右も左も分からない初心者に基本はC言語とか言い出すヤツは老害

36てすと (ワッチョイ 9150-20SA)2017/10/29(日) 10:24:35.50ID:S9avFBtQ0
package test;

class Test
{
  public static void main(String[] args)
  {
    System.out.println("test");
  }
}

37デフォルトの名無しさん (ワッチョイ e1c3-COZ0)2017/10/29(日) 10:27:47.96ID:tz+cuQEW0
組込やOS開発まで視野に入れるとCが一つの王道なのは間違いない
初学者にすすめるべきかと聞かれるとそれはまた別の話

38デフォルトの名無しさん (ワッチョイ ebe8-nu9H)2017/10/29(日) 12:49:29.42ID:DRVQfTKK0
>>35
それはお前が無能てだけだろw Cなんて仕様がコンパクトだから簡単だわ

39デフォルトの名無しさん (ワッチョイ 0beb-nu9H)2017/10/29(日) 13:08:01.23ID:48yStxT20
実際に使うには多くの仕様外な環境依存のことを理解しないといけないから
C言語を勉強してもC言語は使えない

40デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/10/29(日) 13:12:59.45ID:oFRxn/Jf0
しようがないな

41デフォルトの名無しさん (ワッチョイ ebe8-nu9H)2017/10/29(日) 13:24:51.26ID:DRVQfTKK0
アホか。それは言語の話じゃねーだろ

42デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/10/29(日) 13:36:30.43ID:oFRxn/Jf0
環境依存の部分はどんな言語でも影響受けるから結局は覚える事になるんじゃないのかな

43デフォルトの名無しさん (ワッチョイ e1c3-bYcA)2017/10/29(日) 16:45:37.57ID:Qj29lsVR0
まずはcでゲーム作ってみようかな

44デフォルトの名無しさん (ワッチョイ 1be7-DNJs)2017/10/29(日) 17:07:01.40ID:eJZsCyOV0
win32で作ってみる?

45デフォルトの名無しさん (ワッチョイ 7116-rVGZ)2017/10/29(日) 17:13:50.83ID:X7Kr9qJt0
OpenGLの方がいい

46デフォルトの名無しさん (ワッチョイ 7181-/MqV)2017/10/29(日) 17:17:11.04ID:TdUzVMA70
まずコンソールアプリで

47デフォルトの名無しさん (ワッチョイ 1be7-DNJs)2017/10/29(日) 22:58:38.22ID:eJZsCyOV0
その前に開発環境を整えるのが大変だわプログラミングはできるけどそれぞれ出してる開発アプリがあるしその中で開発ツールだっけXNAやらwin32やらで解らんことばっかりや

48デフォルトの名無しさん (ワッチョイ d18a-bYcA)2017/10/29(日) 23:13:28.81ID:cx6N475a0
>>47
ほんそれ

49デフォルトの名無しさん (ワッチョイ e1c3-COZ0)2017/10/29(日) 23:38:03.44ID:tz+cuQEW0
大抵「C言語は何でも出来る」(嘘ではない)
に騙されるパターンだね

50デフォルトの名無しさん (ワッチョイ 138a-whYl)2017/10/29(日) 23:48:24.03ID:XyYI0EpP0
ビットローテイトってどう書くんですかね

51デフォルトの名無しさん (ワッチョイ f1ca-OCcV)2017/10/30(月) 01:28:40.64ID:ObFQilr40
キャリーを含む9bitローテートか
それとも含まない8bitローテートか

52デフォルトの名無しさん (ワッチョイ 138a-whYl)2017/10/30(月) 02:41:46.16ID:z+u7+Cu/0
ボローがある奴で

53デフォルトの名無しさん (ワッチョイ 9193-cGPg)2017/10/30(月) 04:58:13.48ID:oEYvBlvb0
性能優先ならインラインアセンブリでCPUのローテート命令かねぇ。
移植性が大事なら正直にマスクしてシフトしてビットorで重ねる。

8bitや16bitならテーブル使えば両立できるかな。

54デフォルトの名無しさん (ワッチョイ 41b3-YANY)2017/10/30(月) 13:11:03.28ID:Oa6tPdXR0
苦C勉強してるんだけどファイルの辺りって重要?
あんま考えずにやってたんだが

55デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)2017/10/30(月) 13:22:56.64ID:LaVtZ0d2p
ストリームの概念はUNIX譲りの万能概念だから未来永劫絡んで来るぞ。

56デフォルトの名無しさん (アウーイモ MM95-bYcA)2017/10/30(月) 13:37:21.46ID:/ejdYHINM
fopen
fclose

57デフォルトの名無しさん (ワッチョイ 138a-whYl)2017/10/30(月) 14:12:51.37ID:z+u7+Cu/0
fdopen / fileno を理解すれば大体は困らないかと

58デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)2017/10/30(月) 17:55:35.83ID:LaVtZ0d2p
read/writeが無いと意味が無いだろ。

59デフォルトの名無しさん (オッペケ Sr9d-2G8F)2017/10/30(月) 18:00:53.98ID:YGvWSIyjr
初心者です。
4ビット目以降に文字(ASCII3文字)が格納されてる場合、どうやって取ればいいですか?

60デフォルトの名無しさん (ガックシ 068b-rVGZ)2017/10/30(月) 18:06:29.16ID:6LR7RaNa6
char c1=data&0b000000000000000011111111000;
char c2=data%&0b000000001111111100000000000;
char c1=data%&0b111111110000000000000000000;

61デフォルトの名無しさん (ガックシ 068b-rVGZ)2017/10/30(月) 18:07:40.57ID:6LR7RaNa6
char1重複エラー

62デフォルトの名無しさん (ガックシ 068b-rVGZ)2017/10/30(月) 18:09:07.45ID:6LR7RaNa6
演算子オペランドエラー

ファイルとストリームを結びつけるのって、具体的に何がどうなってるんですか?
その辺りがわかるサイトや書籍があれば英語でもいいので教えていただけるとありがたいです

64片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 41b3-KIob)2017/10/30(月) 18:16:13.85ID:ct0tj9Za0
long n = 12345678;
n >>= 4;
putchar(n & 0xFF);
n >>= 4;
putchar(n & 0xFF);
n >>= 4;
putchar(n & 0xFF);

65片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 41b3-KIob)2017/10/30(月) 18:17:57.46ID:ct0tj9Za0
>>63
LinuxなどのオープンソースのOSのカーネル部分を読めばいい。
Windowsのカーネルは、非公開だが、ReactOSで近いものが読める。

66デフォルトの名無しさん (ガックシ 068b-rVGZ)2017/10/30(月) 18:19:48.86ID:6LR7RaNa6
シフト演算子でやろうと思ったら先越されてた

67デフォルトの名無しさん (ワッチョイ 0b23-20SA)2017/10/30(月) 18:21:54.38ID:S5mFuOM00
>>63
これ普通はどうやって勉強すんだろうな 興味あるわ

おれはいきなりデバドラ書かされたんで理解を強制されたけど
あのへんの概念なしで腑に落ちる理解できるもんなん?

68デフォルトの名無しさん (ワッチョイ 497f-20SA)2017/10/30(月) 18:47:24.58ID:6zI0CLS+0
>>65
なんでファイルとストリームの結びつきでLinuxカーネルが出てくるの?

69デフォルトの名無しさん (ワッチョイ 7102-rVGZ)2017/10/30(月) 19:47:29.26ID:4jg/LOEr0
>>68
ストリームを作ってるのがカーネルだからだろ。

70片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 41b3-KIob)2017/10/30(月) 19:50:12.31ID:ct0tj9Za0
>>68
CランタイムならLLVMのlibc++か、GNUのlibstdc++を読めばいい。
カーネル見ずに読めればね。

71デフォルトの名無しさん (ワッチョイ 9193-cGPg)2017/10/30(月) 19:56:28.17ID:oEYvBlvb0
>>60 0b...で2進数のリテラル表現ってできるんだっけ?

>>64 エンディアネスに対する配慮が…。

72デフォルトの名無しさん (ワッチョイ d1b3-ZNPd)2017/10/30(月) 19:59:34.77ID:w02M5Pe50
8進 16進はあるけど 0b... な2進リテラルは余所の言語じゃね?

73片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 41b3-KIob)2017/10/30(月) 20:01:52.91ID:ct0tj9Za0
2進数リテラル(C++14)
https://cpprefjp.github.io/lang/cpp14/binary_literals.html

C++14の機能らしい。D言語やC#にもあったよね。

74片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 41b3-KIob)2017/10/30(月) 20:07:07.38ID:ct0tj9Za0
int bigendian(void)
{
union { int i; char c[sizeof(int)]; } u;
u.i = 1;
return !u.c[0];
}
この関数でエンディアンをチェックすれば? XScreenSaverから拾ったものだけど。

75片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 41b3-KIob)2017/10/30(月) 20:14:13.81ID:ct0tj9Za0
union endian_checker_union
{
int i; char c[sizeof(int)];
} endian_checker = { 1 };

#define IS_BIG_ENDIAN() (!endian_checker.c[0])

76デフォルトの名無しさん (ワッチョイ 497f-20SA)2017/10/30(月) 20:16:20.68ID:6zI0CLS+0
>>70
なんでC言語の話でlibstdc++が出てくるの?

fopenやらのストリームなんて、setvbufの説明読めばバッファリングしてるだけって理解できるだろ
カーネルやらlibcのソースなんて読む必要性なんてねーよ

77デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)2017/10/30(月) 20:33:32.20ID:LaVtZ0d2p
ストリームなんて、なんでもかんでも先頭から順番に処理するってだけの概念だけどな。
ランダムアクセスメモリーも読み飛ばしと巻き戻し駆使してアクセスするのさ。

78デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/10/30(月) 23:47:44.78ID:nQXUW6Dj0
>>49
マシン語には何でもできるねw

79デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/10/31(火) 00:10:44.27ID:TMBeGW2t0
>>75
こんなのどう?

#define IS_BIG_ENDIAN (htons(1) == 1)

80デフォルトの名無しさん (オッペケ Sr9d-2G8F)2017/10/31(火) 02:08:26.69ID:yucmEvc2r
>>64
あざます!

81デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/10/31(火) 03:25:37.26ID:TMBeGW2t0
>>64
そういえばそれ、それでいいの?2回目以降は n >>= 8 では?

82デフォルトの名無しさん (ワッチョイ 1387-jmG0)2017/10/31(火) 08:48:27.57ID:sbQ4uuQC0
>>79
それって、htons()のあるライブラリ間違えたら全く意味が無いマクロだよね?

83デフォルトの名無しさん (ワッチョイ 0b23-20SA)2017/10/31(火) 09:15:02.97ID:om7ZjX940
>>72
接頭辞0bは今どきのgccで普通に使えちゃうんだなこれが

gcc拡張が当然の前提で話が進むと結構困る

85デフォルトの名無しさん (ワッチョイ 0b23-20SA)2017/10/31(火) 11:06:07.87ID:om7ZjX940
なので、質問者も回答者も 「ほんとはダメだけどgccならこうよ」
みたいな但し書きを一筆しとくべきだね

86片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 41b3-KIob)2017/10/31(火) 12:32:05.51ID:dHzwAoXy0
>>81
間違いでした。ぺこり。

87デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/10/31(火) 23:37:41.07ID:TMBeGW2t0
>>82
ライブラリというか、ヘッダだな。#include <arpa/inet.h> とか。

コンパイラにもよるだろうけどだいたいはヘッダの中だけで #define されているか
ビルトインの関数に置き換えられるかインラインアセンブラになるか、適当に
うまいことやってくれると思う。(CPUが Big endian なら #define htons(x) (x) に
なってて何もしないだけになるかも知れない)。

それと一応 POSIX.1‐2008 のようなので使えるコンパイラは多いんじゃないかな。

88デフォルトの名無しさん (ワッチョイ 1be7-DNJs)2017/11/01(水) 02:46:02.61ID:TUg4iVeD0
今ってC言語でwin32とかで作るアプリに基本構造とかなしで作る感じなの?

89デフォルトの名無しさん (ワッチョイ ebe8-nu9H)2017/11/01(水) 07:20:25.79ID:oQpzogGj0
日本語でOK

90デフォルトの名無しさん (ワッチョイ 1387-jmG0)2017/11/01(水) 09:27:14.69ID:AnlYMxNy0
イベントを拾って条件分岐みたいな部分は全部関数内に隠蔽された。
今は決まった名前のコールバック関数を埋めるだけのお仕事。

91デフォルトの名無しさん (ワッチョイ 41b3-YANY)2017/11/01(水) 13:43:28.66ID:Sb/s6/mM0
malloc
realloc
わからん
使うん?

92デフォルトの名無しさん (ワッチョイ 138a-whYl)2017/11/01(水) 14:04:15.81ID:G3xjFDeG0
ケースバイケース

93デフォルトの名無しさん (ワッチョイ 7181-/MqV)2017/11/01(水) 14:12:00.47ID:0yoHAkyy0
実行時に必要なメモリーサイズが決まるようなプログラムだと必要。
最初から大きなメモリーを確保しても無駄になるかもしれないし、
当初想定したサイズでは足りなくなるかもしれない。
そういうときに使う。

94デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)2017/11/01(水) 14:12:15.55ID:Dwgab4vip
組み込みでは1度大きく確保したら後は自前で中身やり繰りするから、あんまり使わない。

95デフォルトの名無しさん (ワッチョイ 41b3-YANY)2017/11/01(水) 15:19:44.00ID:Sb/s6/mM0
VS2017でやってるんだがファイル分割ってどうやるんだ

96デフォルトの名無しさん (ワッチョイ ebea-ZNPd)2017/11/01(水) 15:24:42.09ID:GbnHNcua0
Visual Studio 2017 Part4
https://mevius.5ch.net/test/read.cgi/tech/1509244956/

左のファイルのツリーで 項目の追加 で 新しく .c のソースファイル名指示すれば
勝手にコンパイルとリンクのターゲットにしてくれる (予定

97デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/11/01(水) 22:58:59.77ID:jxmKQQAl0
>>94
組み込みって言ってもこの頃は最初から Linux 動いてるようなのもあるからな。
今は昔と違ってかなり自由度が高いのもあるんじゃないかな。

98デフォルトの名無しさん (ワッチョイ 1387-jmG0)2017/11/01(水) 23:00:55.45ID:AnlYMxNy0
Linuxだからって、メモリーリークが無くなるワケじゃ無いからなぁ〜。

99デフォルトの名無しさん (ワッチョイ 719f-Akqv)2017/11/01(水) 23:11:29.84ID:jxmKQQAl0
ま、そりゃそうだけどね。

100デフォルトの名無しさん (ワッチョイ 9ba1-qonp)2017/11/01(水) 23:58:24.93ID:T3zOKizx0
>>94
組み込みではどの処理にどれだけメモリを使うかは、
設計で決まるだろ。

101デフォルトの名無しさん (ワッチョイ edb6-zM96)2017/11/02(木) 05:57:23.41ID:0ZjxmEGf0
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
http://labaq.com/archives/51880196.html
日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには?
https://bodoge.hoobby.net/columns/00013
はじめてボードゲームを作ってはじめてゲームマーケットに出店した ので、ひとり反省会をしてみる。
http://datecocco.hatenablog.com/entry/2015/11/26/000000
はじめて作ったボードゲームを売った話
http://nrmgoraku.hateblo.jp/entry/2017/05/17/210000
ボードゲームイベント「ゲームマーケット」から業界が見えた!
https://entertainmentstation.jp/61107
ボードゲームはどう作るのか、自分なりに考えた
http://roy.hatenablog.com/entry/2014/07/09/124824
オトナも遊べるボードゲーム!自作するといくらになるのか
http://www.d-laboweb.jp/special/sp312/
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
https://bodoge.hoobby.net/columns/00001
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
http://gigazine.net/news/20150820-board-game-crowdfunding/

組み込みって言ってもピンキリだからなぁ
車のエンジン制御とかなら>>100が言うような感じだけど>>97が言うようなLinuxが載ってる機器のGUI回りとかだとその辺かなりアバウト
テレビみたいにインターネットブラウザとか載せてるとそもそも必要量を見積もれないし

103デフォルトの名無しさん (スップ Sdc2-98vg)2017/11/02(木) 17:15:09.25ID:UMCJ4RbSd
https://ideone.com/lGSKsq
漸化式を使って組合せnCmの値を表示するプログラムです
数字を大きくすると正しい結果が出ないので困っています(例えば45C11
修正箇所教えてほしいです

104デフォルトの名無しさん (ワッチョイ 2ee8-Q/5A)2017/11/02(木) 18:14:52.51ID:I//dCy6q0
なぜ入力もlongにしないのだ?

105デフォルトの名無しさん (スップ Sd62-98vg)2017/11/02(木) 18:20:01.37ID:aAcU+3M+d
>>104
入力はそこまで大きい値を入れるつもりはないのでintにしました

106片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 99b3-iQJQ)2017/11/02(木) 18:26:10.31ID:JDKI/Gfo0
>>103
C言語の場合は、整数同士の割り算は整数の除算になる。例)3/2 == 1.
整数をfloatやdoubleにキャストしても情報落ちのため、浮動小数点数では正確な除算は計算できない。

https://ideone.com/aDJXNO

107デフォルトの名無しさん (スップ Sd62-98vg)2017/11/02(木) 18:39:45.95ID:aAcU+3M+d
>>106
gはnとmの最大公約数
あとnCmは必ず整数になるのでn-1Cm-1/Bの部分も小数にならず割り切れて整数になると思うんです
n=Ag m=Bg (A.Bは互いに素)として
n/m*n-1Cm-1
=A/B*n-1Cm-1 (※A/Bは小数になる)
= A*(n-1Cm-1/B)
=(n/g)*(n-1Cm-1/(m/g))
として計算すればうまく小数になるのを避けられるのではないかと考えました

すみませんC言語というより数学的な話で

108片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 99b3-iQJQ)2017/11/02(木) 19:31:39.13ID:JDKI/Gfo0
>>107
おそらくn/gは整数である。m/gも整数である。
では、(n-1)C(m-1)/(m/g)が整数であることの説明は?

109デフォルトの名無しさん (スップ Sd62-98vg)2017/11/02(木) 19:43:50.32ID:aAcU+3M+d
>>108
nCm (※整数)
=n/m*n-1Cm-1
= (A/B)*(n-1Cm-1)
= A*(n-1Cm-1/B)
・左辺が整数なので右辺も整数です
・A/BはAとBが互いに素(※最大公約数が1)なのでこれ以上約分できない分数です

ということは右辺が整数になるときn-1Cm-1/Bが整数です
B=m/gなのでつまり(n-1)C(m-1)/(m/g)は整数ではないでしょうか

110片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 99b3-iQJQ)2017/11/02(木) 19:55:21.08ID:JDKI/Gfo0
nCmが整数なので、A*((n-1)C(m-1)/B)も整数であろう。
しかし、((n-1)C(m-1)/B)が整数と判断するのは論理の飛躍だ。

n=2, m=2, g=1と仮定すると、A=n/g=2/1=1, B=m/g=2/1=2.
すると、((n-1)C(m-1)/B)=(1C1)/2となって整数ではない。

111デフォルトの名無しさん (スップ Sd62-98vg)2017/11/02(木) 19:59:15.85ID:aAcU+3M+d
>>110
この漸化式は0<m<nという条件のもとなのでn=mの可能性はないです

112 ◆QZaw55cn4c (ワッチョイ 2260-xBM6)2017/11/02(木) 20:01:17.09ID:q0hQ6vwa0
>>110
nCm が整数かどうかは別の漸化式
(n+1)C(k+1) = nC(k+1) + nCk
を使って帰納的に証明する

113片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 99b3-iQJQ)2017/11/02(木) 20:10:31.31ID:JDKI/Gfo0
>>111
ならば、大きな整数で桁あふれ(overflow)が起きているのかもしれない。
long longを使うか、多倍長整数を使うとよい。

114デフォルトの名無しさん (スップ Sd62-98vg)2017/11/02(木) 20:17:29.03ID:aAcU+3M+d
>>113
うーんやっぱりそうですか
ありがとうございます

115デフォルトの名無しさん (スップ Sd62-98vg)2017/11/02(木) 20:22:30.92ID:aAcU+3M+d
(n*n-1Cm-1)/m
と計算せず
(n/g)*(n-1Cm-1/(m/g))
と遠回りして計算したのは掛け算より前に割り算をして桁あふれを防止するためだったのですが、これだけではまだ読みが甘いみたいですね

116片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 99b3-iQJQ)2017/11/02(木) 20:33:31.27ID:JDKI/Gfo0
k>nのときnCkはゼロになるはずだ。間違えている。

117片山博文MZ (ワッチョイ 99b3-iQJQ)2017/11/02(木) 20:40:49.25ID:JDKI/Gfo0

118片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 99b3-iQJQ)2017/11/02(木) 20:44:22.04ID:JDKI/Gfo0
>>115
100!が何桁になるかわかっているか?

119デフォルトの名無しさん (ワッチョイ e1b3-8/j8)2017/11/02(木) 20:52:14.20ID:Jo74z7Xm0
組み込みの整数使うより 多倍長整数使うような話だな

120デフォルトの名無しさん (ササクッテロラ Spf1-XwAf)2017/11/02(木) 21:33:15.98ID:YtLG92Gup
πの計算みたいに配列でやればいいんだよ。

121デフォルトの名無しさん (ワッチョイ 319f-dVlt)2017/11/03(金) 00:48:44.74ID:mQ2prqq70
π (*´ェ`*)

122デフォルトの名無しさん (ワッチョイ 3181-Z6Fy)2017/11/03(金) 01:01:25.37ID:x/X9+IGP0
πの配列w
二つ並ぶのがいいな

123デフォルトの名無しさん (ワッチョイ 319f-dVlt)2017/11/03(金) 01:17:45.54ID:mQ2prqq70
(πoπ)

124デフォルトの名無しさん (ワッチョイ 4287-XwAf)2017/11/03(金) 01:25:33.04ID:exxwx2Ub0
配列の四則計算かw
とりま、1桁辺り1バイトからやって行くと良い。
アルゴリズムは手計算方式で。

125デフォルトの名無しさん (ワッチョイ 4193-4xHX)2017/11/03(金) 07:02:00.94ID:/utJWRuE0
cでutf-8文字列の扱い方がよくわからないのですがどうすればいいのでしょう

126デフォルトの名無しさん (ワッチョイ 4d08-S32u)2017/11/03(金) 07:17:35.22ID:3SB+84d60

127デフォルトの名無しさん (ワッチョイ 4193-ZDq4)2017/11/03(金) 08:10:28.98ID:Ui3Q5cAp0
>>125
ソース中にリテラルで書く書式?
それともテキストファイルを読み込んでの文字列操作かな。
もしかしてWindowsでの扱い等の環境依存の話だろうか。

128デフォルトの名無しさん (ワッチョイ 4287-XwAf)2017/11/03(金) 11:50:36.80ID:exxwx2Ub0
そーゆーのって、C言語じゃなくて、ライブラリの仕様なんで、環境わからないと誰も答えられないよな。

129デフォルトの名無しさん (ワッチョイ 319f-1mNv)2017/11/03(金) 12:27:14.54ID:1lWviljw0
プログラム中で扱う時はiconv()で変換しちゃうと楽だな。Windowsは知らんがOSが変換やってくれなかったっけ?忘れた。

130デフォルトの名無しさん (ワッチョイ 99b3-KOaZ)2017/11/03(金) 16:53:04.29ID:kt+ZN5MJ0
#include <stdio.h>

int main(void)
{
int x, y, z;
scanf("%d", &x);
y = x;
for (x = x - 1;x > 1;x--) {
z = y % x;
if (z = 0) {
x = 0;
}
}
if (x = 0)
{
printf("入力値は素数ではありません\n");
}
else
{
printf("入力値は素数です\n");
}
fflush(stdin);
getchar();

return 0;

}

素数判定用のやつ作ったんだが動かない
問題点教えてください

131デフォルトの名無しさん (ワッチョイ 4287-XwAf)2017/11/03(金) 16:58:25.19ID:exxwx2Ub0
さすがにネタだよな?

fflush(stdin)は無意味
あとイコールが足りない

133デフォルトの名無しさん (ワッチョイ 2eea-8/j8)2017/11/03(金) 17:09:14.02ID:q/3NCVak0
等しいかを比較するのは ==
if () の中であっても = は代入操作

× if (z = 0)
○ if (z == 0)

× if (x = 0)
○ if (x == 0)

134デフォルトの名無しさん (ワッチョイ 99b3-tWDu)2017/11/03(金) 17:11:50.30ID:kt+ZN5MJ0
すいませんマジで==忘れてましたw
あとはif文でxの値に代入する数字を1にしたら直りました
やっぱ自分だけで考えてると基本なことにも忘れてしまいますねw

135デフォルトの名無しさん (ワッチョイ 4287-XwAf)2017/11/03(金) 23:33:54.94ID:exxwx2Ub0
ネタじゃ無かったんかいw

136デフォルトの名無しさん (ワッチョイ 319f-dVlt)2017/11/04(土) 00:31:06.07ID:Wr8YwoWe0
宿題かな?

137デフォルトの名無しさん (ワッチョイ e175-e3AS)2017/11/04(土) 03:05:14.26ID:bSw/g7Kd0
おまえらバカにすることしか頭に無いのか
初心者ならこういうこともあるだろうに

138デフォルトの名無しさん (ワッチョイ d2a1-Q/5A)2017/11/04(土) 03:41:42.37ID:NciV8/1n0
警告オプションが必要だな

嫌、「直しておきました」メッセージが必要だな

140デフォルトの名無しさん (ワイモマー MMa5-puHV)2017/11/04(土) 10:16:02.36ID:t9DikZnoM
古代においては、(1 == y)としておけば、間違って(1 = y)とした時にコンパイルエラーで発覚する、という言い伝えが有った。
>
>#include <stdio.h>
>
>int main(void) {
> int x, y;
> scanf("%d", &x);
> y = x;
> while (x % (y -= 1))
> ;
> if (1 == y) {
> printf("入力値は素数です¥n");
> } else {
> printf("入力値は素数ではありません¥n");
> }
>
> return 0;
>}
>

141デフォルトの名無しさん (ワッチョイ 319f-1mNv)2017/11/04(土) 13:31:32.96ID:3FaXzC+X0
>>140
あーそうだな。今でもたまにそう書いてあるソースを見かける。
いつも自分ではやってないので違和感があるw
まあでもCみたいな言語だと本当はそう書いておいた方が良いんだろうけどね。

そう言えばこの頃のコンパイラはifで代入だけしてるようなのは見つけて警告出してくれるな。

>>140の書き方はしないでしょ。
間違って(y=1)とすることが有り得ないから。

などと偉そうに言えるようなレベルじゃないけど、そう思う。

printfの、パラメータに置換される文字列の呼び名は何ですか?
%dや%cの総称です

144デフォルトの名無しさん (ワッチョイ e9c3-psPY)2017/11/04(土) 13:55:14.14ID:M43VuEZC0
英語だとformat specifier
日本語だと書式指定子とかそんな感じ

>>144
ありがとうございます

146デフォルトの名無しさん (ワッチョイ e171-17Ne)2017/11/04(土) 14:50:01.01ID:qs6ShQOW0
>>142
一昔前はどの本でも推奨してたんやで

147デフォルトの名無しさん (ワッチョイ 2e80-frTj)2017/11/04(土) 15:27:20.00ID:FdHKGPou0
リテラルには代入できないから、リテラルを左側へ書いておく

今は、MISRA-C で、100項目をチェックする事が義務化されているから、
違反は必ず報告される

でも、トヨタのように、5/100 しか取れない企業もある。
95も違反してるw

148デフォルトの名無しさん (ワッチョイ 4193-ZDq4)2017/11/04(土) 16:10:54.87ID:XesRBOxx0
>>140 の話は >>1 の参考サイトにも出てる話だね。
C FAQ 日本語訳 ttp://www.kouno.jp/home/c_faq/
17.4 に載ってる。

定数と変数の比較なら役に立つけど、変数同士の比較に使えないから
特に良くも悪くもない、という評価。

コンパイラがオプションを備えてるなら警告を出させるのが良いわな。

149デフォルトの名無しさん (ワッチョイ c2e1-bcP5)2017/11/04(土) 20:24:04.67ID:wPtyVAZ40
>>147
トヨタの例を見て分かるようにMISRA-Cは役に立たないという話か

150デフォルトの名無しさん (ワッチョイ e175-e3AS)2017/11/04(土) 20:33:34.59ID:bSw/g7Kd0
トヨタ社員乙

151デフォルトの名無しさん (ワッチョイ 42b3-r/51)2017/11/04(土) 21:34:25.67ID:sTeHaJ1X0
MISRAは有効だけど盲信してるやつはバカ

152デフォルトの名無しさん (ワッチョイ 6e3e-cSXK)2017/11/05(日) 16:44:19.44ID:rSDVGL6P0
全員が同じレベルで言語の仕様や処理系の実装を理解しているわけじゃないからなあ。
最底辺のレベルを合わせる為にMISRAのような約束事が有用であろう事は想像できるんだが…

俺、車業界のソフト屋じゃなくて良かったと思うわ。
いや、むしろ、いっその事、強制された方が楽か?

153デフォルトの名無しさん (ワッチョイ 428a-Lt6+)2017/11/05(日) 16:52:45.91ID:7kWEh0GI0
底辺用のサブセットだからね

154デフォルトの名無しさん (ワッチョイ 62ee-S32u)2017/11/05(日) 20:23:18.52ID:AvV+p+8R0
COBOLの二の舞

155デフォルトの名無しさん (ワッチョイ 4150-lboT)2017/11/05(日) 20:37:42.87ID:Dhy1E5e10
初心者です。
C言語には標準出力関数がいくつかあって気になったのですが、

puts("文字列");
puts("文字列");
puts("文字列");

などと書くのと、

printf(
  "文字列\n"
  "文字列\n"
  "文字列\n
);
のように書くので結果は同じようになると思うのですが、速度やリソースの消費に違いはあるのでしょうか?
どちらが速いとかメモリ消費が少ないとかあれば教えていただきたいです。

156デフォルトの名無しさん (ワッチョイ 4980-wfes)2017/11/05(日) 20:40:29.69ID:8jvJZ2xf0
後者は%を探すぶん遅そう

157デフォルトの名無しさん (ワッチョイ c2e1-bcP5)2017/11/05(日) 20:54:32.17ID:+s13f97B0
前者はシステムコールが3回呼ばれそうだから遅そう

158デフォルトの名無しさん (ワッチョイ e18a-Dqmo)2017/11/05(日) 21:09:58.63ID:oA1U3DCD0
putsだと自動的に改行されんのか

159 ◆QZaw55cn4c (ワッチョイ 2260-xBM6)2017/11/05(日) 21:14:56.81ID:cePuEsTc0
>>155
printf() は重い。puts() の方が軽いしコード量も少ない

160デフォルトの名無しさん (ワッチョイ 9d7f-lboT)2017/11/05(日) 21:19:49.85ID:Z/yFjIMy0
>>157
stdoutがline bufferedなら、どっちもwriteが3回呼ばれる

言語規格的には解析処理のあるprintfのほうが遅そうだけど
これぐらい単純なprintfだと、gcc/clang辺りでコンパイルするとputsに最適化される
副作用諸々でputs自体の呼び出し回数を減らすことはないから、puts1回の呼び出しで済むprintfのほうが早い

161デフォルトの名無しさん (ワッチョイ e175-e3AS)2017/11/05(日) 21:26:10.62ID:pE+6s3oz0
すっげー
物知りだなぁ

162 ◆QZaw55cn4c (ワッチョイ 2260-xBM6)2017/11/05(日) 21:29:46.85ID:cePuEsTc0
>>160
それはさすがになさそうだ…
printf()/vfprint() のCのコードを#include しているわけではなく、単にリンカがランタイムのコードをリンクしているだけなのでは?
いいかえると、printf() がCで書かれており、printf() もコンパイルするのなら最適化がかかるだろうが、さすがにそうじゃないだろう?

163デフォルトの名無しさん (ワッチョイ e175-e3AS)2017/11/05(日) 21:31:03.45ID:pE+6s3oz0
もうさぁ実測でいいよね

164片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-y/PZ)2017/11/05(日) 21:34:36.83ID:nRtobml0d
>>162
はい、時代遅れ発見。LLVMとGCCはお互いに競争する形で最適化の技術を進化させているんだよ。

165デフォルトの名無しさん (ワッチョイ 9d7f-lboT)2017/11/05(日) 21:41:12.14ID:Z/yFjIMy0
gccはビルトイン関数のprintfを持ってるのに、ライブラリをリンクとか何言ってんだコイツ

166デフォルトの名無しさん (ワッチョイ 9d7f-lboT)2017/11/05(日) 21:43:19.65ID:Z/yFjIMy0
ランタイムのコードをリンクか、どっちにしろアホ晒してるのは変わらんか

167 ◆QZaw55cn4c (ワッチョイ 2260-xBM6)2017/11/05(日) 21:46:57.66ID:cePuEsTc0
へえ、gcc4 からですか…
http://blog.kmckk.com/archives/926992.html

thanks

168デフォルトの名無しさん (ワッチョイ 2ee8-Q/5A)2017/11/06(月) 01:36:37.31ID:ixOJFcN/0
いやいや勉強になるわ

169デフォルトの名無しさん (ワッチョイ 4193-ZDq4)2017/11/06(月) 06:37:53.91ID:uTTN+kxR0
>>167 のリンク先を読んだのだが…
printfで色々条件、最後が改行だったらputsに置き換え、は分かったけど
最後が改行でない場合はfputs( , stdout)に置き換えるわけにいかんのじゃろか?

170デフォルトの名無しさん (ワッチョイ ad8a-5Y2u)2017/11/06(月) 08:19:42.45ID:a7D2X9T80
stdoutがフラッシュされるタイミングが改行だから拙いんじゃね

171デフォルトの名無しさん (ワッチョイ 06a1-156W)2017/11/06(月) 09:46:39.21ID:2hip9t+X0
PC で組むなら、たいした問題にならないリソースの心配よりも、
統一して見やすいように気を使うべきだろうね。

172デフォルトの名無しさん (ワッチョイ ad23-nsS3)2017/11/06(月) 15:24:45.69ID:TqJSXF8C0
>>167
詳しい解説サンクス!

173デフォルトの名無しさん (ワッチョイ 798a-z6xU)2017/11/06(月) 16:24:18.19ID:Z2s1OQfZ0
fputs(
"文字列1\n"
"文字列2\n"
"文字列3\n"
, stdout
);

174デフォルトの名無しさん (ワッチョイ 4150-lboT)2017/11/06(月) 17:25:31.98ID:f1KpQ6jU0
みなさんありがとうございます。
末尾の改行程度しかないprintfはputsに置き換えられるんですね。
ググってみたりもしたんですが、最近のPCであれば速度にほとんど違いが出ない様なことも書いてありました。
171さんの言う通り速度やリソースよりも見やすさや読みやすさの方が大事になりそうですね。
勉強になりました。

175デフォルトの名無しさん (ワッチョイ 4502-S32u)2017/11/07(火) 05:32:04.97ID:2eQgtTM30
塵も積もれば何とやらで
すぐ砂時計だの輪っかだのになるのが
M$の作風

176デフォルトの名無しさん (ワッチョイ 46e7-M99L)2017/11/07(火) 18:15:10.39ID:pVSOD8mN0
入力が入れる前に厳密にされてないとprintfは怖くて使いたくないなエラーになるし
プログラミング問題とかなら入るの制限されてるから使う時もあるけど

177デフォルトの名無しさん (ワッチョイ 99b3-tWDu)2017/11/08(水) 00:52:24.03ID:+F77Ugxq0
自動で実行ファイルが作成されてその実行ファイルが新しく実行ファイルを作ってその実行ファイルが…
みたいな無限増殖するウイルス的なやつって理論上作れるの?
作る気はないがファイル名を自動で生成して上書きするようしていったら全ファイルが空ファイルになるってのも可能なのか?

178デフォルトの名無しさん (ワッチョイ e175-e3AS)2017/11/08(水) 00:53:30.71ID:Fypp0IbQ0
可能

179片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-y/PZ)2017/11/08(水) 00:55:32.02ID:TZ5JAUzSd
>>177
GetModulePathName+CopyFileで誰でも作れる。違法。

180片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-y/PZ)2017/11/08(水) 02:35:25.82ID:TZ5JAUzSd
>>177
全ファイルが空になるというのは、イカタコウイルス。可能だが違法。

181片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-y/PZ)2017/11/08(水) 02:50:08.78ID:TZ5JAUzSd
やり方は直接は教えられないから、Win32APIスレで個別の処理のやり方を細かく質問するといい。

182デフォルトの名無しさん (ワッチョイ 4150-lboT)2017/11/08(水) 10:05:36.22ID:2J8ZwtJ20
なにこのスレ怖い

183デフォルトの名無しさん (ワッチョイ 5fb3-QPNr)2017/11/09(木) 00:14:51.16ID:th5mXoJq0
プログラミング全体に言えることだがreturnがよくわからない
戻り値とかはなんとなくわかる
戻り値を表示するわけだからprintf要らずなわけ?

184デフォルトの名無しさん (ワッチョイ df8a-AcTI)2017/11/09(木) 00:20:42.43ID:BpTh9vVd0
日本語でok

185デフォルトの名無しさん (ワッチョイ 5f9f-lB0v)2017/11/09(木) 01:05:19.54ID:dSouu86q0
>>177
fork() してプロセス作るの繰り返すだけでいいのでは?ファイル作る必要あるか?
作ったとしてもそのファイルの内容は元のやつと同じなんだろ?

Windows の場合はどうするか知らない。fork() と同じような動きをするAPIがあるなら
それ使えばいい。(cygwinのライブラリ使えばいいか)

186デフォルトの名無しさん (ワッチョイ 5f9f-lB0v)2017/11/09(木) 01:06:21.38ID:dSouu86q0
>>183
君は return を何か別のものと勘違いしてはいないか?

187デフォルトの名無しさん (ブーイモ MM83-15/i)2017/11/09(木) 01:15:30.78ID:ibgaV5zkM
>>183
何か関数のコードをここに書いて、自分なりに説明してみ?
優しいお兄さんたちが説明のアラを指摘してくれるよ

188デフォルトの名無しさん (ワッチョイ 5fb3-QPNr)2017/11/09(木) 01:31:12.69ID:th5mXoJq0
>>187
じゃホント適当なの

int main(void){
int a,b;
scanf("%d %d",&a,&b);
a=a+b;
return a;

適当に
基本自分はa=a+bの後の行にprintf("%d",a);って入れるけど戻り値を表示するだけならreturnで十分なの?って聞きたい

189デフォルトの名無しさん (ワッチョイ 5f75-OZYs)2017/11/09(木) 01:44:44.36ID:kZJdPPiU0
>>188
main関数のreturnの値は0固定だろ。
正常に終了したかどうかを示す数値を返さないとダメなんだし

190デフォルトの名無しさん (ワッチョイ 5f9f-lB0v)2017/11/09(木) 01:52:12.46ID:dSouu86q0
>>188
それどこにも何も出力してないよ。一応 main() での return はプログラムを実行した側に
ステータスとして返されたりするがその辺はOSやmain()を呼ぶ側のコード依存だ。

で、それはプログラムの実行中で起きたエラーを伝えるためによく使われている。
0ならエラーなしで1ならエラーみたいに。つまり普通は計算結果を返すためには使わない。

191デフォルトの名無しさん (ワッチョイ 5fb3-QPNr)2017/11/09(木) 01:52:57.21ID:th5mXoJq0
>>189
0固定なの?
苦Cでmainじゃない関数で使ってたけど
よく分かんないな

192デフォルトの名無しさん (ワッチョイ 5f9f-lB0v)2017/11/09(木) 02:31:24.91ID:dSouu86q0
>>191
固定と言うか、昔からの慣習で普通は0返すように書くんだよ。UNIXでの慣習ね。Linuxでも同じ。
UNIXではシェルスクリプトで動かした時にエラーかどうかを判定するのに使うことがある。
(シェルの if 文等で直接使える。Windows のコマンドプロンプトでもほぼ同じ)。
0が返されたら正常終了で0以外がエラーね。

まあとにかく歴史的な問題でそうなっていると思って良い。そういう意味では main() からの
return だけは特殊なものだと思っていい。

193デフォルトの名無しさん (ワッチョイ 5f93-B4G6)2017/11/09(木) 06:59:07.81ID:tZYUBTdz0
>>188
return a; と書いても基本的にはaの値は表示されないよ。
returnは関数内で計算した結果を呼び出し側に返すだけ。
値を見たければprintf等を使って表示する必要がある。
呼ばれた関数内で(途中経過として)表示するか、
呼び出した側で(関数の結果として)表示するか、は目的次第だが。

main() はOS(WindowsとかLinuxとか)からコマンドとして呼び出される関数、
と考えると分かりやすいかも。
main() 関数のreturnの値はOSに返される。
返された値をどう扱うかはOS側の問題だわね。

194デフォルトの名無しさん (ワッチョイ 5fb3-AgpC)2017/11/09(木) 07:02:59.09ID:HmHTv3HB0
return は表示装置に値を戻す(表示する)機能ではない

195デフォルトの名無しさん (ワッチョイ 5f50-TPjW)2017/11/09(木) 07:18:13.98ID:/m6aHr1P0
>>191
「自作関数を作る」あたりのページで出てくるsum関数でしょ?
あれってただ単に今までmain関数で return 0 しかしていないから、例として同じように書いているだけだと思うよ。

「関数から数値を返す」のページまで行けば return num してるsum関数が出てくるよ。

196デフォルトの名無しさん (ワッチョイ ffe7-/rI5)2017/11/09(木) 13:19:13.30ID:U5AasQBn0
print関数だけで表示するだけの関数とかならreturn0するけど衝突判定とかならbool型返したりするからな

197デフォルトの名無しさん (アウーイモ MM23-0J0R)2017/11/10(金) 15:35:52.06ID:VD/o6LfMM
何ができれば、c使えるって言っていい?

198デフォルトの名無しさん (ガックシ 064f-OZYs)2017/11/10(金) 15:40:07.94ID:ZWtrLrii6
mallocの実装

199デフォルトの名無しさん (ワッチョイ 5f8a-j5yg)2017/11/10(金) 15:43:10.76ID:u7W9Owtb0
自分が使っているPCなんかで、
処理を自動で行いたいなと思った時に、
それをC言語を使って実現出来るなら

200デフォルトの名無しさん (JP 0H53-15/i)2017/11/10(金) 15:58:26.05ID:VNjqndEHH
>>199
それ、OS固有のAPIの知識だらけで、Cがきちんと使える能力は測れない

201デフォルトの名無しさん (ワッチョイ 5f8a-j5yg)2017/11/10(金) 16:06:39.20ID:u7W9Owtb0
実装は知識だけでは出来ないからね

>>197
数年かけてLinuxカーネルを読破できたら

コールバック関数の型宣言とか、
関数ポインタの扱いを難無く出来るか?
とかかな?

204デフォルトの名無しさん (ブーイモ MM83-Q9AV)2017/11/10(金) 18:00:36.54ID:Dvtc6/jjM
Cの限界を感じたら習得したといえる

205デフォルトの名無しさん (ワッチョイ 5fb3-AgpC)2017/11/10(金) 18:32:02.73ID:23yuj+zi0
p = p() で駆動するようなステートマシンで
自分のポインタを返す関数 と それを保持するポインタの宣言とか

206デフォルトの名無しさん (ワッチョイ ffe7-bKAn)2017/11/10(金) 19:29:46.79ID:xd+jRbDd0
Cコンパイラをインストールしまくる。

207デフォルトの名無しさん (ワッチョイ df8a-AcTI)2017/11/10(金) 19:31:16.24ID:YeFpRpYh0
LISPかforthを作る

208デフォルトの名無しさん (ワッチョイ 7f06-TYjb)2017/11/10(金) 20:07:11.53ID:f7hdF1Yr0
use the force luke

209デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/10(金) 20:08:56.37ID:KTiHfL4P0
Ubuntuをインスコできる。

>>200
「きちんと」とか書いてない要件を作り込んでバグだらけのコードを量産する自称玄人乙

ポインタがわからないです

メモリのアドレスの最初を配列に入れて

呼び出すときそのアドレスの最初を読み込んでデータを引き出すということなんでしょうか?

212デフォルトの名無しさん (ワッチョイ 5f75-OZYs)2017/11/10(金) 21:09:11.01ID:7i6+bCDW0
配列?

すいません
本当に無知なのでアドレスがよくわかりません

バカにもわかるように教えていただけると嬉しいです

214デフォルトの名無しさん (ワッチョイ df61-cd7v)2017/11/10(金) 21:15:04.33ID:JEFbhK0N0
ポインタの説明で、何かに例えて説明しようとすると余計に混乱する宿命。

アドレス=住所

巨大な集合住宅を想像してごらん?

しかも1階建ての超長い長屋な。

じゃあ、貨物列車の方が良くね?

やっぱ、列車だと動くからダメだな。

…すまん、まとまらないから誰か頼むわ。

221デフォルトの名無しさん (ワッチョイ 5f93-B4G6)2017/11/10(金) 21:53:36.59ID:mQGNgvjy0
コンピュータの中には何百メガとか何ギガとかのバイト数のメモリがあって、
データ(数値や画像や文字列、プログラム自体も)はメモリに記憶されていて、
メモリには1バイトごとに連番のアドレスが割り振られている。

…程度のイメージなら現代じゃ誰でも共有してると思うんだけど。
女学生が携帯電話機を使ったり、子供がゲームをする時だって、
「メモリカードの容量が足りなくなった」とか言うでしょ。

それとも、容量としてのメモリ(どれだけ入れられるのか)は飲み込めても
アドレスという概念(どこに入ってるのか)になると飛躍が必要なのかな。

アドレスが住所の意味で、小人さんひとりひとりが住んでる場所を表してて、お手紙を出したりもらったりするのに使うんだよ?
でok?

223デフォルトの名無しさん (ワッチョイ ffe7-/rI5)2017/11/10(金) 22:04:11.83ID:bPzBG0Jo0
いわえる宅急便で品物の上に貼るあれよあれがないとどこに送れないか解らないっていうあれ

224デフォルトの名無しさん (ワッチョイ 7f0c-zl2n)2017/11/10(金) 22:06:56.78ID:k49jiBoo0
RAMやROMにデータがどう書き込まれているのかイメージ出来ているのかな?

>>211
本屋さんへ行って「C言語ポインタ完全制覇」って本を買って読もう
それが一番近道だと思う

226デフォルトの名無しさん (ワッチョイ 5f71-UELA)2017/11/10(金) 22:21:46.83ID:WKyXN66O0
>>213
じゃあまあざっくりと集合住宅で例えるか

例えば char hoge; と宣言したとする
するとコンピュータは空いてる部屋を1つ、hogeのために割り当ててくれる
仮に部屋番号を301号室としようか
広さは四畳半のワンルーム
君はこの部屋に、'a' でも 'x' でも好きな文字を入れることができる
次に char piyo; と宣言したとする
そしたらやっぱりコンピュータは部屋を割り当ててくれる
部屋番号はhogeと別にしないと被っちゃうから401としよう
間取りは同じ、四畳半のワンルーム
君がchar型の変数を宣言する限り、広さは常に四畳半だ

更に、int foo; と宣言してみよう。
同じように部屋を割り当ててみるが、困ったことにfooは身体が大きくて四畳半に収まりきらない
これはfooがchar型ではなくint型だからだ
そこでコンピュータは隣の3部屋の壁を取っ払って、計4部屋分の広さにしてfooに割り当てる
最初に与えられた部屋番号を501とすると、fooは501,502,503,504の4部屋を占領することになる

このそれぞれの部屋番号が、いわゆるアドレスだ
つまりまずコンピュータに膨大な数の部屋が用意されてて、変数宣言や関数宣言などをするごとに適宜空いてる部屋を割り当てていく
そのときに割り当てられた部屋の部屋番号が、その変数なり関数なりのアドレスとなる
fooみたく複数のアドレスにまたがってる場合は、その先頭アドレス(今回でいうと501)がfooを指定する際のアドレスになる

変数名からその変数に割り当てられたアドレスを知るには、&を使い&hogeや&fooと書く

>>213
一応考えてみた
アドレス= 住所だと考えて
どこでもドア = ポインタ変数そのもの
行きたい場所 = 参照先のアドレス
として
・自分の部屋にどこでもドアを置く = ポインタ変数を宣言する
この時のポインタ変数のアドレス(ドアの置かれてる場所)は自分の部屋
今はまだドアの向こうはどこにも繋がっていない
・どこでもドアの向こう側をしずかちゃんの風呂場にする = ポインタ変数の中身を参照先(しずかちゃんの風呂場)のアドレスに書換える
これでポインタ変数の中身(=ドアの向こう側)はしずかちゃんの風呂場と繋がる
・ドアを開けて風呂場を見る = *を付けてポインタ変数にアクセスする
・ドア自体がどこに置かれてるかを知る = &を付けてポインタ変数にアクセスする
ポインタの嬉しい点はわざわざしずかちゃん家に行かなくても自分の部屋に居ながら
どこでもドアを介して風呂場を覗く事が出来るので移動の時間が省けて時短になる

228デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/11(土) 00:39:20.61ID:4HyMUlDc0
初心者はたとえ話するのが好き。

229デフォルトの名無しさん (ワッチョイ 5f75-OZYs)2017/11/11(土) 01:09:56.98ID:QwHnz2ZY0
>>227
そんななげーの覚えれねーよ

230デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/11(土) 01:16:01.20ID:4HyMUlDc0
ヘネパタ読破してからプログラミングに進め。

231デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)2017/11/11(土) 01:32:47.13ID:cTWJmMx00

232デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)2017/11/11(土) 01:33:46.86ID:cTWJmMx00

233デフォルトの名無しさん (ワッチョイ 5f8c-l80d)2017/11/11(土) 02:43:48.01ID:OXx9+Toc0
ポインタを説明するときにアドレスで説明するのって、初心者による初心者向けの説明に多いけど
それはアドレスを知ってる人向けで、ここからさらにアドレスを一生懸命別の何かで
例えるのはかえって分かりにくいだけにしか思えない

234デフォルトの名無しさん (ワッチョイ 7f87-ckd2)2017/11/11(土) 04:15:47.28ID:qvyXx+2n0
喩えるんじゃなくてメモリそのものを教えたほうがいい

235デフォルトの名無しさん (ワッチョイ 7f87-ckd2)2017/11/11(土) 04:17:53.56ID:qvyXx+2n0

236デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)2017/11/11(土) 04:30:42.45ID:3tqm8fVd0
>>211
マイコン小僧的な意味での理解が必要かもしれないなあ

ポインタ定義した時点で、コンパイラが「アドレスを入れるためのメモリ領域」なり
「CPUのレジスタ」なりを使うようにしてくれる
貴方が int* a = 300; とか書いたら、 コンパイラは300という数字をどこかに保存しておいてくれる
CPUのレジスタか、特定のメモリ領域かは処理系次第だが

で、計算やるってなったら「CPUの間接参照機能」を利用する
アセンブラ側で「間接参照機能を使え」って感じのコードを吐くのよ
そういうオペコードがある

で、間接参照機能を使った場合、CPUはメモリの内容を2バイトか4バイトか見るでしょ
CPUは「今読んだ数字はメモリの番地である」と判断して
CPU側でいてあるメモリ番地の内容を読み込む
で、読んだデータはコンパイラが吐いたアセンブラのコード次第だが

とにかくCPUには「ある数字をメモリなりレジスタから読み、次にそこに書いてた数字をアドレスと判断し、別のメモリアドレスを読む」って機能がある
それを使うのがポインタ

そんな感じ

237デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)2017/11/11(土) 04:33:00.54ID:3tqm8fVd0
そんな間接参照なんてないです、って処理系もあろうが
Cコンパイラがアセンブラレベルで ご ま か し ま す

ってな話かと

238デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)2017/11/11(土) 04:36:10.38ID:3tqm8fVd0
眠い時に書くとろくでもねぇ文章になるわーすまん

とりま「CPUの間接参照」で調べてくれ、そっちのほうが早いかも知らん

239デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)2017/11/11(土) 04:46:59.68ID:3tqm8fVd0
アドレスについては……

Q: たとえばここに 1 2 3 4 って数字があるとするでそ
二番目を起点にして、二つ指差してみて、起点は指差しの対象に含むよ

A: 指差す箇所を[]でくくると 1 [2] [3] 4 になるかと

そんな感じのテキトーさでいいと思います、これがただ例えば0x000F34824になるだけで

240デフォルトの名無しさん (ワッチョイ 7f87-1iEE)2017/11/11(土) 04:57:58.31ID:WAa7vu/G0
アドレスはアドレスだろ。何にもたとえちゃいねーよ。まんまだよ。

241デフォルトの名無しさん (ワッチョイ 7f87-1iEE)2017/11/11(土) 04:58:31.67ID:WAa7vu/G0
アドレス=住所な。

242デフォルトの名無しさん (ワッチョイ dfe3-ihOZ)2017/11/11(土) 04:58:49.86ID:3tqm8fVd0
なお、ポインタのだいたいの使い道は

・クソでかいデータを複数の関数で参照せなあかんとき(画像処理とか)に先頭アドレスだけ渡してあとよろしこって奴
・呼び出し「先」側でなんかセットアップしてもらわなあかんとき、Win32APIあるある
・関数テーブル(30だか50だか、個別に使う関数の先頭アドレスと、そこに飛ばす条件をペアにした配列があるの)
・無名関数もどきのことをやりたいとき、一部分だけ後付け処理やりたいんでそこだけjmpさせて戻る系の奴というか、sortみたいなの

のどれかやな、こんくらいの説明でいいんだろうか? イミフすぎて正直すまんかった

243デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)2017/11/11(土) 13:17:40.59ID:cTWJmMx00
コンピュータの内部構造をどの程度知っている人が相手なのかで説明方法を変えた方が良いように思う。

TTLロジックICでアキュムレーター組めるくらいなら…
…あ、多分説明自体不要かw

245デフォルトの名無しさん (ワッチョイ df61-sJj3)2017/11/11(土) 13:41:35.27ID:6HxAQryE0
初心者は一度バイナリーエディタやメモリエディタを弄ってみることを進める・・・と無責任に言ってみる。

246デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)2017/11/11(土) 15:25:23.65ID:cTWJmMx00
8bitマイコンみたいなやつだと説明は少し楽になるな。メモリ空間が64KBしかないし。
まあ昔はそれでもバンク切り替えして沢山メモリ使えるようにしていたが、考える上では楽だ。
今はメモリ空間も広大になってメモリブロック切り替えてアドレス変わるのは当たり前だったりして説明が面倒だ。

247デフォルトの名無しさん (ワッチョイ df8a-AcTI)2017/11/11(土) 15:28:20.12ID:ljWP0iHz0
>>245
debug.exe ですね

248デフォルトの名無しさん (ワッチョイ df61-sJj3)2017/11/11(土) 17:00:50.95ID:6HxAQryE0
MON
*■

249デフォルトの名無しさん (ワッチョイ 5f81-n7le)2017/11/11(土) 17:08:09.72ID:HnFKgro40
おじいちゃん・・・

250デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)2017/11/11(土) 17:25:03.39ID:TdmokUpS0
>>246
初心者相手なら論理アドレスで説明すればいいだけ
アドレス変換とかの説明はもっと後でいいだろ

251デフォルトの名無しさん (ワッチョイ ffd5-bKAn)2017/11/11(土) 18:27:36.19ID:2S6WQY7h0
&h■

CALL -151

253デフォルトの名無しさん (ワッチョイ dfcc-TYjb)2017/11/11(土) 19:57:56.44ID:Hv/PaJUT0
>>252
懐い...

254デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/11(土) 23:12:19.01ID:4HyMUlDc0
CASL→C→Java→C++の順でどうぞ。

255デフォルトの名無しさん (ワッチョイ 5f9f-zl2n)2017/11/12(日) 02:33:10.79ID:0YSprajH0
>>252
な、なぜそれを知っているw

256デフォルトの名無しさん (ワッチョイ dfcc-TYjb)2017/11/12(日) 05:22:01.75ID:yBBP+7vl0
SWEET16

257デフォルトの名無しさん (ワッチョイ 5f8a-gxuN)2017/11/12(日) 06:32:07.24ID:61B/9ygA0
ポインタの前にアドレスが理解できないってどういうことよ…
アドレス=メモリ上の位置、だよ
例えば64kbのメモリを積んだ機械ならアドレスの全範囲は0x0000〜0xffffだが
そんなこと気にしなくても使えるようにしたから高級言語なのよ

int a;
int *pa;
としたとき、コンパイラはaとpaそれぞれを上記範囲の"どこか"に割り当てる
その"どこか"をaやpaという名前で呼ぶことにするよ、という宣言だから

ただし「変数は"どこか"のアドレスの別名である」ということを"利用"することはできる
pa = &a;
とすれば、paには「aの実際の場所(=アドレス)」が入り
*pa = 123;
とすれば、paが現在指しているアドレス、即ち「aの実際の場所」に123が入る

258デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 10:09:12.41ID:H0u2BwIs0
お前らが箱とか部屋とか変なこと言いだすから初学者が混乱するんだろ。

259デフォルトの名無しさん (ワッチョイ 7fa2-Ud84)2017/11/12(日) 10:18:34.45ID:pV+DiiLQ0
変じゃない説明よろしく

260デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 10:24:13.57ID:H0u2BwIs0
CASLが基本。

261デフォルトの名無しさん (ワッチョイ 5fd2-cd7v)2017/11/12(日) 10:34:03.82ID:534592TW0
ニモニック表片手にハンドアセンブルしてみろ
そうすりゃアセンブラやコンパイラがなにしてるか
馬鹿でもない限りいろいろ分かる

自分は二重ポインタってのが分からないです
アドレスの入るアドレスがあるなら
アドレスの入るアドレスの入るアドレスもあるんですか?

263デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 11:23:06.41ID:H0u2BwIs0
アドレスにアドレスは入らないだろ。

264デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 11:28:32.94ID:H0u2BwIs0
アドレスを記録位置と言い換えてみたらどうだろうか。

265デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 11:30:59.32ID:H0u2BwIs0
メモリーを記録装置、メモリー上のバイトを記録素子、アドレスを記録位置。
どうだい。

266デフォルトの名無しさん (ワッチョイ 5f9f-ySnM)2017/11/12(日) 11:32:35.21ID:StX7DGK40
変数の位置(アドレス)を示す変数 = ポインタ
そいつ自体も変数だからアドレスを持ってるしポインタも持てる

267デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 11:33:44.56ID:H0u2BwIs0
記録位置の入った素子の位置が入った記録素子。
これなら有りえるとすぐわかる。

268デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 11:35:10.76ID:H0u2BwIs0
>>266
ポインタはアドレスではない。

269デフォルトの名無しさん (ワッチョイ 5f25-OZYs)2017/11/12(日) 11:40:26.83ID:V8vWJYoP0
物理的な描像にするな。
論理的な本質部分を説明しろ。

270デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 11:41:52.30ID:H0u2BwIs0
Cから物理を取り除いたら役に立たない古代文明。

271デフォルトの名無しさん (ワッチョイ 5f25-OZYs)2017/11/12(日) 11:43:40.40ID:V8vWJYoP0
ハートは抽象的モデル化しろ。

272デフォルトの名無しさん (ワッチョイ 5f25-OZYs)2017/11/12(日) 11:44:09.30ID:V8vWJYoP0
x ハート o ハード

273デフォルトの名無しさん (ワッチョイ 7f87-ckd2)2017/11/12(日) 14:48:35.92ID:w0XJ4hAE0
>>265
メモリー上の位置でいいんじゃね?
これがイメージできなきゃ無理

274デフォルトの名無しさん (ワッチョイ 7f87-1iEE)2017/11/12(日) 14:50:03.54ID:BnEu6Dc30
C使う以上、物理的な概念から逃れる事は不可能。

275デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)2017/11/12(日) 14:54:31.77ID:MOg5phwx0
>>262
ある
3重でも4重でもいくらでも
一般的に使うのは2重までだが

276デフォルトの名無しさん (ワッチョイ 5f8a-gxuN)2017/11/12(日) 15:11:05.31ID:61B/9ygA0
○重ポインタという言葉はあまりオススメしない
いくら重ねようが「〜へのポインタ」だ

int a = 123;
int *pa = &a; /* 「int型」へのポインタpa */
int **ppa = &pa; /* 「int型へのポインタ」へのポインタppa */
int ***pppa = &ppa; /* 「int型へのポインタへのポインタ」へのポインタpppa */

参照のイメージ([アドレス][値])
[a][123]
[pa][&a] -> [a][123]
[ppa][&pa] -> [pa][&a] -> [a][123]
[pppa][&ppa] -> [ppa][&pa] -> [pa][&a] -> [a][123]

277デフォルトの名無しさん (ワッチョイ 5f9f-/Aoa)2017/11/12(日) 17:57:06.14ID:dvIcUwwY0
確かにポインタは2重以上はなるべく使いたくないな。混乱するし。

278デフォルトの名無しさん (ワッチョイ ffe7-/rI5)2017/11/12(日) 18:01:39.60ID:C1sLEmf00
そうだなポインタを文字列の格納だけに使うならアドレスは関係ない
int型で変数を操作するとかなら話は別だけどな

279デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 18:02:47.18ID:H0u2BwIs0
二重以上には二重も入るのだが、本当にそれでいいのか?

280デフォルトの名無しさん (ワッチョイ 5f8c-JIcl)2017/11/12(日) 18:05:10.12ID:5J9eZD000
二重ポインタって言い方が紛らわしい
「ポインタが二重」って意味が通じない。
もともとは * が2つ付いてることを二重って言ってるんだろうけど

281デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 18:20:47.35ID:H0u2BwIs0
ポインタは型ではないので、二重のポインタという言い方はあり得るのではないか。

282デフォルトの名無しさん (ワッチョイ 5fb3-AgpC)2017/11/12(日) 18:22:14.17ID:VcNgV3aF0
ポインタの配列 配列のポインタ ポインタのポインタ

283デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)2017/11/12(日) 18:25:05.93ID:MOg5phwx0
>>279
「なるべく使いたくない」だからいいんじゃね

284デフォルトの名無しさん (ワッチョイ 5f81-n7le)2017/11/12(日) 18:25:48.95ID:ppEJgx+i0
三重以上のポインタって実際に使われているの?

285デフォルトの名無しさん (ワッチョイ 5fb3-ouqv)2017/11/12(日) 18:25:59.93ID:H0u2BwIs0
int型へのポインタに対するchar型へのポインタとかあるのなら紛らわしいという主張も理解できるが。
そんなものは無いので。
***を三重のポインタというのは合理的に見える。
どうだい。

286デフォルトの名無しさん (ワッチョイ 5f81-n7le)2017/11/12(日) 18:28:26.99ID:ppEJgx+i0
int型へのポインタ型へのポインタ
char型へのポインタ型へのポインタ

287デフォルトの名無しさん (ワッチョイ 5f81-ySnM)2017/11/12(日) 18:28:46.98ID:5fy9hb990
>>284
15年前大学で4重ポインタの地獄を目にした

288デフォルトの名無しさん (ワッチョイ 5f81-n7le)2017/11/12(日) 18:30:54.73ID:ppEJgx+i0
>>287
型宣言の読解が試験にでたとか?

289 ◆QZaw55cn4c (ワッチョイ 7f60-20FA)2017/11/12(日) 18:36:30.86ID:Va1KoPXV0

290デフォルトの名無しさん (ワッチョイ 5f81-ySnM)2017/11/12(日) 18:36:50.26ID:5fy9hb990
>>288
研究課題で先輩が作ったライブラリのプログラム
それを使って成果を出すのが自分の卒論…

291デフォルトの名無しさん (ワッチョイ 5fb3-AgpC)2017/11/12(日) 18:42:31.96ID:VcNgV3aF0
3次元配列を生成して引数に書き戻すような構造なのか
4次元配列を生成して戻すようなのか
各次元で大きさが固定なら 1次元配列にして 添え字演算で4次元にしちゃうな

292デフォルトの名無しさん (ワッチョイ 7f87-1iEE)2017/11/12(日) 19:35:51.01ID:BnEu6Dc30
リスト構造とかツリー構造とか、繋げたり外したりすんのに使うよな?

293デフォルトの名無しさん (ワッチョイ 7fb3-kkiU)2017/11/12(日) 19:57:25.27ID:MOg5phwx0
>>292
でも2重までじゃね?

294デフォルトの名無しさん (ワッチョイ 5f9f-/Aoa)2017/11/12(日) 20:33:06.12ID:0YSprajH0
>>280
階層の方が良いか?

x,y,z座標表すのにint***を使ったことがある

296デフォルトの名無しさん (ワッチョイ 7f0c-zl2n)2017/11/12(日) 22:25:07.93ID:Q7xN5Euu0
2重以上になりそうなときは構造体にまとめちゃうからなぁ。

297デフォルトの名無しさん (ワッチョイ 5f8c-JIcl)2017/11/12(日) 22:26:52.43ID:5J9eZD000
>>294
多分、階層の方がわかりやすいだろうね

int ***p; というポインタ変数pで p[x][y][z] とすると、
*(*(*(p + x) + y) + z)
を参照する。このあたりを分かりやすく言えるといいんだけど

298デフォルトの名無しさん (ワッチョイ 5fb3-0rpk)2017/11/13(月) 00:06:28.13ID:NsFkY9mQ0
同一ファイル内の関数を単体で自動化テスト出来る何かスマートな方法はないものか
他のテスト周りで小回りが効く言語と比べると単体テストがお辛い

299片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9f-dwJZ)2017/11/13(月) 00:11:14.56ID:GVKu0VVYd
>>298
惜しい。C++だったら、コンストラクタでオートメーションできるのに。

300デフォルトの名無しさん (ワッチョイ ffe7-bKAn)2017/11/13(月) 05:48:49.26ID:m7i5EnEm0
テストコードを入れておくしかない。

301デフォルトの名無しさん (ワッチョイ 5f9e-xrXY)2017/11/13(月) 14:10:14.51ID:oBHzUCYz0
>>295
三次元扱うと***pくらい何て事無いよね

302デフォルトの名無しさん (ワッチョイ 5fb3-1iEE)2017/11/13(月) 14:21:03.70ID:M4Fu1SNu0
構造体のメンバーの構造体のメンバーの構造体のメンバーのつもりで
ポインタのポインタのポインタとかいい気になって使ってたら、
エクセプションの嵐でワラタw

303デフォルトの名無しさん (ワッチョイ ffea-AgpC)2017/11/13(月) 14:23:47.67ID:rCuenLSS0
正しい指し先を格納してるかはコードの書いた奴の責任だからね
言語で保障してくれない

304デフォルトの名無しさん (スッップ Sd9f-6mXn)2017/11/13(月) 14:41:15.42ID:xUyRVn+md
有名な言葉思い出した。
プログラムは意図した通りには動かない、
書いた通りに動く。

ハードがまともに動いている前提でな。
タイマーLSIにall0ぶち込むなんてのはどこのマニュアルにも
書いてないバッドノウハウだろうに

306デフォルトの名無しさん (ワッチョイ df7f-TPjW)2017/11/13(月) 16:47:57.07ID:bTqh5JwP0
>>298
google testとかcpp testとか使えば?

307デフォルトの名無しさん (ワッチョイ 7f6e-TYjb)2017/11/14(火) 05:34:12.35ID:Qlty8abH0
三次元配列を扱うのに三重ポインタが出てくると思っている池沼がいるな

まあ、Cは次元とかオフセット計算が掛け算になるだけだからな。
何次元にしようとリニアな配列のままさ。

俺はポインタを諦めて、構造体配列のインデックスでリンクするリスト構造を作ったわ。

310デフォルトの名無しさん (ワッチョイ ffe7-y/Ph)2017/11/14(火) 17:36:47.28ID:ijEEO/Co0
誰かが書いてあって気になったんだけど
double a;
scanf("%if", &a);
ってf単体じゃないの?

311デフォルトの名無しさん (ワッチョイ 7fa2-Ud84)2017/11/14(火) 17:46:40.44ID:CqmbHxm/0
%lfじゃなくて?

312デフォルトの名無しさん (ワッチョイ ffe7-y/Ph)2017/11/14(火) 18:28:10.04ID:ijEEO/Co0
>>311
間違えたそれだ

313デフォルトの名無しさん (ワッチョイ df8a-AcTI)2017/11/14(火) 18:42:01.06ID:fdj+YHIz0
long double は別物として実装していない?

314片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd9f-dwJZ)2017/11/14(火) 18:56:38.89ID:Qnc8WtYFd
scanfでは、floatが%fで、doubleが%lfだ。printfでは区別がない。

315デフォルトの名無しさん (ワッチョイ 5f93-csDI)2017/11/14(火) 19:35:59.33ID:ZWJmr3O/0
cでUTF-8のファイル読み書きとデータの取り扱い方が分からないです
もしかしてできないのかな?

316デフォルトの名無しさん (ワッチョイ 5f76-Ud84)2017/11/14(火) 19:57:38.61ID:mdecs3M50
調べるとすぐにwikipediaが出てきたよ
https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%96%87%E5%AD%97%E3%81%A8%E6%96%87%E5%AD%97%E5%88%97#Unicode.E6.96.87.E5.AD.97.E3.82.BB.E3.83.83.E3.83.88

文字を「L"」で囲むとその文字を表現するワイド文字型の数値となる
Unicode文字セットでは、標準ライブラリの関数を使う前にロケール(地域)を設定する必要があり、また、Unicode用の関数を使う必要もある
// wchar_t型
wchar_t wc = L'a';     // wchar_t型の変数wcに文字L'a'を格納
_wsetlocale(LC_ALL, L""); // ロケール(地域)を設定する
wprintf(L"変数wcに格納された文字は%c", wc); //wcを文字として表示
wprintf(L"変数wcに格納された数値は%4x", wc); //wcを数値として表示

だから、文字セットはライブラリの範疇だからC言語スレで聞くなよ。
おまえが使ってるコンパイラのスレにでも行け。

318デフォルトの名無しさん (ワッチョイ df7f-TPjW)2017/11/14(火) 20:29:48.26ID:M89KBFlu0
何したいかによるんじゃね

素でもそれなりには扱えるし、不十分ならライブラリ探してもいい
どうしても無理なら慣れた文字コードに変換すればいいけど、こっちは一部文字情報が欠落するかもね

319デフォルトの名無しさん (ワッチョイ 5f93-csDI)2017/11/14(火) 20:58:01.97ID:ZWJmr3O/0
>>316
ありがたい
なんとかなりそう

320デフォルトの名無しさん (ワッチョイ 5f02-TYjb)2017/11/15(水) 06:11:40.94ID:1fEpam2j0
「配列へのポインタ」で嘘教えてるクソサイト

321デフォルトの名無しさん (ワッチョイ 7f87-ckd2)2017/11/15(水) 08:01:18.30ID:2LyFVpmC0
エンコーディングにかかわらず、ただのバイト列だからchar*でいい

322ビル・ジョブス (ワッチョイ 5fb3-bJtK)2017/11/15(水) 09:06:23.81ID:sfEUfVZe0
配列名は変更できない左辺値

323デフォルトの名無しさん (ワッチョイ 5f8a-gxuN)2017/11/15(水) 10:37:31.14ID:Iv8iuDMF0
次のC規格でそろそろ文字を扱う関数全てunsigned charに変更してくれないかな
utf8でもsjisでもだけど1バイト目の判定でいちいちキャストするのが不毛すぎる
賢明なプログラマならcharなどというプリミティブ型をそのままの名前で使わずちゃんと
typedef char str_t;
とかしてるはずだし、してない愚者はもうシステムもろとも切り捨てていいだろう
-1が欲しいために結局intに拡張されるんだからcharの時点では符号は不要なんだよ

C#みたいにbyte型作れば?
それかマルチバイト型

325デフォルトの名無しさん (ワッチョイ df23-uZPj)2017/11/15(水) 18:45:36.23ID:/fqUZ3V60
>>323
ハゲドゥ

326デフォルトの名無しさん (ワッチョイ ffa5-ySnM)2017/11/15(水) 20:52:19.99ID:edi6IXQo0
>utf8でもsjisでもだけど1バイト目の判定でいちいちキャストするのが不毛すぎる

いまどきそういうencoding依存のコードをそんなに頻繁に書いているんだとしたら
それ自体が不毛な気も。

327デフォルトの名無しさん (アウアウアー Sa16-0x9U)2017/11/16(木) 10:46:07.94ID:QxSeP1oQa
なんのために皆cやってるん?

生活の為だ。

329デフォルトの名無しさん (ブーイモ MMe5-bIo0)2017/11/16(木) 12:40:47.00ID:jvRl/N31M
文句たれてる暇があるなら1バイト目判定関数でもつくれば

ファイルサイズ測定

そのファイルサイズ領域を動的確保

そこにutf-8の文字列を順次格納

みたいなプログラム組んでるんだけど

ファイルサイズ/sizeof(wchar_t)と中身の文字の数って等しくないの?

331片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/16(木) 16:52:10.55ID:1Qzf60whd
UTF-8をそのまま扱うんなら、/sizeof(char)じゃね?
UTF-16やUTF-32に変換したならデータサイズが違うけど。

332デフォルトの名無しさん (ワッチョイ a9ea-wRfy)2017/11/16(木) 16:54:06.14ID:Gq05ZlN50
UTF-8 は データサイズから文字数を求めることはできない

333デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/16(木) 17:01:45.21ID:FIH9Q68l0
やっぱり1文字づつ読み込んでって文字数カウントするしかないか

334デフォルトの名無しさん (ワッチョイ a9ea-wRfy)2017/11/16(木) 17:06:37.43ID:Gq05ZlN50
>>333
記憶するのに必要なメモリの量は読み込んだバイト数でいいけど
「1文字に要するバイト数が可変」なので
「文字数」をカウントするとなるとそうせざるを得ないね

335デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/16(木) 17:15:42.23ID:FIH9Q68l0
>>334
そうします

336デフォルトの名無しさん (ワッチョイ 86e7-0Cia)2017/11/16(木) 17:29:40.48ID:NqJtZOMo0
暇つぶしで気になったんだけどC言語でもOSは作れるだよな、でも制御とかでコンピューターをちゃんと理解してないとやっぱ作れない?

337片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/16(木) 17:45:35.36ID:1Qzf60whd
FreeDOS、Linux、ReactOSなどのオープンソースなOSは、ソースが見られるから参考にするといい。
例えば、OSで並列処理をしたい場合は実際のCPUの知識が必要になるし、OSをCD-ROMからインストールしたい場合は、CD-ROMのファイルシステムの知識が必要になる。
OSを便利にしたいなら、それなりの知識が必要になるのさ。

338片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/16(木) 17:50:48.01ID:1Qzf60whd
モダンなOSは巨大化・複雑化しているから、一人ですべてを把握するのは難しい。
必要な機能を分割統治して、ライブラリなどによってブラックボックスとして実装するのが一般的。

339デフォルトの名無しさん (ワッチョイ 258a-axvV)2017/11/16(木) 18:09:46.26ID:j+aaxsF+0
>>336
OS自作入門とかいうそのものズバリな本があるよ
勉強目的なら割りとオススメ

340デフォルトの名無しさん (ブーイモ MMcd-axvV)2017/11/16(木) 18:10:16.42ID:NJ9DPXHtM
モダンでなくても、C単体ではシステムコールとCPUステータスに
関わる部分が書けないので、100%は不可能。
asm文とか使うなら別だけど。

341片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ f9b3-EXIO)2017/11/16(木) 18:10:19.85ID:++5Qg6gN0
なお、OSで商売したいなら、著作権のトラブルをクリアしないといけない。
マイクロソフトやグーグルのようにOSを売るのは至難の技だ。

342片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/16(木) 18:29:05.66ID:1Qzf60whd
パソコン向けじゃなければ、日本企業でもOSを開発しているところはある。
どんなOSを開発したい?

343デフォルトの名無しさん (ワッチョイ 6e81-S+5X)2017/11/16(木) 18:42:10.01ID:lNSovIGo0
OS劇場っぽいやつ

344デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/16(木) 20:19:28.30ID:FIH9Q68l0
あとメモリ上に読み込んだバイナリデータをwchar_tの文字列に変換することは可能でしょうか?

345デフォルトの名無しさん (ワッチョイ 86e7-0Cia)2017/11/16(木) 20:33:55.78ID:NqJtZOMo0
ただC言語の本にアセンブリ言語またC言語でもOS作成可能ってあったから気になっただけ
他の言語もコンパイルして機械語にするからC言語も間接的な言語しかないのかなって疑問に思っただけ

346デフォルトの名無しさん (ワッチョイ 41b3-wRfy)2017/11/16(木) 21:44:00.25ID:lLXMegrc0

347デフォルトの名無しさん (ワッチョイ 5e7f-tJ16)2017/11/16(木) 22:16:50.50ID:SDKqgqGy0
嘘ついてるかもだけど、wchar_tのたぐいって、使うとはまる奴じゃなかった?
文字列はcharオンリーな今日この頃。

cpu限定すれば、変換はいけるんじゃない?

348デフォルトの名無しさん (ワッチョイ 258a-axvV)2017/11/16(木) 22:50:06.96ID:j+aaxsF+0
ワイド文字だと場合によってはエンディアンを気にする必要があるのと
結局>>334は避けられないあたりを忘れなければハマることはないかと

349デフォルトの名無しさん (ワッチョイ aee9-cTf1)2017/11/16(木) 23:02:19.01ID:53UzEJx90
OSのコードを書くのってC言語のインラインアセンブリが使われてるんじゃないの?

350デフォルトの名無しさん (ワッチョイ 8203-Eq1o)2017/11/17(金) 03:13:34.00ID:HNipYc2I0
インラインなんかほとんど使わない
アセンブラが必要なところはガチのアセンブラを使う
量にして全体の数%ってとこ

351◆c9Xyadm.dk (ワッチョイ 259d-RuWE)2017/11/17(金) 08:21:02.54ID:5vMCLRTs0
フリーのOS作るため勉強するよ

>>339
あれかなり良いけどフロッピー使うし作るOSもかなり独特だからモダンな感じでもう一冊くらい書いて欲しい

353デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/17(金) 23:24:01.69ID:mCQOvNmw0
>>330
UTF-8 とは何か?
そして wchar_t 型とはなにか?

まずはこの2つについて徹底的に調べると君の頭は少し良くなると思う。

354デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/17(金) 23:32:51.13ID:mCQOvNmw0
>>336
OS作れるどころかOSを書くために作られたような言語がCだよ。UNIXな。

355デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/17(金) 23:36:03.75ID:mCQOvNmw0
>>342
超漢字はPCで・・・

mallocとかcallocでNULLが帰ってくる原因が分からない

メモリも十分あいてるしfree忘れもないのに

357デフォルトの名無しさん (ワッチョイ 41b3-wRfy)2017/11/18(土) 01:20:58.17ID:j81pJ1Fd0
要求している大きさが 0 とか?

>>357
流石に0ってことはないと思うわ

どこかでバッファオーバーランしてるのかなあ

360デフォルトの名無しさん (ブーイモ MM22-6+Yk)2017/11/18(土) 01:54:02.41ID:ravPC5RbM
0 allocでもnullは返さないはず

361デフォルトの名無しさん (ワッチョイ a980-axvV)2017/11/18(土) 02:00:44.06ID:xg8+Glw40
perrorくらいしてから書け

362デフォルトの名無しさん (ワッチョイ e92b-0hG5)2017/11/18(土) 03:52:04.95ID:V3PmucT60
おれの昔使ってたシステムでは、free忘れじゃなくて、mallocしたアドレスを2度freeしたり、もしくはmallocとは全然関係無いアドレスをfreeすると、
その後のmallocでおかしな動作をすることがあった

363デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/18(土) 06:02:16.21ID:4FIhP4xR0
>>358
本当か?

364デフォルトの名無しさん (ワッチョイ 25d6-Eq1o)2017/11/18(土) 06:22:35.45ID:mIICZMYh0
>>362
おそらく、そういう系だろうな
どこかで未定義の動作をやらかしてる

365デフォルトの名無しさん (ワッチョイ 02b3-ZIVp)2017/11/18(土) 07:00:43.85ID:ScUjvH+z0
>>361
それ関係ないやろ

366デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/18(土) 09:37:24.12ID:N5k0nP0W0
>>362
windowsなんだけど可能性あるの

367デフォルトの名無しさん (ワッチョイ 25d6-Eq1o)2017/11/18(土) 09:47:18.69ID:mIICZMYh0
ゲイツOSかどうかには関係ねえぞ
malloc/freeが空き領域をどのように管理しているかの実装の問題だ

368デフォルトの名無しさん (スッップ Sd22-9aoE)2017/11/18(土) 11:15:25.02ID:QN3bDN6ad
Winなら2重freeで死ぬんじゃね

2重freeだとその時点でエラーはかないの

370デフォルトの名無しさん (ワッチョイ 02b3-ZIVp)2017/11/18(土) 11:56:53.68ID:ScUjvH+z0

371デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/18(土) 12:20:10.83ID:N5k0nP0W0
解決した
不定のポインタに対して代入

変なとこ書き換えたせいでmalloccallocに失敗したみたい

372デフォルトの名無しさん (ワッチョイ e18a-uXfc)2017/11/18(土) 16:45:23.67ID:LYf4SJAt0
よかったな鼻から鼻毛が出る程度で

373デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/18(土) 20:07:48.43ID:N5k0nP0W0
また別の問題が・・・
メモリ上にある時は問題ないのにwprintfで表示するときに文字化けする

374デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/18(土) 20:09:57.58ID:4FIhP4xR0
>>373
「問題ない」とは?何で確認した?

375片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/18(土) 20:10:41.39ID:QiNK1qRtd
setlocaleした?

376デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/18(土) 20:37:46.90ID:N5k0nP0W0
>>374
visualstudioのメモリの中覗く奴
>>375
main関数でやってる

377片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/18(土) 20:39:12.15ID:QiNK1qRtd
ideoneに貼ってよ。

378デフォルトの名無しさん (ブーイモ MM22-6+Yk)2017/11/18(土) 20:49:06.97ID:ravPC5RbM
コンソールのロケールは?

379デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/18(土) 20:54:11.61ID:N5k0nP0W0
>>378
chcp 65001をsystem関数で実行してる

380デフォルトの名無しさん (ワッチョイ e92b-0hG5)2017/11/18(土) 21:10:22.92ID:V3PmucT60
setlocaleの引数は?

381片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/18(土) 21:47:57.26ID:QiNK1qRtd
system関数で出来る子プロセスは、別プロセスだから、現在の画面出力には影響しないと思う。

382デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/18(土) 21:48:38.17ID:N5k0nP0W0
解決した
関数の中で宣言したwchar_t の配列buff[20]のポインタを返してそれを表示してたんだけどそれがまずかったみたい

スコープから抜けた瞬間に解放されちゃうみたい

無知だったわ申し訳ない

383デフォルトの名無しさん (ワッチョイ a193-GczB)2017/11/18(土) 21:49:45.49ID:N5k0nP0W0
buffの中身をmallocで確保した所にコピーしたのを返すことにしました

384デフォルトの名無しさん (ワッチョイ a19f-RjUU)2017/11/18(土) 23:02:18.25ID:euoYf0NO0
>>382
GC言語使ってた奴がよくやるパターンだ。ドンマイ。

>>383
それだと後でいちいちfreeするのが面倒だろ。
普通は呼び出し元で buff[20] 確保してポインタを渡し、子関数内でそこに書き込む。
なおどうしても値返しで組みたければ、structならreturnで値返しできるからくるめばいい。(はず)

385デフォルトの名無しさん (ワッチョイ 419f-Eq+G)2017/11/19(日) 03:54:32.58ID:+NeHX1+n0
char* hoge(){
   char buff[20];
   strcpy(&buff[0], "何らかの処理");
   return &buff[0];
}

int main(int argc, char* argv[]){
   char* str = hoge();
   printf("%s\n", str);
   return 0;
}

多分、こうなってたんじゃないか?
配列は、自分で管理すべきだよねー。

void hoge(char* const str){
   strcpy(&str[0], "何らかの処理");
   return 0;
}

int main(int argc, char* argv[]){
/*  char str[20]; */
   char* ptr = nul;
/*  ptr = &str[0]; */
   ptr = (char*)malloc(sizeof(char) * 20);
   hoge(ptr);
   printf("%s\n", str);
   return 0;
}

386デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/19(日) 04:46:36.12ID:uKY6C0dJ0
意味は同じだし最適化されるからどうでもいいことではあるが、
そこの &str[0] は単に str と書くだけでいいんじゃないの?
見やすさの点からも受け取る部分が char *str ならそのまんま
str って書いておいた方が分かり易いと思うんだけど。

387デフォルトの名無しさん (ワッチョイ 86e7-zZYI)2017/11/19(日) 05:47:08.77ID:UDBnG5b80
c言語でこういう処理はやめておけ?

388デフォルトの名無しさん (ブーイモ MMf6-6+Yk)2017/11/19(日) 09:57:18.82ID:v7NTUoVSM
初心者はこれだけ守ってれば良いかと

処理対象のメモリは呼び出し元で確保、alloc-freeで処理をはさむ
処理の戻り値は基本intでエラーコードを返す
ローカル変数は16k未満、可変長配列は使わない

>>387
そんなことはない

389デフォルトの名無しさん (ワッチョイ 82a4-Eq1o)2017/11/19(日) 10:16:36.97ID:Rb2sIcHm0
> 処理の戻り値は基本intでエラーコードを返す

malloc先生やprintf先生を見習ったら違反だな


> ローカル変数は16k未満、可変長配列は使わない

何だそのマジックナンバーは??

390デフォルトの名無しさん (ワッチョイ a193-oo0Z)2017/11/19(日) 10:34:41.84ID:YNZopTj60
malloc に限らんけど、ポインタを返す関数は
失敗の場合にNULLを返すってのはまぁ基本だね。
線形リストの探索、見つからなければNULL、みたいに。

printf の返り値はintだから一応は >>388 の方針通りじゃろ。
成功なら非負の値、失敗したら -(エラーコード) が返る、
と決めておけば何かと使いやすいわね。

391デフォルトの名無しさん (ワッチョイ 82a4-Eq1o)2017/11/19(日) 10:42:05.59ID:Rb2sIcHm0
>>390
ちょw
printfの仕様を知らんのか

392デフォルトの名無しさん (ワッチョイ 7d7f-GXP8)2017/11/19(日) 10:59:03.36ID:KR+9hAut0
mmapはNULL返さねーけどな

393デフォルトの名無しさん (ワッチョイ 02b3-ZIVp)2017/11/19(日) 11:41:24.76ID:lBNHVI9l0
エラーはnullとか-1とかの正常時には戻らない値
エラーコードは errno 見ろよ
って言うのが以前のお約束だった気がするけど

394デフォルトの名無しさん (ワッチョイ 6e81-S+5X)2017/11/19(日) 12:18:44.42ID:qf87F9y70
printf("%d",printf("1*2*3="));

395デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/19(日) 13:05:21.82ID:uKY6C0dJ0
printf() の man page 見てもエラーの時は負の値を返すとしか書いてなくて errno に何か入るとは書いてない。
まあ、実際には中で putchar() と同等な事をするだろうからその中で使われる write() で何か書かれるとは
思うがその辺は保証されていないので使えない。(書き込み時のエラーではないかも知れないしな)。
GNU の asprintf() もエラー時は -1 を返すのみで errno については何も書いてない。

それと snprintf() のような結果を書き込むバッファの大きさを指定できるやつはバッファを使い切った場合の
エラーの返し方が違う。

条件が
文字列の長さ
文字列比較
でソートしたくて2回forで回してます

流石にこれでは件数が増えたときにとてつもなく遅くなるので1回のforだけでやる方法を教えてください

397デフォルトの名無しさん (ワイモマー MM05-harS)2017/11/19(日) 16:19:33.08ID:lEYmgXHFM
>>396
普通にソートすれば、長い方が後に来るんじゃね?

398デフォルトの名無しさん (ワッチョイ 41b3-wRfy)2017/11/19(日) 16:32:59.11ID:NI05LLAC0
条件を変えて2回まわしたら1回目のソートは(ほぼ)意味がないんじゃない?
(順位を保つソート法なら 多少意味が出てくる: qsort はその保障はない)

qsort の srot_cmp の記述で
比較すべき それぞれの要素 c1 と c2 を多重に比較すればいい

・「文字列長さ」で比較し 違うなら大小関係を返す→
 ↓
・(上の比較が等しいので)「文字列」比較し 違うなら大小関係を返す→
 ↓
 :
 ↓
・(上の比較が等しいので)等しいと返す

これならソートは1回だけ

399デフォルトの名無しさん (ワッチョイ e1b3-FOlU)2017/11/19(日) 18:57:37.27ID:LiOPGVVq0
https://i.imgur.com/rkQ9ns8.jpg

この2.の(2)の総ステップ数って
f=1で1回、for文内でn回で、T(n)=n+1
であってる?
なんか授業でやったときは3n+4だったか4n+3だったかそんな数字だったと思うんだが求め方がよく分からん

400デフォルトの名無しさん (ワッチョイ 919f-RuWE)2017/11/19(日) 19:18:57.18ID:uKY6C0dJ0
>>399
f=f*i の部分は四則演算1回と代入1回だから2ステップなのでは?

401デフォルトの名無しさん (ワッチョイ feeb-MUuo)2017/11/19(日) 19:34:22.94ID:H23Xb2RQ0
f=1 代入1回
for(i=1;i<=n;i++) -> for(i=1;i<=n;i=i+1) 代入1回; 条件判断n+1回; 四則演算n回、代入n 回
f=f*i; 四則演算n回、代入n回

なので合計 5n+3 ステップかな、i++ を1ステップとする処理系なら 4n+3 とか。よくわからんけど

>>401
いまどきオプティマイザあるからどっちも同じアセンブルコードになる悪寒

403デフォルトの名無しさん (ワッチョイ a9ea-wRfy)2017/11/20(月) 14:28:22.74ID:8OH1W8zR0
i++ を1ステップ勘定するか 2ステップ勘定するかは悩ましいけど
分解して 四則演算の1 + 代入の1 計2ステップ の見積もりするのが妥当なんかな
題中にインクリメント演算についてのステップ数は明示されてないし

404デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/20(月) 17:25:41.15ID:ZHV8ZCmh0
i++みたいにハード的にありえない(メモリは加算機能を持たない)ことは
マイクロコードで実現しているわけで、1ステップなわけがない

405デフォルトの名無しさん (ワッチョイ 6e81-S+5X)2017/11/20(月) 17:45:57.87ID:8KCSU74o0
狙いは記述の簡潔化

単体のi++は無駄だから++iにしろってばっちゃが言ってた

407デフォルトの名無しさん (JP 0H29-axvV)2017/11/20(月) 18:09:22.43ID:uYx1UAMqH
じっちゃんはそんな差は最適化で消え失せるって言ってたよ

408デフォルトの名無しさん (ワッチョイ 82d2-vi7v)2017/11/20(月) 19:51:59.87ID:glF63Wia0
i += 1;に統一しろや

409デフォルトの名無しさん (ワッチョイ 068a-v84M)2017/11/20(月) 20:13:15.58ID:WOKp52/B0
つまりC++死ねと言う事で

410デフォルトの名無しさん (ワッチョイ e260-v9tW)2017/11/20(月) 20:44:27.03ID:Y8ntE/6M0
暗号の話で面白いネタありませんか?

411デフォルトの名無しさん (ワッチョイ 0646-FOlU)2017/11/20(月) 23:46:50.09ID:iMFZcv9G0
https://i.imgur.com/DnscbT9.jpg
>>399だけど、これが一応正解らしい

412デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/20(月) 23:56:46.22ID:ZHV8ZCmh0
おまえ自身は何も言わないわけか

413デフォルトの名無しさん (ワッチョイ e92b-0hG5)2017/11/21(火) 00:13:10.99ID:j0/qDr3U0
++は対象がレジスタに乗ってるときに1命令だろ
とくにアドレスレジスタの場合に *p++ をポストインクリメントレジスタ間接アクセス命令にそのまま置き換えられるから、
オプティマイズがまだ発達してなかったころに重宝したはず

414デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/21(火) 06:23:40.67ID:uBkGRn7P0
そのバヤイは0.5命令だね
* と ++ を同時並列でやるわけで

415デフォルトの名無しさん (ワッチョイ a193-oo0Z)2017/11/21(火) 06:30:17.80ID:VCAIytbF0
>>411 実際のマシンとは関係のない、問題のための問題だから
問題を作った人の答えが正解というルールは仕方ないとして…。

i++ が1ステップなのか2ステップなのか、という疑問が出るスレッドで、
f = f*i はまとめて1ステップです、という解説が現れるのは予想外だったわ。
f*i が四則演算で1ステップ、fへの代入でもう1ステップ、と思うよね。

416デフォルトの名無しさん (ワッチョイ 4976-RVzq)2017/11/21(火) 07:23:37.68ID:V9LM9CF/0
単純に行数で示す場合もあるし
いろいろだよ

重要なのは計算オーダーと実測値
ステップ数は計算オーダーを見積もる為の道具で
定数倍はわりとどうでも良い

計算量をもっと正確な値を知りたい時は
加減算○回、乗算○回、除算○回
など、より具体的な値とする

417デフォルトの名無しさん (スップ Sd82-LOf1)2017/11/21(火) 09:57:32.04ID:6BA+Ife8d
末尾に/が入っていたとき全て削除したいのだけどどうすれば簡単に実装できるだろうか
データはcharの配列に入っている

ex
aaa.txt
aaa.txt/→aaa.txt
aaa.txt/////→aaa.txt

418デフォルトの名無しさん (スップ Sd82-LOf1)2017/11/21(火) 10:04:28.94ID:6BA+Ife8d
あとsystem関数の戻り値の判定に悩んでます
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/system.3.html

上記参考にしたら四つのケースに別れていて
下二つはwexitなどのマクロで取得可能
上二つの内ひとつはnullチェックで弾くこと可能
残りは子プロセス作成失敗の-1で網羅できてると考えているのだけど間違ってるのかな?

やりたいことは
system関数のコマンドライン実行したアプリのステータスコードを取得したい。そのためにマクロ使ってる

ただ子プロセスの取得云々の前にsystemの結果判定必要なんでは?と指摘を受けて修正してるのだけどsystemの返す値がさっぱりわからなくて困ってます

419デフォルトの名無しさん (ワッチョイ c58a-cb0a)2017/11/21(火) 10:38:25.75ID:IvGEWozr0
>>417
自分ならstrtok関数を使う

420デフォルトの名無しさん (スップ Sd82-LOf1)2017/11/21(火) 10:49:16.27ID:6BA+Ife8d
>>419
ごめん略してたけどもフォルダもあるんだ
/xxxx/yyyy/aaa.txt
みたいな
その関数だとこのパターンは処理できない?できる?

俺様専用脳内マシンは1ステップ命令に変換するんだから1ステップなんだ!!

アホらし。

422デフォルトの名無しさん (ワッチョイ c58a-vU7N)2017/11/21(火) 10:58:18.95ID:0pj8KC/M0
>>420
末尾の/を取り除きたいのか、頭のファイルパスを取り除きたいのか、よく分からないけど、/を区切り文字として文字列を分割さえしてしまえばどうにでも出来る

423デフォルトの名無しさん (エーイモ SEed-Aqvu)2017/11/21(火) 11:41:02.99ID:qTGygbeTE
gcc -lライブラリ名 hoge.c

stdio.hと同じフォルダに自分が使いたいヘッダーファイルが存在してるのに
いちいち-lライブラリ名ってしないと参照できないんです
どうしてstdio.hは-lstdioって書かなくても使えるのに自分がインストールしたヘッダーファイルはいちいち-lで指定しないと使えないんでしょうか?
すか?

424デフォルトの名無しさん (スッップ Sd22-9aoE)2017/11/21(火) 12:27:08.32ID:ylDmWfHBd
>>417
if(配列[strlen(配列)-1]=='/') 同=0;

をループで回せ。

425デフォルトの名無しさん (スプッッ Sdca-RVzq)2017/11/21(火) 13:06:11.86ID:b7HcaLG8d
>>424
うわっ
最悪のアルゴリズム

426デフォルトの名無しさん (スプッッ Sdca-RVzq)2017/11/21(火) 13:13:57.97ID:b7HcaLG8d
null-endと仮定するなら普通にこれで良い

int i;
for (i = strlen(配列) - 1; i >= 0; i--)
if (配列[i] != '/') break;
配列[i+1] = '\0';

427デフォルトの名無しさん (ワッチョイ c58a-cb0a)2017/11/21(火) 13:34:45.06ID:IvGEWozr0

428デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/21(火) 14:23:21.10ID:uBkGRn7P0

429デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/21(火) 14:47:42.58ID:uBkGRn7P0
>>423
スクリプトかバッチを作ればいい
たとえばmycc.batというファイル名で
gcc -lライブラリ名 %*
と書き込んでおいて
mycc hoge.c
とやる

430デフォルトの名無しさん (ワッチョイ e18a-H2sc)2017/11/21(火) 19:27:53.90ID:5ScqS7z90
>>423
標準ライブラリオブジェクトはスタートアップファイル(crt0)に組み込まれていて自動的にリンクされる
標準以外のライブラリオブジェクトは明示的にリンクしないと使えない

>>415
> f*i が四則演算で1ステップ、fへの代入でもう1ステップ、と思うよね。
f と i がレジスタなら大抵のプロセッサで1ステップだと思う

432デフォルトの名無しさん (ワッチョイ feeb-MUuo)2017/11/21(火) 21:45:59.93ID:EZGPgPj40
まあ、先の問題については、ステップの厳密な定義が読み取れないし。
回答者の説明に矛盾がなければ○でいいと思うわ。
それでも誤答とされてしまったら、出題者がウンコだと思って忘れるレベル。

433デフォルトの名無しさん (スップ Sd82-LOf1)2017/11/21(火) 22:17:44.53ID:6BA+Ife8d
>>428
やはり正規表現か

434デフォルトの名無しさん (ワッチョイ 7d7f-GXP8)2017/11/21(火) 22:26:46.51ID:6oQfsQ1l0
スクリプトとかならまだしも
Cで末尾の/削るためだけに正規表現とか持ち出すのは馬鹿だと思う

435デフォルトの名無しさん (ワッチョイ 6e81-RjUU)2017/11/21(火) 22:38:13.64ID:IS6cxUc80
replace("/$","");//うろおぼえ
なんでよ簡潔にかけて最高じゃないか
正規表現は心の友
すぐ忘れるけど

436デフォルトの名無しさん (ワッチョイ 6e81-S+5X)2017/11/21(火) 22:48:24.18ID:n0bc2/yX0
>>435
末尾に連続する'/'が有ったら、消さないと

437デフォルトの名無しさん (ワッチョイ 6e81-S+5X)2017/11/21(火) 23:25:32.21ID:n0bc2/yX0
http://codepad.org/EdvPBWAl

こんな感じか?
静的文字列の時は編集可能な形で渡して

438デフォルトの名無しさん (ワッチョイ 7d7f-GXP8)2017/11/21(火) 23:33:58.03ID:6oQfsQ1l0
>>435
>>428はGnuWin32って名前から察するにPOSIXのregexだろ
置換なんてないから、正規表現コンパイルして検索して自分で書き換えるんだぞ

正規表現の置換を呼び出し一回で済ませられるような関数が
ANSIとかPOSIXにあるなら良いけど、そうじゃないだろ

439デフォルトの名無しさん (ワッチョイ 6e81-RjUU)2017/11/21(火) 23:45:43.58ID:IS6cxUc80
std::regex_replaceってちがうんか?

440デフォルトの名無しさん (ワッチョイ 7d7f-GXP8)2017/11/21(火) 23:48:20.93ID:6oQfsQ1l0
は?
C言語のスレでC++を持ち出してきて何が言いたいの?

441デフォルトの名無しさん (ワッチョイ 6e81-RjUU)2017/11/21(火) 23:48:43.70ID:IS6cxUc80
なんてこったい

442デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/22(水) 00:18:19.23ID:CvPbHYJg0
>>417
こんなのはどうかなあ。
char *s が元になる文字列へのポインタ。p は char *p。

for (p = strrchr(s, '/'); p && p >= s && *p == '/' && ! *(p + 1); *p-- = '\0');

443デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/22(水) 01:37:39.91ID:CvPbHYJg0
>>418
こんな感じかねえ。

if (cmd) {
 int s = system(cmd);

 if (s == -1) {
  // 子プロセス作成失敗またはステータス取得失敗

 } else if (WIFEXITED(s)) {
  // 子プロセスは正常に終了した。

  int es = WEXITSTATUS(s);

  // es の内容が子プロセス側での exit(es) または return es
  // これはたいてい 0 以外がエラーになっている。0なら成功。
 } else if (WIFSIGNALED(s)) {
  // 子プロセスはシグナルで中断して終わった。
  // (人が Ctrl+C をキーから押したとか、kill したとか、プログラムバグってて core dump したとか 0 で割ったとか)
  // シグナルの意味は signal(7) の man page 見るとわかる。

  int sg = WTERMSIG(s);
  // sg にシグナル番号が入る。
 }
}

444デフォルトの名無しさん (ワッチョイ 919f-8CrJ)2017/11/22(水) 02:48:21.29ID:CvPbHYJg0
>>417
試しに正規表現使うとどうなるか作ってはみたが、あまり意味ないなw
https://paiza.io/projects/n8RUPm6x15vg2r0-i-xc0g

445デフォルトの名無しさん (ワッチョイ a193-oo0Z)2017/11/22(水) 06:57:55.87ID:ehTxx6H60
>>431
f = f*i を f *= i と解釈して1ステップか、それもありうる。

>>445
それもありうるって言うかそうでない処理系の方が珍しいだろ

447デフォルトの名無しさん (ワッチョイ 4976-RVzq)2017/11/22(水) 08:30:23.30ID:OmrPXxhs0
元の問題が、演算と代入とそれぞれ1ステップって書いてあるんだから
そこを議論しても意味がない

これ教えてくれ
https://i.imgur.com/fK9MpEP.jpg

449デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/22(水) 15:08:01.31ID:qJn/S+Fz0
面倒くせえ奴らだなあ。。。
//aho.cpp
extern "C" char* regex_replace(char* str, size_t n, char const* pat, char const* put) noexcept
{
try
{
string buff{str};
buff = regex_replace(buff, regex{pat}, put);
strncpy(str, buff.data(), n);
return str;
}
catch(...) {}
return nullptr;
}

450デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/22(水) 15:08:31.73ID:qJn/S+Fz0
//baka.c
char* regex_replace(char*, size_t, char const*, char const*);

int main()
{
char buff[100];
while(fgets(buff, 100, stdin))
if(regex_replace(buff, 100, "/+$", "")) puts(buff);
else puts("error");
}

451デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)2017/11/22(水) 15:08:55.87ID:qJn/S+Fz0
rem test.bat
cl baka.c aho.cpp /EHsc && baka

ったく世話の焼ける(ぶつぶつ

ありがとうございます!

453デフォルトの名無しさん (ワッチョイ 02ab-RuWE)2017/11/22(水) 17:50:15.00ID:MV3BmYS20
初心者です、教えていただけませんか?
大文字の配列を小文字にするコードなのですが

1 int main(){
2 int i;
3 char str[]={'A','B','C'};
4
5 for(i=0;i<3;i++)
6 {
7 str[i]=str[i]+'a'-'A';
8 }
9 return 0;
10
11 printf("答え \n");
12 for(i=0;i<3;i++)
13 {
14 printf("%c\n",str[i]);
15 }
16 return 0;
17 }
を実行すると 「Info: Nothing to build for Hello」 となります。
5行目から9行目までを削除して実行すると答えは大文字で「ABC」となります
5行目から9行目の文法がおかしいと思うのですが何処がおかしいのかわかりません
誤っている個所をご指導頂けないでしょうか?よろしくお願いします。

454片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd22-EXIO)2017/11/22(水) 17:52:20.48ID:QYl/HC3Nd
>>453
9行目のreturn 0;でmainから制御を戻しているから、以下は実行されない。

455デフォルトの名無しさん (ワッチョイ 02ab-RuWE)2017/11/22(水) 18:11:10.14ID:MV3BmYS20
>>454
ありがとうございます。とても感謝してます。
戻り値とmain関数の関係を調べてみます。
大変にありがとうございました。

456デフォルトの名無しさん (ワッチョイ 02ab-RuWE)2017/11/22(水) 18:14:07.74ID:MV3BmYS20
>>455
9行目のreturnでmain関数が終わってしまっていたのですね
ありがとうございました!

ちよわw
机上デバッグなりステップ実行なりすりゃいいじゃんみたいなんばっかりだな。

>>447
正解は>>411らしいしまともなら知識を持ってたら普通に同意する内容だし

>>453
とりあえず
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1509780815/
に行けよ...

mmap の page fault で割り当てられたページフレームってスワップアウトとか発生した時にドロップしたりしますか?

461デフォルトの名無しさん (ワッチョイ 879f-UVmO)2017/11/23(木) 06:33:31.65ID:ZFTBiu2d0
君の言っている事がよくわからない

>>461
mmap で割り当てた物理メモリは munmap、プロセス終了時以外にも解放される契機はあるのでしょうか?

madvise の MADV_SEQUENTIAL で解放するとか書かれてますが、ソース見てみるとフラグ的にはノーマルと変わらない処理してるみたいなんですよね

463デフォルトの名無しさん (ワッチョイ 07b3-gKf3)2017/11/23(木) 09:34:44.63ID:NGg/SBGT0
MMUにもよるんじゃない

ディスクリードがあるのでmmuにはよらないかと

465デフォルトの名無しさん (ワッチョイ a77f-8Ex9)2017/11/23(木) 10:51:34.50ID:ijGzvwTZ0
結局何を聞きたいの?
mmapで割り当てた仮想メモリが解放されるかどうかであれば、解放されない
物理メモリの話なら解放される

madviseが実際に指示通りに動くかどうかは実装次第だけど
一応LinuxとかはMADV_DONTNEEDで物理は解放できる

というか、これはC言語の話じゃないから各環境のスレで聞け

>>465
mmap 時の物理メモリ使用量とその変化を知りたかったんです。
結局非DIRTYなら物理メモリは解放されることあるんですね。
ありがとうございます

一応linuxの場合で考えてました
ホットで適当なスレが見当たらず、一番mmap使いそうなcスレでいいかと
失礼しました

>>466
一応一般的には
非dirtyならまだ物理メモリは割り当てられてない、が正しい
物理メモリの再利用についてはdirtyでもswapがあれば行われる(そのためのswap)

468デフォルトの名無しさん (スプッッ Sdbb-T4vC)2017/11/24(金) 14:08:06.79ID:/RqU0h4Pd
コーディングの仕方的な教材になる本あるかな?
コーディングとはこうやって沿っていくと良いよ的な本
それを読んでからテクニックの本を読もうとしてる(effective)

469デフォルトの名無しさん (スッップ Sd7f-STtB)2017/11/24(金) 15:12:46.00ID:bYdw4irrd
>>468
まず「リーダブルコード」読んどけ。

470デフォルトの名無しさん (ワッチョイ a77f-8Ex9)2017/11/24(金) 15:20:30.73ID:W0y6TqiA0
>>467
つまりreadonlyでmmapし場合、dirtyにならないから物理は割り当てられないと
すごいな

471デフォルトの名無しさん (ワッチョイ c761-DWFp)2017/11/24(金) 16:33:20.57ID:/I02is1j0
割り当てられてないメモリーにアクセスするとページフォルトが起きてから
OSが割り当てる遅延ファイルマッピングの事をいいたいんじゃないのかな。

DMA涙目だな

473デフォルトの名無しさん (JP 0H4b-9mpY)2017/11/24(金) 17:56:03.88ID:37SoWLJsH
ポインタのことなんだけど、*pt と pt みたいに同じ名前で宣言したら、別々の変数になる?

474デフォルトの名無しさん (ワッチョイ 5fb3-CDhT)2017/11/24(金) 18:18:10.79ID:OpHoTsuS0
>>473
まずはやってみろ

475デフォルトの名無しさん (アウアウアー Sa4f-9mpY)2017/11/24(金) 18:23:00.58ID:LzLaFdMta
>>474
たしかに
家帰ったらやってみる

つか、どうしつて区別すると思うんだ?

477デフォルトの名無しさん (ワッチョイ c780-ygtF)2017/11/24(金) 19:44:50.18ID:4DoLJt5P0
*も含めて変数名と思ったんじゃね?

478デフォルトの名無しさん (ブーイモ MMcf-V9cG)2017/11/24(金) 20:43:22.73ID:yshQtEuUM
>>466
まあここでいいと思うぞ

madviseはあまり関係ない
落とされる前提でポリシー決めてるだけ
MAP_SHAREなら解放される可能性がある
MAP_LOCKEDで解放されない

他のフラグは知らん、試せ

479デフォルトの名無しさん (ワッチョイ 078a-9mpY)2017/11/24(金) 21:30:01.83ID:Mh0dfdoe0
これまた初歩的な質問なんだけど、intとdoubleとかで変数名が衝突したらどうなる?

480デフォルトの名無しさん (ワッチョイ 07b3-3T+V)2017/11/24(金) 21:34:30.17ID:oQOGHeAz0
衝突してるぞエラーになる

481デフォルトの名無しさん (ワッチョイ 5fb3-CDhT)2017/11/24(金) 22:01:24.27ID:OpHoTsuS0

482デフォルトの名無しさん (ワッチョイ 078a-9mpY)2017/11/24(金) 22:54:20.18ID:Mh0dfdoe0
確かにエラー出るんだけど、できないってことでいいの?

483デフォルトの名無しさん (ワッチョイ 5fe1-VLot)2017/11/24(金) 23:29:26.60ID:LzKIf/Vy0
外のスコープで定義されたものと名前が衝突した場合は内側の方が有効になり
同じスコープで衝突した場合はエラーになる

cでは出来ない。という仕様

485デフォルトの名無しさん (ワッチョイ 078a-9mpY)2017/11/25(土) 00:53:38.80ID:JCp8dCym0
サンガツ

486デフォルトの名無しさん (ワッチョイ bfe7-3a+g)2017/11/25(土) 06:12:18.91ID:KGlQ3mpn0
同じ変数名でもスコープが違えば出来るよ。

487デフォルトの名無しさん (ワッチョイ c761-DWFp)2017/11/25(土) 06:35:32.53ID:H7G0IpRv0
int* ptの意味は意味int *ptだよ。
ptをデリファレンス演算子で評価したらint型になるよという宣言だよ。

488デフォルトの名無しさん (ワッチョイ 0793-C/lT)2017/11/25(土) 08:28:27.42ID:InRb1JFJ0
変数名が型ごとに独立した名前空間に属する、という言語があるのかな。
原理的には可能だと思うけど、えらく組みにくそうな気がする。
「型だけが異なる同名の変数を使わない」みたいなコーディング規約を強制されそう。

489デフォルトの名無しさん (ワッチョイ c761-DWFp)2017/11/25(土) 08:44:13.26ID:H7G0IpRv0
構造体のネームスペースみたいに
全部の変数に型名をつけるようになるだろうな。

490デフォルトの名無しさん (ワッチョイ 07b3-3T+V)2017/11/25(土) 08:47:32.78ID:t3NLc0dP0
かえって使いづらい言語になるね

491デフォルトの名無しさん (ワッチョイ 0771-pnlc)2017/11/25(土) 09:32:16.56ID:87Khqx810
変数の寿命はできるだけ短くしましょう

492デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/25(土) 13:36:36.33ID:O9uPrWP7d
リーダブルコーディングとeffective以外に本を探してるのだけど他にあるかな?

493デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/25(土) 14:31:12.80ID:99QBz+fh0
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、2006

494デフォルトの名無しさん (ワッチョイ 0771-pnlc)2017/11/25(土) 16:19:42.50ID:87Khqx810
C実践プログラミング

495デフォルトの名無しさん (スッップ Sd7f-STtB)2017/11/25(土) 16:51:39.14ID:o/Q+Vng/d
っコードコンプリート

496デフォルトの名無しさん (ワッチョイ 879f-UVmO)2017/11/25(土) 17:02:06.40ID:DmTU06Rg0
>>488
perlは$aと@aと%aが違うけどな。型と言うよりはスカラか配列かハッシュかの違いだな。

497デフォルトの名無しさん (ワッチョイ 5f60-2JzH)2017/11/25(土) 17:03:44.75ID:ROI3Hzdd0
>>493
ネットで MISRA の詳しい解説はありませんか?


499デフォルトの名無しさん (ワッチョイ bfe7-enc/)2017/11/25(土) 17:24:25.43ID:6ctJHfBp0
処理重視なら毎回毎回変数宣言って処理が鈍くなるよな?

500デフォルトの名無しさん (ワッチョイ 7f81-nM14)2017/11/25(土) 17:58:52.01ID:AcXq78AE0
インタプリタじゃないです

501デフォルトの名無しさん (ワッチョイ 07b3-3T+V)2017/11/25(土) 17:59:36.62ID:t3NLc0dP0
C++でもないのでコンストラクタ走るわけでもないです

スタック操作なんか関数呼び出し時にまとめてやってるから、どこで宣言しようが処理速度は変わらないけどな。

503デフォルトの名無しさん (ワッチョイ 5f60-2JzH)2017/11/25(土) 18:34:37.15ID:ROI3Hzdd0
>>499
その程度ならコンパイラが良きに計らってくれますよ

504デフォルトの名無しさん (ワッチョイ 6755-P8Uf)2017/11/25(土) 19:25:41.27ID:Hc9rYyD70
for文の中の変数宣言って外で行うよりオーバーヘッド大きいの?

505デフォルトの名無しさん (スッップ Sd7f-STtB)2017/11/25(土) 19:29:40.95ID:o/Q+Vng/d
>>504
言語上ブロック内で有効なだけで、
他の自動変数同様スタックに余分にとられるだけだからまず変わらない。

506デフォルトの名無しさん (ワッチョイ 879f-UVmO)2017/11/25(土) 20:41:30.63ID:DmTU06Rg0
>>499
宣言だけ?メモリ確保とかは自分でやらずに?
だったら最初に確保する一回分だけの時間しか掛からないと思うぞ。

507デフォルトの名無しさん (ワッチョイ 879f-lrN+)2017/11/25(土) 20:51:32.38ID:L+SRk42p0
あ、C++みたいな言語でクラスの中でメモリ確保してデストラクタで解放やってるような場合は
ループするブロックの中で宣言したら最低でもメモリ確保と解放でループの回数分時間
掛かっちゃうだろうけど、C言語にはそういうのはないので掛からない。

508デフォルトの名無しさん (スッップ Sd7f-Xp/k)2017/11/25(土) 20:59:06.21ID:XP2bT693d
動的に確保というのはあるだろうが、
俺を意識した使い方するだろうし

509デフォルトの名無しさん (ワッチョイ bf8a-S11E)2017/11/25(土) 21:27:39.55ID:FWelsGSm0
VLAはスコープの出入りで伸縮だと思うが

510デフォルトの名無しさん (ワッチョイ 879f-UVmO)2017/11/25(土) 22:01:34.55ID:DmTU06Rg0
ああ。そうか。これか。
https://qiita.com/raccy/items/bfcb62086c5f027d57b6
C11のこと忘れてた。

511デフォルトの名無しさん (ワッチョイ bfe7-enc/)2017/11/26(日) 16:09:01.86ID:EJqMiwXm0
>>506
for文とかの中で宣言してやったりすると毎回確保するから処理の速度が遅くなるってどっかで書いてあった
なるべく何回も宣言しないで中身を変える処理をする方が処理がはやくなるとか言ってた

512デフォルトの名無しさん (JP 0Heb-DWFp)2017/11/26(日) 16:12:10.13ID:xKw15WCKH
そのレベルの理解なら気にする必要はない
そもそもCを使う必要もない

513デフォルトの名無しさん (ワッチョイ 5fb3-CDhT)2017/11/26(日) 16:15:46.29ID:pGcZHtwF0
>>511
> for文とかの中で宣言してやったりすると毎回確保するから処理の速度が遅くなるってどっかで書いてあった
よほどショボいコンパイラでない限り気にする必要はない

> なるべく何回も宣言しないで中身を変える処理をする方が処理がはやくなるとか言ってた
そう言うアホな本は窓から捨てるべき

514デフォルトの名無しさん (ワッチョイ bfe7-enc/)2017/11/26(日) 16:46:48.52ID:EJqMiwXm0
>>513
それは中の処理が大量になっても大丈夫なのか?
20行、30行ぐらい長い処理でも?

515デフォルトの名無しさん (ワッチョイ 07b3-3T+V)2017/11/26(日) 16:52:44.80ID:14BIGute0
宣言と長い処理って何処に関連が?

初期化の右辺がすんげー長いというのは
変数宣言がループの中にあろうが変数宣言をループの外に追い出しても
同じで必須コストだしそこは論点じゃないよね

516デフォルトの名無しさん (ワッチョイ bfe7-enc/)2017/11/26(日) 17:10:19.17ID:EJqMiwXm0
>>515
https://qiita.com/EqualL2/items/472035c3f0d3e34734a8
これのループ内での変数宣言ってやつのことを知ってそうしたんだけど

517デフォルトの名無しさん (ワッチョイ 07b3-3T+V)2017/11/26(日) 17:15:43.31ID:14BIGute0
>>516
全部ヒントに「コンパイラが最適化でやる」って書いてあるし
逆にそのコストが重いようならもっと根本的な手入れ(アルゴリズムの見直しとか)が必要だし

518デフォルトの名無しさん (ワッチョイ bfe7-enc/)2017/11/26(日) 17:20:34.69ID:EJqMiwXm0
なるほどなるほど、アルゴリズムの問題か納得した

519デフォルトの名無しさん (ワッチョイ 7f81-nM14)2017/11/26(日) 17:23:40.85ID:woDc+4Yf0
C言語じゃなくてC++でのクラス変数じゃないの?

520デフォルトの名無しさん (ワッチョイ 5fb3-CDhT)2017/11/26(日) 17:29:05.50ID:pGcZHtwF0
>>514
測定して本当にそれが問題になってるとわかった時に考えればいい

521デフォルトの名無しさん (ワッチョイ 879f-lrN+)2017/11/26(日) 17:57:37.44ID:YtJM5Nau0
>>516
「実際のところ」と書いてある所をよく読むべき。

522デフォルトの名無しさん (スップ Sd7f-T4vC)2017/11/27(月) 04:22:16.28ID:vYl0vGfCd
コードとは直接関係はないけどメモリリークのテストってlinuxだとどうやるのだろう?

523デフォルトの名無しさん (ブーイモ MMeb-V9cG)2017/11/27(月) 07:40:08.21ID:fAclYYwOM
>>522
valgrind か LeakSanitizer


525デフォルトの名無しさん (ワッチョイ 079f-V5k9)2017/11/27(月) 13:20:55.85ID:HfjV3qo40
脳内ループ最適化かー。結構良く目にするのは
int i;
for(i = rows; 0 < i; i―)
Hoge;

だったりするけど
組み込みでも、このくらい最適化かかるのにねぇ

526デフォルトの名無しさん (スップ Sd7f-T4vC)2017/11/27(月) 19:33:17.36ID:vYl0vGfCd
>>523
>>524
ありがとう調べてみる
別件なのだけど、systemの子プロセス戻り値をみるときって

ret=system(コマンド)
if(wifexisted(ret))
{
wexitstatus(ret)
}

これだけで良い?エラー処理ってほかにいるかね?
wifsignaledとかwtermsigとかいるのかね?ってなってるんだ
その他のマクロについても....

527デフォルトの名無しさん (アウアウカー Sadb-i88m)2017/11/27(月) 20:30:19.45ID:clAY2uWxa
>>526
systemって-1返す事なかったっけ?

528デフォルトの名無しさん (アウアウカー Sadb-i88m)2017/11/27(月) 20:31:48.14ID:clAY2uWxa
>>526
てか、>>443見てみな。

529デフォルトの名無しさん (ワッチョイ ff7f-lAwh)2017/11/27(月) 22:36:43.33ID:AvUHS7bA0
>>522
オレは単純にpsコマンドで、vszとszの推移を見てるだけだなー
確保の仕方にもよるだろうけど。。。

530デフォルトの名無しさん (ブーイモ MM7f-V9cG)2017/11/27(月) 22:55:20.44ID:epITd0LcM
>>529
メモリマップとかは見てると分かった気になれるし、仕事してる感も出るからおすすめ

531デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/27(月) 23:00:48.16ID:jJU6vIIdd
>>528
うおおおおお
たしかにあった

>>527
-1は素で忘れてた
>>443見てみたけど最後if elseで終わってるからその後がどうなんの?って気になる
if elseってことは他もあるじゃん?ってなるのだがいかんせんman理解できない...

532デフォルトの名無しさん (ワッチョイ 879f-lrN+)2017/11/28(火) 01:05:27.23ID:uD/TV9F60
>>531
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/wait.2.html
Linux の場合大きく分けて WIFEXITED と WIFSIGNALED 以外があるのかというと今のところない。
しかし将来的に増えないとも限らないので念のため if で分岐させておいた方が良いと思う。

533デフォルトの名無しさん (ワッチョイ 07b3-zoBB)2017/11/28(火) 01:45:58.95ID://UzmZat0
https://i.imgur.com/NECNUPM.jpg
この問題なんだけど、下の書き方以外に賢い方法ある?
このやり方はごり押し過ぎてさすがに違うと思うんだけど
http://codepad.org/pUUVFFJA

534デフォルトの名無しさん (ブーイモ MM7f-V9cG)2017/11/28(火) 03:16:49.45ID:Ol4PUSI5M
>>533
3点ほど

配列使う必要ある?保持したいのは最大値だけなんだよね?入力ループ内で最大値判定までやったら?

ローカル変数名は input_num とか分かる名前つけようか

main の戻り値

535デフォルトの名無しさん (ワッチョイ 0793-C/lT)2017/11/28(火) 07:53:02.37ID:tl7kMs1v0
C99以降だっけ?
省略された int main() の返り値として自動的に return 0; が補われる、
という仕様があるはずだけど、それに積極的に依存するよりも
return 0; と1行書く方が良い習慣だわね。

536デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/28(火) 08:09:45.26ID:VZsT4wzqd
>>532
さんくす
これ読みにくいよなぁ....

子プロセスの配送が停止したとき
具体的に言うとwifstoppedの時は別なのかな?

537デフォルトの名無しさん (ブーイモ MMcf-T7/p)2017/11/28(火) 18:38:43.18ID:v3J3k8MEM
stdlib.hのSUCCESSなんちゃらをほんにゃら

538デフォルトの名無しさん (ワッチョイ 879f-lrN+)2017/11/29(水) 02:06:01.37ID:1lf2VR3q0
>>536
試してみればわかると思うけど system() で動かされた子プロセスは SIGSTOP 受け取っても
停止するだけで親プロセスには帰らないよ。system() 内でやってる waitpid() は WUNTRACED
や WCONTINUED オプション使ってないってことだと思う。なので STOP や CONT に関係する
WIF... はやる必要がない。

539デフォルトの名無しさん (ワッチョイ 67a0-5mWG)2017/11/29(水) 15:46:29.13ID:awoPtY5k0
char str1[10]="AAAAAA";
char str2[10]="BBBBBB";
char str3[10]="CCCCCC";
があって、これをそれぞれ
char strh[0][10]〜char strh[2][10]に代入する方法を教えてください。

540デフォルトの名無しさん (ワッチョイ 2761-+V5r)2017/11/29(水) 15:58:48.18ID:mhTWLdh/0
strcpy(strh[0],str1);
strcpy(strh[1],str2);
strcpy(strh[2],str3);
と適当に書いてみる。

ポインターのコピーじゃダメなんですか?
なんで中身をわざわざ複製して、処理時間を無駄に消費するんですか?

542デフォルトの名無しさん (スプッッ Sdff-T4vC)2017/11/29(水) 16:25:56.35ID:llo+D0tpd
>>538
ありがとうありがとう
そうすることにする


stat関数でのファイル存在確認って破損していたファイルだとエラー返ってくる?
仕様を調べていたけどそのような記載がなかった

543デフォルトの名無しさん (ワッチョイ bf8a-LwI/)2017/11/29(水) 17:24:28.37ID:FWpFj9nP0
>>541
ポインタのコピーだとコピー元の配列(str1[],str2[],str3[])の中身を変更するとコピー先(*strh[0]〜*strh[2])の内容まで変わる
値のコピー(strcpy()など)だとコピー元の配列の中身が変わってもコピー先の配列(strh[0][]〜strh[2][])の内容は変化しない
配列とポインタでは挙動が違う

544デフォルトの名無しさん (ワッチョイ c7ea-3T+V)2017/11/29(水) 17:38:36.67ID:7w8PUMIS0
初期化でやってしまう話じゃないんだろうな。 多分

char strh[3][10] = { "AAAAAA", "BBBBBB", "CCCCCC" };

545デフォルトの名無しさん (ガックシ 068f-forR)2017/11/29(水) 17:49:08.23ID:Ypog5BGe6
配列変数はただのポインタ変数じゃないってマジ?
arr==&arrになるんやが。
arrがポインタなら&arrはポインタのポインタだからこれはおかしい。

546デフォルトの名無しさん (ブーイモ MMeb-T7/p)2017/11/29(水) 18:28:37.84ID:azEm6Mj/M
配列名が先頭要素へのポインタになるのは構文糖

547デフォルトの名無しさん (ワッチョイ 07b3-3T+V)2017/11/29(水) 18:44:21.59ID:+PcO5Rrn0
int a[10];
int *p;

p++; 問題なし
a++; エラー

配列は配列 ポインタはポインタ

548デフォルトの名無しさん (ワッチョイ a77f-8Ex9)2017/11/29(水) 18:50:37.55ID:Xa+98JY60
arrと&arrじゃ型違うし、比較結果が一致する保証もないけど?

549デフォルトの名無しさん (アウアウカー Sadb-i88m)2017/11/29(水) 18:51:10.65ID:DGImDAX5a
また一人C言語の罠に掛かったようだ・・・

550デフォルトの名無しさん (アウアウカー Sadb-i88m)2017/11/29(水) 18:57:26.48ID:DGImDAX5a
>>545
ポインタの変数はポインタを入れとくための変数だ。
配列変数はポインタを入れとく変数ではなく、単に配列の先頭を表すラベルでしかない。

551デフォルトの名無しさん (ブーイモ MMeb-T7/p)2017/11/29(水) 19:03:01.69ID:azEm6Mj/M
よし、sizef演算子の出番だな。

552デフォルトの名無しさん (ワッチョイ 0793-C/lT)2017/11/29(水) 19:11:32.94ID:vgi7NPsq0
>>545
int arr[10]; みたいに配列を定義して
if (arr == &arr) {...} てな具合に比較する話かな。

配列名 arr は &arr[0] (先頭の要素へのポインタ)
配列名に&演算子を作用させた &arr は配列全体(10要素の配列)へのポインタ
…と解釈される、とANSIで決まった、と望洋さんの本に載ってる。
『秘伝C言語問答 ポインタ編』p.25 Column1-2 「配列名に&をつけると……」


>>548
型が違うのは間違いないけど、値が一致しない場合ってあるのかな?
それとも型の異なるポインタ同士での値の比較って未定義動作なんだっけ?

553デフォルトの名無しさん (ワッチョイ 0775-forR)2017/11/29(水) 19:31:59.94ID:bodUKsOx0
>配列名 arr は &arr[0] (先頭の要素へのポインタ)
>配列名に&演算子を作用させた &arr は配列全体(10要素の配列)へのポインタ
>…と解釈される、とANSIで決まった、と望洋さんの本に載ってる。

なるほどな

554デフォルトの名無しさん (ワッチョイ a77f-8Ex9)2017/11/29(水) 19:54:00.64ID:Xa+98JY60
>>552
>6.5.9 等価演算子
>(中略)
>制約??次のいずれかの条件を満たさなければならない。
>(中略)
>-両オペランドとも適合する型の修飾版又は非修飾版へのポインタである。

「〜型」と「〜型の配列型」は適合しないから、ポインタの比較は未定義

555デフォルトの名無しさん (ワッチョイ 7f80-xsLR)2017/11/29(水) 20:09:41.35ID:/RfTzpPk0
>>552
型が異なったら、比較できない

例えば、アドレス100番地から10バイトと、
アドレス100番地から20バイトでは、全然違う

仮に、同じバイト数だとしても、中身・内容が異なるし、比較する事に意味がない

556デフォルトの名無しさん (ワッチョイ 5ff9-uRPb)2017/11/29(水) 22:15:27.21ID:QTG/JUE+0
>>542
ファイルの破損というのがファイルの中身の論理レベルの話なら正常なファイルとみなされるはずだし、ファイルシステムレベルの破損やメディアの物理的破損なら実装依存じゃないかな。

557デフォルトの名無しさん (ワッチョイ 5ff9-uRPb)2017/11/29(水) 22:18:50.37ID:QTG/JUE+0
>>555
いま話題にしているのはarrと&arr[0]の比較であって、これらはどちらも比較演算子のオペランドとしてはint*型として評価されて型も値も一致すると思ってたけど、どうだろう。

558デフォルトの名無しさん (ワッチョイ 5ff9-uRPb)2017/11/29(水) 22:20:43.77ID:QTG/JUE+0
>>557
間違えた。arrと&arrね。&arrもint*型のはず、だと思う。

559デフォルトの名無しさん (ワッチョイ a77f-8Ex9)2017/11/29(水) 22:42:55.53ID:Xa+98JY60
実際にコンパイルすれば型不一致のwarning出るのに、なんでそういう発想になるんだろう
不思議だわ

560デフォルトの名無しさん (ワッチョイ 3d93-kA4S)2017/11/30(木) 06:56:06.98ID:VGvsvH1F0
>>557-558
int arr[10]; と定義されてる場合、
arr の型は int*
&arr の型は int (*)[10]
つまり arr と &arr は型が違う
というのが >>552 の「&arr は配列全体へのポインタ」の意味。

「引数として『10個のintを要素とする配列』のみを受け入れる関数」
(要素数が違うとコンパイルエラー)みたいのを書ける。
もちろん、それが目的で存在する書式じゃないだろうけど。

それにしても &arr の型の書き方は分かりにくいな。
理屈は多次元配列を仮引数にとる関数プロトタイプと同じ、
だと思うんだが。

561デフォルトの名無しさん (ワッチョイ 4af9-4cvy)2017/11/30(木) 07:49:26.15ID:T6nL/USz0
>>560
色々と記憶違いをしてたよ。サンクス。

562デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/11/30(木) 10:29:35.42ID:/QNJXUpA0
>>560
arrの型はint[10]だボケ
&arr[0]がint*だ

おまえさんの、その理解では&arrがint**になっちまうだろうが

563デフォルトの名無しさん (ワッチョイ 1e8a-YNua)2017/11/30(木) 10:41:32.87ID:5xc99BMT0
arrは&arr[0]の糖衣構文なので型は同じint*だろ

糖衣構文なのになんでわかりづらくなってるんすかね

まあ、sizeofしたら分かるよ。

566デフォルトの名無しさん (ワッチョイ 1e8a-YNua)2017/11/30(木) 10:53:47.57ID:5xc99BMT0
arr=&arr[0]≠&arr

567デフォルトの名無しさん (ワッチョイ a5ea-7XMe)2017/11/30(木) 10:56:17.41ID:CwUb7XwN0
代入左辺の int* に渡す右辺
関数引数の int* に渡す引数
ここに渡す際に先頭要素へのポインタを与えてるだけで

変数そのものはポインタにはなっていなくて配列のまま

arrは要素10持つ配列の先頭アドレスを返す、サイズはint 10個分
&arr[0]は、配列要素0番目のアドレスを返す、サイズはint 1個分
先頭アドレスが欲しいだけなら型キャストして使えばいい。
代入に使うならサイズが違うから上手く行かない。

569デフォルトの名無しさん (ワッチョイ 1e8a-YNua)2017/11/30(木) 11:10:18.71ID:5xc99BMT0
arr = &arr[0] ≠ &arr
sizeof(&arr) = sizeof(&arr[0]) ≠ sizeof(arr)

570デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/11/30(木) 12:23:05.77ID:/QNJXUpA0
>>563
いーや違う
§6.3.2 Other operands
Except when it is the operand of the sizeof operator, or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type'' is
converted to an expression with type ‘‘pointer to type ' that points to the initial element of the array object and is not an lvalue.
あくまで配列からポインタへconvertedつまり元の型int[10]とは違う型int*への変換だ

571デフォルトの名無しさん (ブーイモ MMc9-ckDd)2017/11/30(木) 12:39:07.57ID:wmrrhfKqM
C言語は覚えることが少ないので初心者にお勧めです👈

572デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/11/30(木) 12:58:49.70ID:7wMQk3WFa
そ、そうかあ?

まあ他の言語よりはね

574デフォルトの名無しさん (ワッチョイ 5d8a-J59I)2017/11/30(木) 15:43:07.77ID:AraxvjGC0
氏名、生年月日を入力させて、年齢を出力する。(ここまではいい)
再度起動時に、同一氏名入力時は生年月日と年齢を出力する(これがわからん)

方向性がさっぱり見えない、どうすりゃいいの?
http://codepad.org/BVM0iMi4

575デフォルトの名無しさん (ワッチョイ a5ea-7XMe)2017/11/30(木) 15:49:01.37ID:CwUb7XwN0
入力された氏名のファイルを探す
 無い→ファイル作って 入力した生年月日を書き出すとともに変数に覚えておく
 有る→ファイルから生年月日を変数に読み込む
↑の処理で変数で覚えている生年月日から年齢を求め表示する

576デフォルトの名無しさん (ワッチョイ a5ea-7XMe)2017/11/30(木) 15:50:35.20ID:CwUb7XwN0
異なる氏名の分だけファイルを作っちまうけどお手軽

577デフォルトの名無しさん (ワッチョイ 5d8a-J59I)2017/11/30(木) 15:58:14.77ID:AraxvjGC0
if文&fread,fwriteでなんとかなります?
あと出来ればリンク先のソースコードにダメだし貰えると嬉しい

578デフォルトの名無しさん (ブーイモ MM8e-McTX)2017/11/30(木) 17:12:52.14ID:hDUXhrlWM
ファイルが一個しか使えないんなら、
その中に何の情報をどんなフォーマットで入れるか先に設計しろ。

579560 (ワッチョイ 3d93-kA4S)2017/11/30(木) 17:54:17.29ID:VGvsvH1F0
>>562 言葉は悪いけど言う通りだね。
俺が書いたのは arr て名前が演算の対象として単独に現れたときに
自動的にポインタの値に変換される場合の値と型のことだった。

arr 自体はあくまで配列だから int[10]
この名前が関数の引数とかで使われた場合 &arr[0] と同じになる。
配列名は隙あらば「先頭要素へのポインタ」になりたがる。
こんな感じでよろしいか? (我ながらぎごちないけど)

580デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/11/30(木) 18:07:14.42ID:rYNpG8Zla
>>577
fprintf()で一行にカンマ区切りで名前と生年月日出した方が扱いやすいのでは?

で、処理の順序としてはこうだ。

1. 名前入力。

2. 入力された名前がファイルの中にあったら一緒に入っている生年月日を出して終了。

3. 生年月日入力。

4. 名前と生年月日をファイルに追加。

5. 終了。

ファイルアクセスは2では読み出ししかせず開きっぱなしにしないでクローズする。
4では追加書き込みだけしてクローズだ。

581デフォルトの名無しさん (ワッチョイ 398a-fjL1)2017/11/30(木) 18:07:34.67ID:kZZqjgS10
OLE複合ファイルで保存すればよろし

582デフォルトの名無しさん (ブーイモ MM8e-ckDd)2017/11/30(木) 18:30:11.56ID:RwvI386YM
構造体配列をバイナリでrw

583デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/11/30(木) 21:02:57.60ID:/QNJXUpA0
>>579
演算の対象ではなく、特定の演算子の対象な
どの演算子で&arr[0]に変換されるのか、
列挙できる知識が必要ということだ

584デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/11/30(木) 21:56:39.93ID:xcZwpJOTa
XMLで

なんていうと余計にややこしくなって大変な事になるなw

585デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/11/30(木) 22:05:39.04ID:ewUYSdOO0
>>583
左辺値が変換されるのであって、特定の演算子のオペランドのとき変換されるなんて仕様はないよ?
特定の演算子のオペランドのときに変換されないって仕様はあるけどさ

586デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 06:29:54.45ID:jGNBP26P0
>>585
Cの演算子は「特定の演算子」の集合で、
そこから、ある特定の演算子を除いた残りもまた
特定の演算子だろうがよ

587デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/01(金) 06:50:45.43ID:NXDNhmZv0
宣言とか、演算子出てこないことぐらいあるだろ
初期化子つきの宣言に出てくる=が代入演算子だとでも思ってんのか?

>>584
C# とか C++ ならまだしも C言語だとちょっと辛いわな
>>574 程度なら .ini ファイルみたいな奴でいいかと

589デフォルトの名無しさん (ワッチョイ b6eb-1noQ)2017/12/01(金) 09:10:23.44ID:IMGPh1jC0
>>587
ちなみに、初期化子つきの宣言に出てくる=が代入演算子でないとすると、
その=は何と呼ばれるものです?

590デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 09:50:32.00ID:jGNBP26P0
>>587
宣言? おまえさん、int arr[10];がint *arr;に変換されるとでも思っているのか?
仮引数にint arr[10]と書くとint arr[]に読み替えられたりはするが、
そのことを言っているのなら>>562で指摘したとおりになるな
ただし>>560にはセミコロンが付いていてそういう逃げ道は封鎖されているわけだが

591デフォルトの名無しさん (ワッチョイ a5ea-7XMe)2017/12/01(金) 10:53:53.03ID:j3o2JE0u0
int arr[10];
int *p = arr; /* このときの arr の解釈 */
を指してるのだと思うの。
ここで出てくる = は代入演算子じゃないぜ って

592デフォルトの名無しさん (ブーイモ MMc9-KyLD)2017/12/01(金) 11:01:39.32ID:y1pVtdhXM
我輩は宣言子と初期化子の間の=である。名前はまだ無い。

593デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 11:08:59.34ID:jGNBP26P0
>>589
初期化宣言子 init-declarator

594デフォルトの名無しさん (ワッチョイ b6eb-1noQ)2017/12/01(金) 12:08:20.94ID:IMGPh1jC0
>>593
なるほど、情報サンクスです。
C++だと、同じものが代入演算子と称されていて。コンストラクタ内で代入演算子をオーバーロードすべし、
のような言い方をよく見かけますので。Cでも同じ呼び方をするのかと思ってました。

595デフォルトの名無しさん (ブーイモ MMc9-KyLD)2017/12/01(金) 12:17:22.80ID:y1pVtdhXM
いやまて init-declarator は、"宣言子"か"宣言子=初期化子"のことだぞ

596デフォルトの名無しさん (ワッチョイ b6eb-1noQ)2017/12/01(金) 12:22:41.61ID:IMGPh1jC0
>>594
あー、よく見たらC++ではコピーコンストラクタと代入で明確な区別があるんですね。
もっと勉強しなきゃですわ

597デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 13:24:35.76ID:jGNBP26P0
>>595
s/"宣言子"か//

598デフォルトの名無しさん (ワッチョイ 398a-fjL1)2017/12/01(金) 14:30:51.38ID:HUofIpvH0
貞子とか初子とか

599デフォルトの名無しさん (スップ Sd0a-ygIL)2017/12/01(金) 15:44:26.68ID:0Iysip4/d
プログラミング初心者です
車のタコメーターをフルカラーのディスプレイを使って作りたいのですが、どうすれば良いのかが全く分かりません
C言語は計算機内で式の答えを演算する程度なら使えますが、ハードを制御したりはできないです(Arduinoなら少し弄りました)
C言語で作れるのかも分からないので、簡単なところから教えてください
エンジン回転数のパルス信号は取れてます

600デフォルトの名無しさん (ワッチョイ 398a-fjL1)2017/12/01(金) 15:55:36.34ID:HUofIpvH0
ターゲット環境は?

601デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 15:56:55.06ID:jGNBP26P0
Ardudinoを弄ったことがあってハード制御ができない?
パルス信号を取れるっていうのは、オシロスコープか何かで確認できたってことか?

・・・もしかして、こういうことか?
その信号をプログラムで読み取るには、どこの端子に繋ぐのかとか、
信号のレベルの合わせ方とか、そういうことがわからんのか?

602デフォルトの名無しさん (ワッチョイ a5ea-7XMe)2017/12/01(金) 16:01:06.60ID:j3o2JE0u0
マイコンに表示装置とかをくっつけて
デジタコを0から自作したいってことなのかな?

言語外の相談のほうが重要度高いような気もする

603デフォルトの名無しさん (スップ Sd0a-ygIL)2017/12/01(金) 16:13:56.45ID:0Iysip4/d
信号→マイコン→処理
は分かります
その処理を今までPC上に表示させていた物をディスプレイに↓のようにカッコよく表示させるにはどうすれば良いのかを教えてほしいのです
https://i.imgur.com/S3sahkU.jpg

604デフォルトの名無しさん (スップ Sd0a-ygIL)2017/12/01(金) 16:15:42.98ID:0Iysip4/d
何から調べていいのかも分からない状態です
ど素人ですみません…

605デフォルトの名無しさん (ワッチョイ 5db3-JjO2)2017/12/01(金) 16:54:04.97ID:kRZ1SJ+P0
そのディスプレイとやら仕様書見せてくれなきゃ
なんとも答えようがなくない?

606デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/01(金) 16:56:05.30ID:y5AhnBkya
>>603
ターゲットのマシンは?
Windows? Linux?

ていうか、C言語でやると何で動かすにしても大変面倒だと思うので何か他の言語使った方が良いと思う。

607デフォルトの名無しさん (スップ Sd0a-ygIL)2017/12/01(金) 16:56:22.84ID:0Iysip4/d
言語もバードも指定は無いです
寧ろ何を使えば良いのかを教えて欲しいです

608デフォルトの名無しさん (スップ Sd0a-ygIL)2017/12/01(金) 16:59:45.04ID:0Iysip4/d
ターゲットがよく分からないのですが、コードはUNIX系のOSのemacsで書いてます
Windows上で作ったプログラムを動かしたことはあまりないですね

609デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 17:09:00.66ID:jGNBP26P0
ディスプレイのつなぎ方がわからんのか?
つないであるディスプレイへのコマンドの送り方がわからんのか?

610デフォルトの名無しさん (ワッチョイ 3d93-kA4S)2017/12/01(金) 17:42:29.56ID:jA0BeSqZ0
>>599
PCのウィンドウ環境上でウィンドウを開いてグラフィック表示って問題なら、
環境次第でここでも分かると思うけど…。

部品としての液晶やLEDのパネルのハードウェア制御ってことになると、
まずはどの部品を使うのか、って話になるな。

611デフォルトの名無しさん (ブーイモ MMc9-ckDd)2017/12/01(金) 18:11:29.04ID:5uJXNlV4M
なにがベストかと聞かれても答えにくい質問だな。
自分ならデータを無線で飛ばしてタブレットでみれるwebシステムを検討したい案件だが。

612デフォルトの名無しさん (JP 0Hb5-McTX)2017/12/01(金) 18:28:55.76ID:LYbXDWPHH
そもそもの目的は?勉強とかお遊び?

613デフォルトの名無しさん (ブーイモ MM81-kYsf)2017/12/01(金) 18:35:32.61ID:6HJgPekDM
消費電力、サイズ制限、予算諸々考えてどの程度のハードが用意出来るかって所から

linuxやwinが動くようなリッチな環境が用意出来るなら
GUI部はCじゃなくても良くねってのが正直な感想

614デフォルトの名無しさん (ワッチョイ 5db3-7XMe)2017/12/01(金) 18:39:21.60ID:kbDZQVhk0
BT接続できるOBD2アダプタ(点検器具端子)買ってアンドロ端末に表示するのがお手軽かも

615デフォルトの名無しさん (ブーイモ MM81-KyLD)2017/12/01(金) 19:09:42.97ID:qQWTYDNZM
>>597
おれも少し変だとは思うけど、企画書には、宣言子単独が init-declarator に含まれてるんだよ

616デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/01(金) 19:38:44.88ID:quTLstwT0
>>608
> ターゲットがよく分からないのですが、コードはUNIX系のOSのemacsで書いてます
根本的に分かってないようだが、「ターゲット」ってのはお前が決めるんだよ。
そして既にコードを書いていて、そこにLCDを接続したいだけなら、その環境を言えよ。

617デフォルトの名無しさん (スップ Sdea-DJnL)2017/12/01(金) 20:25:33.69ID:01uXYhT3d
LCD付ARMのlinuxキットでやれ

618デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/01(金) 20:27:16.42ID:NXDNhmZv0
>>615
初期化子なしは、不定値で初期化するって意味だと納得することにしてるわ
一応、初期化の説明に含まれてるし。。。

つーことで、>>586とかには演算子のオペランドでないこともあるって理解してもらえたかな
良かった良かった

619デフォルトの名無しさん (ワッチョイ 9e9e-GQwd)2017/12/01(金) 20:54:03.81ID:HgVhW4BC0
>>603
>信号→マイコン→処理
>は分かります
で、信号は取れたとか言ってるんだから対象の物理的扱いはわかっているんだろ。
それをどんなマイコンにどう繋ぐかだ。出来合いのマイコン基板を買ってきて
それに繋げるのか、基板から自作するのか

620デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 21:25:55.70ID:jGNBP26P0
>>618
586だが、だから何だ?
演算子に限らずとも、Cは明確に列挙された機能の集合だ
そこから特定の演算子を除いた残りは、
おまえが言うような曖昧な集合ではない

621デフォルトの名無しさん (ワッチョイ 5db3-7XMe)2017/12/01(金) 21:37:37.37ID:kbDZQVhk0
>>583 へのカウンターじゃないの?
583では 変換が走るのは 特定の演算子の対象 としてるけど

初期化においても変換が走ってる
この記述中では演算子はなくて、該当変数は演算子のオペランドになっていない って

622デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/01(金) 21:39:28.94ID:NXDNhmZv0
>>620
ん?
配列型を持つ左辺値は特定のケースを除いてポインタ型に変換されるという
規格に明記してある話を理解してもらえればそれで十分だよ?

初期化子には演算子が含まれないこともあるって理解できたんだよね
なら、それで良いよ

623デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 21:43:38.60ID:jGNBP26P0
>>621 >>622
>>560からの流れ読んでね
やつはint arr[10];と定義されたオブジェクトに対する
arrというアクセスがint*だと言っているんだ
おまえら2人とも変換と言っているよな
変換てそもそも何だ?

624デフォルトの名無しさん (ワッチョイ 5db3-7XMe)2017/12/01(金) 21:46:07.65ID:kbDZQVhk0
>>623 俺の認識は >>570 の converted であり
arr は int[10] のまま

625デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/01(金) 22:00:29.26ID:NXDNhmZv0
>>623
そりゃ、>>570のconvertedだろ

sizeof、&、配列の初期化に用いられる文字列リテラルを除いて、配列型をポインタ型に変換する。それはもはや左辺値ではない。
の変換

626デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/01(金) 22:05:59.37ID:NXDNhmZv0
もしかしてarr自体がint*型を持つというアホな解釈を擁護してるとでも思われてたの?
それは>>560自身も、>>579で式中に現れた場合のことでしたって弁明してるでしょ

それとも
arr;
という識別子名だけの単文があったとき、arrがポインタ型に変換されないと思ってる?
左辺値なんだから、当然変換されるよ

627デフォルトの名無しさん (ワッチョイ 5db3-7XMe)2017/12/01(金) 22:11:15.92ID:kbDZQVhk0
>>625
> 配列の初期化に用いられる文字列リテラル
(その通りに動作すると期待して)普通に使ってるけど、
逆の観点の、配列のまま取り扱ってる例として挙げようとすると、見落とすわ これ

628デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 22:19:35.93ID:jGNBP26P0
>>626
うん、そう思っている

おまえ、なぜ
arr;
がポインタ型に変換されると思っている?

なんだか残念な答えが返ってきそうな予感がするが

629デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/01(金) 22:49:05.07ID:NXDNhmZv0
6.3.2.1 Lvalues, arrays, and function designators
An lvalue is an expression with an object type or an incomplete type other than void

6.8.3 Expression and null statements
expression-statement: expressionopt ;

arr;は式文、arrは式(左辺値)
よって、>>570の規則に従って変換される

630デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 22:57:47.71ID:jGNBP26P0
>>629
それはおかしいぞ
arrという部分式を評価中に、それがどんな文脈の作用対象となるかは
予見しないのがCのポリシーで、だからこそ式arrはlvalueを生じる
その後lvalueからvalue of an expressionへの変換を要請する文脈を経ずに
シーケンスポイントとなっているそのプログラム片のどこに
アドレス計算が生じうるんだよ

631デフォルトの名無しさん (スプッッ Sd12-ygIL)2017/12/01(金) 22:59:25.50ID:UqjXH8z4d
>>608です

>>616
コードをどう書けばいいかも、どれを使えば実現できるのか分からないです
コストや部品点数は抑えたいと思ってます

>>619
どういうマイコンをどうすればアニメーションでディスプレイ出力ができるのかを知りたいんです
おおまかな道筋を教えて欲しいです
ARMマイコンとかどうなんですかね…

632デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/01(金) 23:03:12.88ID:jGNBP26P0
PIOのディレクションレジスタを出力に設定してマスクパターンを指定しておき、
それからコマンドを書き込んでストローブのパルスを作って。。。

633デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/01(金) 23:07:47.82ID:NXDNhmZv0
>>630
ポリシーとかじゃなくて規格の話をしてくれない?

配列型の左辺値は特定の場所以外で現れた場合に、変換されるという規格なの
演算子を伴わない場合は変換されないというのなら、その規格を明示して

左辺値ですらないというのであれば、その根拠となる規格を示して

人に説明求める割に、自分の論拠が想像ってのはどうかと思うよ

634デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/01(金) 23:12:55.57ID:quTLstwT0
>>631
ググレカス
Arduinoと液晶でいくらでもヒットするだろ
ゆとりはマジで殺処分すべきだな

635デフォルトの名無しさん (スプッッ Sd12-ygIL)2017/12/01(金) 23:20:03.85ID:UqjXH8z4d
>>634
ありがとうございました

636デフォルトの名無しさん (ワッチョイ ea33-MbHU)2017/12/01(金) 23:49:36.73ID:P20tw7a40
>>633
> 配列型の左辺値は特定の場所以外で現れた場合に、変換されるという規格なの

630 じゃないけど、そっちこそ規格のどこ見て言ってるの?
N1570 6. Conversion で演算子オペランドになったときの変換は確認できるけど、
式文を含めて「現れた」だけで変換されるという記述は見つけられない。

637636 (ワッチョイ ea33-MbHU)2017/12/01(金) 23:50:50.61ID:P20tw7a40
あ、ごめん。 6. Conversion じゃなくて 6.3 Conversions ね。

638デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/02(土) 00:14:21.15ID:mWFcFWTj0
>>633
質問に質問で返さないでくれない?

arr;というプログラム片のどこにアドレス計算が生じうるの?
全く無用と思える操作を強制する根拠法令を示しなさいよ

全く無用と思わない、あんたの思考回路でもいいよ
こちとら規格しか聞く耳持たないとか言わないから
つーか自分なりの思想を持っているやつと話すほうが実りがあるし

639デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/02(土) 00:17:19.87ID:2ymk6h8v0
>>636
>>570
an expression that has type ‘‘array of type'' is converted to an expression with type ‘‘pointer to type ' that points to the initial element of the array object and is not an lvalue.

確かに、6.3の頭には演算子オペランドの暗黙的な型変換について規定するとは書いてあるけど、
あくまでもsuch an implicit conversionであって、それだけを規定するわけではないでしょ
expressionが変換されると書いてあるんだから、式が変換されると読むのが素直じゃない?

そう解釈しないと、例えば
return arr;
とか、どういう理屈でポインタを返すと考えれば良いの?

640デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/02(土) 00:23:30.95ID:mWFcFWTj0
>>639
おまえさんが言っているのはこういうことだ
int aho() [10]
{
int arr[10];
return arr;
}
コンパイル通るかどうかやってみな
で、どういう理屈でそうなるのか
おまえさん自身が言ってみな

641デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/02(土) 00:29:15.26ID:2ymk6h8v0
>>640
自分は一貫してreturn arr;でint*を返すという主張なんだけど?

あなたこそ、演算子を伴わないと変換が行われないと主張してたんだよね?
そういう解釈だと、どうやって
return arr;
でint*返せるのって質問だよ

642デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/02(土) 00:32:10.46ID:mWFcFWTj0
>>641
演算子って言質がおまえさんの命綱のようだな
別にそんなの撤回してもこっちは痛くも痒くもない
それをもって勝利宣言したければすればいい
win-winだね

643デフォルトの名無しさん (ワッチョイ ea33-MbHU)2017/12/02(土) 00:36:49.22ID:+GJuKLXc0
>>639
return についての規定で代入と同じ変換が行われることになってる。
規格見てるんなら return について疑問に思った時点で該当箇所読んでから聞こうな。
「自分の論拠が想像」は許さない立場なんだからさ。

644デフォルトの名無しさん (ワッチョイ 697f-GQwd)2017/12/02(土) 00:45:15.02ID:2ymk6h8v0
>>643
おお、ほんとだ
ありがとう、見落としてたわ
ついでに初期化宣言子も見返したけど、単純代入と同じ型変換後の値が初期値って書いてあるな
ごめん、ごめん

規格解釈は間違ってたけど、結果は合ってたって感じかな
こういう指摘くれたら1発で済んだのに。。。

645デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/02(土) 00:52:58.64ID:mWFcFWTj0
>>644
おまえは間違っていた
人のせいにしてんじゃねえよ

646デフォルトの名無しさん (ワッチョイ 3dab-bpph)2017/12/02(土) 15:52:09.87ID:KedYgmHp0
文系で一から使えるようになるまでにどれくらいかかりますか?

647デフォルトの名無しさん (ワッチョイ 398a-fjL1)2017/12/02(土) 16:07:39.94ID:fU6v9rJN0
桃クリ3年柿8年ゆずの大馬鹿13年。

648デフォルトの名無しさん (ワッチョイ 4af9-4cvy)2017/12/02(土) 16:16:16.79ID:34/Kk+++0
>>646
文系かどうかはあまり関係ないと思う。論理的な思考が苦手でなければok。
使えるようになるのレベルに幅がありすぎるからなんとも言えない。
プログラミング初めてで、どうしてもCでなければならない理由がないなら、他の言語から入った方が実用的なことをするのには早いと思うよ。

649デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/02(土) 16:25:40.62ID:WQRORJsZ0
>>647
ゆずの大馬鹿は18年だったんだが、最近のゆずは発育がいいのか?

接ぎ木するんだろ

651 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/02(土) 17:10:18.36ID:4pmjT1Fk0
>>646
Java がいいんじゃないかな?書籍も多い

652デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/02(土) 18:49:23.92ID:WQRORJsZ0
>>646
数学/物理が出来なくて文系に行った口なら諦めろ。一生無理だ。
頑張ったところで、若い奴らに簡単に追い越され、一生惨めな思いをするだけだ。
他に適性のある分野を探した方がいい。

現実的には、理系/文系のどちらの知識も必要なく、抽象/論理思考が出来るかどうかが全てだ。
だから高々高校2年間程度のラベルの結果である文系/理系自体には大した意味がない。
しかし、そもそも抽象/論理思考が得意なら、当然、
不得手な奴が混ざっている環境(つまり文理分けていない状況)においては無双できる。
結果、「得意だから」≒「好きだから」という理由で文理を選んだのなら、文系を選んでる時点で向いてない。
そして大学4年間で理系の連中は周りが抽象/論理思考出来る奴らばかりという環境で鍛えられることになるから、
決定的な差がついてしまう。

そうではなく、俺は数学も得意な文系だ!というのなら行けるかもしれん。
最近は経済学部が理系化しつつあるという話だし。

いずれにしても個人差の方が大きい。学生なら、やってみて面白くなければ諦める、でいいと思うが。
面白いと思えて続かないようなら向いてない。

653デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/02(土) 18:53:01.98ID:WQRORJsZ0
ちなみに、論理的思考は、出来る奴は最初から出来る、というか思考ベースがそっちだ。
もちろん頑張って対応することも出来るが、
最初から出来る連中がデフォの環境で頑張り続けるのは辛いと思うよ。
http://buzz-netnews.com/wp-content/uploads/2016/04/2ee1df837c0dd36abd3ad9d095c4acf8.jpg
http://buzz-netnews.com/wp-content/uploads/2016/04/teo.jpg

654 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/02(土) 18:57:05.09ID:4pmjT1Fk0
>>652
化学・生物じゃだめですか?

655デフォルトの名無しさん (ワッチョイ a580-McTX)2017/12/02(土) 18:58:43.14ID:hLt+ALOn0
>>653
なんやこの画像w
一般化能力高いなw

656デフォルトの名無しさん (ワッチョイ 6681-JjO2)2017/12/02(土) 19:17:30.71ID:PL6F8Ywp0
>>654
むしろ向いてる気がする
数学とか論理によりすぎだと変なこだわりがあったり
現実のあいまいさに適応できなかったりするから
現実的な手続きや広範な知識が必要な化学が得意だったら適正ばっちりじゃないか

657デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/02(土) 19:33:33.78ID:WQRORJsZ0
>>654
高校生物=ほぼ暗記
高校化学=暗記7割、理論3割
高校物理=ほぼ理論
高校数学=8割理論、2割パターン暗記
(高校国語/英語/社会=ほぼ暗記)
じゃね?
だから高校化学/生物が得意だからといって、抽象/論理思考の能力は分からない。
(無いとは言わないが、得意とは判断できない)

逆に暗記が得意なら自然と文系教科で無双することになる。
この理由で文系を選んだのなら、暗記能力>抽象/論理思考能力、ということになり、向いてない。
今時のプログラミングってWebを参照しながらやるもんだし、暗記能力自体はほぼ要らなくなってる。
ただしドキュメントを大量に読むようになってきてるから、国語/英語の能力は重要になってきてるが。
とはいえ、高校英語=ほぼ単語を覚えているかどうか、であり、
現実はポップアップ辞書も使えるし、google翻訳も読めないほどでもないし、そもそも技術英語は簡単だしで、
テストでの英語の能力よりも、何を書いてあるか読み解く方が重要で、
いわゆるTOEIC等とは違う尺度だから、高校英語の点なんて全く当てにならないが。

ただまあ、学生なら、グダグダ言わずにやってみて、面白いと思えなければ向いてない、でいいと思うよ。
ただ、ド初心者なら、>>648の言うとおり、他言語の方がいいと思うが。

658デフォルトの名無しさん (ワッチョイ f1c8-wAwf)2017/12/02(土) 21:10:49.78ID:i2vG1ua/0
>>657
まあ、国語は暗記でも行けるかもだけど、読解系の問題は論理思考でいけばかなり楽できるんだぞ。

659 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/02(土) 21:23:09.14ID:4pmjT1Fk0
>>658
現国はあてもんだろう?

660デフォルトの名無しさん (ワッチョイ f1c8-wAwf)2017/12/02(土) 23:09:43.44ID:i2vG1ua/0
>>659
勉強しなくても、論理思考さえできれば、ほとんど正解できるってこと。

661デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/02(土) 23:24:12.70ID:WQRORJsZ0
つかな、多分、解く過程が数学と同じなんだよ。
ただし数学自体ではないから、数学の成績自体はあまり関係ないけど、
数学めいたものが嫌いな場合には向いてない。
そして大体の場合は好き=得意科目になるから、
集団から選抜するのなら数学の試験を課すなり、面倒なら一律文系お断りってのも当たっている。
(もちろんプログラミング課題を課せるのであればそれが一番いいが)

よくある初心者向けのプログラミング課題、
・ソース○○に対して、出力△△を得たい、どうすればいいか、
に対して、実際は適切なメソッドや典型的な手法を組み合わせて対応するわけだろ。
これが、公式やお約束的解法を組み合わせて問題を解く「高校数学」と似てる。
そして実際のプログラミングなんて、
上記単発のお題が階層跨いでフラクタルになっているようなものだから、
ある意味数学パズルをずっと解き続けるようなもので、数学が嫌いだと持たんだろ。

ただし本来はその先の、
「こうすればこんなに簡単に実装できるのか」という構造を思いつける奴が「センスがある」となるわけだが、
これについては選抜の仕方(適正判断の仕方)は分からんなぁ。
ただ、いわゆる「エレガントな解法」というのが存在するのも数学だけだし、
プログラミングと数学はかなり構造が似ているのだと思うよ。

662 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/03(日) 00:12:42.31ID:lZQcP+Ql0
>>660
論理思考、最強!みたいな勢いだけれども、
その論理思考の中身というのが常識を外れているような気がする

命題A: 「1 + 1 = 3」 ならば「2 * 3 = 6」である

とするとき、命題Aは正しいか間違っているか、また、その理由は?

663 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/03(日) 00:14:06.99ID:lZQcP+Ql0
>>661
プログラミングは証明に似ているのには理解が及びますね。
ただ、普通の証明よりもずいぶんと細かいことに気をくばらないといけない気がします。

「型」を数学であつかっている例はありますか?

664デフォルトの名無しさん (ブーイモ MM0a-cp23)2017/12/03(日) 00:39:39.44ID:oCGWkppTM
>>646
マーチ文系の俺は現場に入るまで3週間
足引っ張らない程度になるまで3か月
無双するまで1年だったかな

3年たった今では Golomb 符号とたわむれてる

665デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/03(日) 01:38:00.88ID:iOWX59aS0
>>663
証明問題じゃねえよ。つかおまえも数学出来なかった口だろ。

数U数Vはほぼパターン通りだけど、
数Tの難しい問題はたいがい「エレガントな解法」ってのがあって、裏技みたいに簡単に解けたりするんだよ。
それはそれこそ東大の過去問とか見てみればいい。
或いは三平方の定理とかでも何通りも証明方法があって、おおっ、てのもあったりするだろ。
(ただ、この話が通じない時点で説明しても無理なのは確定だが…)

実際のプログラミングもこれと同じで、データ構造を正しく整理すれば制御構造もものすごく単純に出来たりするんだよ。
だから数学的な「エレガントさ」を追求するのが好きじゃないと向いてない。(というか上達しない)
そして「型」なんてのはノートに引いてある罫線みたいなもので、プログラミングの本質とは全く関係ない。
ただし型自体は圏論だっけ?Haskellの連中がやってたはずだけど。詳しくは知らんが。

666デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/03(日) 01:39:55.00ID:iOWX59aS0
で、QZ、君は色々文句言われてたりしてるのを見たことがあるが、俺自身は知らんからそれはどうでもいい。
ただC++のスレで「色々忘れてしまうんで…」とか言い訳してたろ。
(別段それについて責めるわけではないが)それは覚え方が悪いんだよ。
例えば高校の物理、
・ma=Fとsin/cosだけ覚えて後は組み合わせるだけだが、 // (A)
・「垂直にぶら下げたケース」「斜面においたケース」「バネがくっついたケース」とか、// (B)
別々に覚えたがる奴はいるんだよ。それで、(A)が抽象思考(分類)できる奴、(B)が出来ない奴、となるんだよ。
そして、プログラミングで必要なのは(A)で、(B)は死ね、でしかないんだよ。
で、多分君は(B)派なんだよ。だから「忘れる」とかいうことになる。
(A)だったら忘れるも何もない。どの言語でも同じものを使っていて、
それを「ひらがな」「カタカナ」「英語」のどれで書くか、でしかないから。

667デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/03(日) 01:40:39.01ID:iOWX59aS0
ただ自分が(A)なのか(B)なのかは簡単に分かるとして、(高校の物理に最初からついて行ければA、無理ならB)
これは思考の癖だから、簡単には直せないんだよ。だから向き不向きはかなりある。
単純に言えば、脳内のCPU/ストレージのコストによる。
いちいち圧縮/展開してでもストレージをケチりたい=CPUの速さに対して記憶が得意ではない場合は(A)、
いちいち展開するくらいならベタでストレージした方が楽=CPUのコストに対して記憶コストが安い場合は(B)になる。
そしてこれは無意識領域で作用するから、簡単には変えられない。
(A)の連中は最初から抽象思考する、というより抽象思考ベースだから、プログラミングにはフィットするけど、
例えば高校の歴史、「○○年に何がありました」という単発事象を別々に暗記するのには全く向かない。
逆に(B)の連中にはこれが向いているが、抽象思考するためにはいちいち「意識的に」圧縮/展開する必要があり、
ネイティブ(A)の連中にプログラミングでは太刀打ちできない。
それでも(B)の連中が得意な「記憶」でプログラミングに対処しようとした結果が「デザインパターン」だ。
だから(B)の連中はデザインパターンにすがるし、新しいパターンをどんどん登録しようとする。それが上達への道だから。
(A)の連中は最初から「デザインパターン?何それ?おいしいの?」だし、「名前つけただけだろ」程度でしかないんだよ。
で、QZ、君はデザインパターンにすがってるタイプだとC++スレで言ってたろ。
ここでも(B)だと分かるんだよ。

で、俺は、(B)の連中はわざわざプログラミングする意味無いと思ってるんだよね。向いてないから。
多分、その記憶コストの安さを生かした、何か別のことをすべきだよ。
パターン暗記で対応することも出来るけど、それだとコピペプログラマ程度にしかどうせなれないし。

668デフォルトの名無しさん (ワッチョイ 5d71-kbEZ)2017/12/03(日) 01:45:09.46ID:jbLAlLAh0
Haskellは非常にエレガントだからな
プログラマーたるもの一度はCとHaskellに触れるべきだ
願わくばHaskellのエレガントさとCの自由さを合わせ持つ神話的な言語が生まれて欲しいものよ

669648 (ワッチョイ 3dab-bpph)2017/12/03(日) 02:20:16.93ID:WgKYUm0V0
回答ありがとうございます

プログラマになりたいのは、単純に稼ぎたいからです
んで色んな言語の基礎というか素地になってるのがCみたいだから
まずはCをと、今いろいろ入門書を読んでるところです
難しいけど楽しくて仕方ない感じなのですが
大学は駅弁経済(だいたいmarchクラス)で数学無しで入ったので
今更ながら後悔してます(高校で挫折したクチ)
ココ見てるとやっぱりこの世界はすごく論理とセンスがモノを言うんだな、と
ちょっとビビってます
Cより楽な言語に移ろうかとも思案中ですが、
もう少し基礎を固めてからにしようと思ってます
また覗きに来ますねw

670デフォルトの名無しさん (ワッチョイ 6ae3-MbHU)2017/12/03(日) 09:53:05.36ID:vu2gdtZs0
稼ぎたいからプログラマって、何か凄い誤解してるような
金融行っとけ
マスコミは今後怪しい

数学無しの経済ってアリなの??

671デフォルトの名無しさん (ブーイモ MM81-cp23)2017/12/03(日) 10:07:03.35ID:hFnkXtgpM
>>669
ソフトウェアで稼ぎたいならcはないかな
javascript と python を頑張った方が良いかと

672デフォルトの名無しさん (ワッチョイ 9e9e-ZQia)2017/12/03(日) 10:22:33.67ID:aT6rnkdd0
ここら辺の高校数学とか延々述べてる回答者たちは荒らしなの?

673デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/03(日) 10:48:11.97ID:iOWX59aS0
>>669
> 難しいけど楽しくて仕方ない感じなのですが
これなら当面は問題ない。駅弁なら時頭も問題ないだろう。

> ココ見てるとやっぱりこの世界はすごく論理とセンスがモノを言うんだな、と
残念ながらそうでもない。
というか、(どの仕事でも同じだが)結局、仕事の9割以上は「与えられた分担をきっちりこなすこと」であって、
それは「パターン暗記」でほぼ何とかなってしまう。ここが逆に不幸なところで、
彼らもまた「仕事が出来る」うちに入ってしまい、彼ら流、つまり「パターン暗記」流を推奨してきたりする。
(C++のスレでだいぶ言ったが、俺はJavaはもうそっちに行っちまって戻れないと見ているから、Javaは俺は勧めない)
逆に、仮にセンスがあったとしても、仕事の1割以下でしかそれを発揮する機会がなく、埋没してしまう。

ここら辺を突破しようとしたのがGoogleの20%ルールだったわけだ。
> Googleにおいて、従業員は「勤務時間の20%を他のプロジェクトに費やしても良い」のではない。
> 「費やさなければならない」のだ。これは人事評価の対象にもなり、
> 従業員はその20%の時間を使って「本業以外の何か」を生み出すことを期待されている。
> https://innova-jp.com/google-20-rule/
「パターン暗記」では未来には対応できない。センスがない奴は、何をやっていいかすら分からない。
とはいえ、実際はこれを隠れ蓑に遊ぶ連中も多くて、って話だったが。
(少なくとも「パターン暗記」するタイプのまじめ人間からはそう見えた)
実際にそれが無駄だったかどうかは分からん。
https://www.countand1.com/2016/07/google-20-percent-time-implication-for-making-failure-be-good-learning.html
結局世の中OSSに完全にシフトしつつあるのも、
OSS側でセンスがある連中がつるんで好き勝手やるのにプロプライエタリでは全く太刀打ちできないからであってね。

ただし、公務員的にITで働きたいのならJavaだろう。向こう20年仕事はあるだろうし、あまり変化もない。
それ以前に、稼ぎたいのなら金融、ってのは当たっているが。
(なお金融関係のプログラマならPythonと聞いているが、多分これは日本国内の話ではない、
というか、日本国内に「金融関係のプログラマ」がそもそも居ないと思う)

674デフォルトの名無しさん (ワッチョイ f18a-9xBG)2017/12/03(日) 11:01:56.64ID:/SSODGhG0
金融関係ってCOBOLじゃ?

675デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/03(日) 11:10:41.68ID:iOWX59aS0
>>674
いや、俺が言っているのはそっちじゃない。

インフラは COBOL -> Java の移行中だ。君はこの意味で言っている。
俺が言っているのは以下で、
https://jp.stanby.com/media/programming_ranking2017/
Pythonの右端の連中は金融関係だ、と聞いている。
具体的には、デリバティブとかアービトラージとか、そっち系。

Cはお察し、として、Javaの右端の連中は何だろう?

676 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/03(日) 13:10:56.56ID:lZQcP+Ql0
>>665
>証明問題じゃねえよ。つかおまえも数学出来なかった口だろ。

数学の本道は証明問題にあるとおもっていますが
数学の本をみればわかりますが、定義、命題、証明をひたむきにくりかえしていますよ。
https://ja.wikisource.org/wiki/%E5%88%9D%E7%AD%89%E6%95%B4%E6%95%B0%E8%AB%96%E8%AC%9B%E7%BE%A9

>>655
>三平方の定理とかでも何通りも証明方法があって、おおっ、てのもあったりするだろ。
でしょう、証明問題こそプログラミングに似ていると思っています。

>「色々忘れてしまうんで…」
そして、証明をいちいち覚えるんじゃない、その都度再構成できるように努めています。
といって、数学の本はときどき「証明は読者にまかせる」とくるのですが、それはちょっと困ります

677デフォルトの名無しさん (ワッチョイ f1c8-wAwf)2017/12/03(日) 17:34:04.07ID:TNI+LIU50
>>662
それ、問題がおかしいよね?

678 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/03(日) 17:56:37.40ID:lZQcP+Ql0
>>677
おかしくないですよ、論理学的には。
「論理思考の中身というのが常識を外れている」の一例です。

679デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/03(日) 18:31:45.86ID:Gq7SJlPXa
>>662
"1"という数字は数値に直すと1.5であり、その他の数字は通常と同じであるとする。

という一文が手前に挿入されるとその後の計算は正しくなる。

680デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/03(日) 18:36:17.94ID:iOWX59aS0
>>676
君が「証明問題」に限定しようとしているのはなぜだ?
証明問題以外でも、俺はプログラミングと数学は雰囲気やノリが酷似していると思うが。

>>669
あと、職業として選ぶのなら、当たり前だが、君に特に抜きん出た才能がなければ、
・君が半年で出来るようになったことは、普通の新人も半年で出来るようになること
・君が半年かかったことも、センスのある新人なら1-3ヶ月で習熟してしまう可能性もあること
を考えておかないといけない。
威張り散らす必要はないけど、あの人イマイチだよねって言われ続けるのも辛いでしょ。
適性がないところを職業にするのは悲惨だと思うぞ。自分の適性はよく見極めた方がいい。
逆に、君にセンスがあり、
・普通の人なら半年かかるところを3ヶ月で会得
なら、やっているうちにどんどん差が勝手についてしまうわけでね。

681 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/03(日) 18:46:19.12ID:lZQcP+Ql0
>>680
まあ数学とプログラムとでは、双方に互いに似たような思考方法を行う、という意味では大枠同意します
特に「証明」に拘っているわけではないのですが、拘ってしまいました…忘れてください…

682デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/03(日) 19:04:33.85ID:Gq7SJlPXa
てか、プログラミングは数学の範疇に入らないか?
計算機に実行させる計算手順書だし。

683デフォルトの名無しさん (ワッチョイ 6681-NeLc)2017/12/03(日) 19:21:36.44ID:VV4Obou10
演劇の台本や楽譜と同じかも

684デフォルトの名無しさん (スップ Sd0a-DJnL)2017/12/03(日) 19:24:20.13ID:cNDBFknwd
プログラムと呼ぶね。

685デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/03(日) 19:37:50.46ID:iOWX59aS0
>>682
個人的にはComputer=計算機ってのはかなり違和感があるんだよね。
プログラミングって、むしろシーケンサだろ。(処理手続きをひたすら記述する)

数学に似てるのは、結局、チューリングマシンからきてるのだと思う。
もちろん「このプログラミング言語はチューリング完全です」なんてやってるのは数学者であって。

これとは逆に、ニューラルネットワークなんて、正直、まともに証明すらされてないだろ。
なんだか分からないけどうまくいきます、程度であって、
ニューラルネットワークがチューリング完全なのかどうか、誰も証明して無いと思うし、(俺の知る限り)
それ以前に、プログラミングなんて出来る状態じゃない。
今も機械学習で係数を探している程度、つまりトライアンドエラーしか出来ていないわけであってさ。

だから、将来的にニューラルネットワーク等、チューリングマシン以外をプログラミングできるようになれば、
数学じゃないプログラミング手法が見つかる可能性はあると思う。
実際、機械学習自体は物理/数学の教え方(理論を教えてそれを適用)ではなく、
語学の教え方(習うより慣れろで、ひたすら知識(結果)を積み上げる)に近いし。

686デフォルトの名無しさん (ワッチョイ ea87-UEA0)2017/12/03(日) 19:49:02.04ID:mBtOatwk0
ところで、人工知能のバグ取りってどうやんの?
それともダメな子だから抹殺しちゃうの?

687片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd0a-umKW)2017/12/03(日) 19:55:52.62ID:Tj0BwQTkd
人格と知識は分離可能になるだろう。人格モジュールを切り替えたり、アップデートするんだろう。

688デフォルトの名無しさん (アークセー Sxbd-DJnL)2017/12/03(日) 19:56:57.90ID:P+US4smox
>>686
中共ならね。

689片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd0a-umKW)2017/12/03(日) 19:59:03.71ID:Tj0BwQTkd
自分自身が間違っていると判定されたら(サニティチェック)、「人格を初期化または取り換えて下さい」と表示される。

690デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/03(日) 19:59:37.86ID:Gq7SJlPXa
>>683
あー。楽譜ね。そうだね。

691デフォルトの名無しさん (ワッチョイ 39c7-ckDd)2017/12/03(日) 20:28:07.15ID:ygxXPxE/0
何この流れ

692デフォルトの名無しさん (ワッチョイ f18a-9xBG)2017/12/03(日) 23:11:24.01ID:/SSODGhG0
>>685
シーケンサってコンピュータの一種じゃ…?
というか計算しないで手続きだけひたすら書くのって
わりと特殊な方じゃないかな

693デフォルトの名無しさん (ワッチョイ 398a-fjL1)2017/12/03(日) 23:16:12.49ID:HfDj5Ysw0
シーケンサー(通称PC)はアセンブラもあったりするけど
基本デノイマンだよ。

694デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/04(月) 01:19:52.82ID:WOZLf3PZ0
>>692
それはCに階層記述能力が欠けているからだ。

例えばNode(JavaScript)のコーディングルールでは、関数は15行以下にしろとなっている。
> Write small functions
> Keep your functions short. A good function fits on a slide that the people in the last row of a big room can comfortably read.
> So don't count on them having perfect vision and limit yourself to ~15 lines of code per function.
> https://github.com/felixge/node-style-guide#functions-1
やれば分かるが、15行で書く為には、中位記述と下位記述を明確に分け、下位記述は全て関数で括り出すことになる。
このとき、中位記述の関数はベタに手続きだけひたすら書くことになる。
俺も最初は戸惑ったが、実際、この方が読みやすいし、自己ドキュメント化する。

ただしCだとこれはちと辛い。
JavaScriptだとそもそも下位記述がほぼ無く、大体何かしらのメソッドを呼んで終わるし、
階層を自由に作成できるし、プロトタイプ宣言も必要ないし、デフォでクロージャだから外変数を自由に掴める。(引数にする必要がない)
Cだと関数内関数が出来ないし、プロトタイプ宣言も必要だし、全部引数で渡さないといけないし、
GCも無いから宣言スタイルでも書きにくい。また、関数呼び出しも無駄ならケチる文化もある。

最大15行なら、実際は5-10行の関数が氾濫することになるのだが、Cでこれをやるとよけいに読みにくくなる。
だから、Cでは珍しいだろうけど、JavaScript等手抜き系スクリプト言語だったら割と普通だったりするはずだよ。

695デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/04(月) 05:34:47.44ID:k2OIwnad0
ただ単にCが嫌いなだけだね

696デフォルトの名無しさん (ワッチョイ 6d81-JjO2)2017/12/04(月) 06:16:54.02ID:+uAdunIC0
Cはクラスがないせいで戻り値が使い物にならん
中でMallocして返すとすぐメモリリークする

文字列や配列を扱う関数は
第一引数と第二引数に結果格納用の配列と最大長を渡すというまだるっこしい作業をせんといかん
Cで言語を学ぶと悪いコーディングの癖がついてしまう

697デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/04(月) 06:36:05.53ID:k2OIwnad0

698デフォルトの名無しさん (ワッチョイ 6d81-JjO2)2017/12/04(月) 19:47:02.53ID:+uAdunIC0
そんなにばかなことをいっただろうか

699デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/04(月) 19:55:28.93ID:vegQ3dVaa
馬鹿っぽさ満載

オブジェクトへのポインタを1つ追加するだけでリエントラントな作りになるだろうに。

701デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/04(月) 20:15:20.01ID:vegQ3dVaa
構造体へのポインタでも使ってくれ

702 ◆QZaw55cn4c (ワッチョイ 4a60-L6cJ)2017/12/04(月) 20:20:54.93ID:ESsPBxjD0
>>696
それがいい習慣というものです、配列(の先頭)と文字列長をセットで扱うのは基本中の基本です
win32api をみればわかりますが、一度目には自分が用意しなければならない領域の大きさについてお伺いをたててから、
二度目にやっと目的の情報を手に入れる、これは C ではセットですね

c++ で文字列型のような便利なアイテムを使っていたために、だんだん馬鹿になってきていたことに、最近ようやく気がつきました:−)

703デフォルトの名無しさん (ワッチョイ 5db3-7XMe)2017/12/04(月) 20:28:21.15ID:jfjVyC4z0
バッファの大きさを受けて範囲内で書き込む sprintf じゃなくて
sprintf のフォーマット処理した結果、こんだけの大きさが欲しいって答える関数はないのかな

704 ◆QZaw55cn4c (ワッチョイ 4a60-L6cJ)2017/12/04(月) 20:33:29.89ID:ESsPBxjD0
>>703
そうそう、それほしいですね

705デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/04(月) 20:43:45.92ID:vegQ3dVaa
>>703
snprintf

706 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/04(月) 20:49:24.61ID:ESsPBxjD0
>>705
snprintf() は >>703 の希望をかなえてはくれないのでは?

707デフォルトの名無しさん (ワッチョイ 5db3-7XMe)2017/12/04(月) 20:50:25.96ID:jfjVyC4z0
>>705
snprintf は 渡した大きさで打ち切ることはするけど、完全に必要なサイズを返すっけ?
書き込んだ文字数だから打ち切った場合たかだか渡した大きさ-1 だと思うけど

708デフォルトの名無しさん (ワッチョイ 5db3-7XMe)2017/12/04(月) 21:02:20.28ID:jfjVyC4z0
>>707 自己レス
C99 から戻り値が完全な長さを答えてくれるみたい
なので len = snprintf(buf, 0, .... ); len+1 以上確保して snprintf(buf, len+1, .... );
これが出来るのか

709 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/04(月) 21:07:28.32ID:ESsPBxjD0

710デフォルトの名無しさん (ワッチョイ 967f-HOnN)2017/12/04(月) 22:32:25.86ID:TOOi+5oW0
>>708
普通は、とりあえずやってみて戻り値判定したあと切り捨てられていたら大きめのバッファにreallocしてつかうんじゃないかな。
確保するメモリサイズは一定の方がいいと思うんだ。

まぁ、Cなら大抵の場合、サイズオーバーでエラー処理へとばす気もするけれど。。。。

711デフォルトの名無しさん (ワッチョイ 6d9f-HgL3)2017/12/04(月) 22:35:03.23ID:iGjrIGoV0
asprintf() も良いよね。
GNUの拡張だけど。

712デフォルトの名無しさん (ブーイモ MM8e-cp23)2017/12/05(火) 00:24:41.12ID:64NxbaBtM
a55h01e()もいいぞ
拡張するとアレだけど

713デフォルトの名無しさん (ワッチョイ 1e8a-mhkU)2017/12/05(火) 01:57:36.13ID:hFLcfi/C0
>>694
頭悪そう
分割数に依存してO(n**2)で命名の手間が増える
O(n**2)は行かないかもしれないがO(n)よりは大

714デフォルトの名無しさん (ワッチョイ 3d93-kA4S)2017/12/05(火) 06:27:11.01ID:h9iE2Dgl0
>>708-709
manの「準拠」のところで、snprintf()の第2引数sizeに0を指定できる、
返り値を必要なバッファサイズを決めるのに使えると明記されてるね。
これは有難い。

>>712
エリートな人だなぁ。俺にはよく分からんけど…
男は度胸! 何でもためしてみる、か。

715デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/05(火) 09:17:09.05ID:lXQHSkZJa
>>712のやつは多分中々みつからないと思うぞ。>>712のPCのディスクの中か心の中にしかないんじゃないか?w

716デフォルトの名無しさん (ワッチョイ a66e-hJGX)2017/12/05(火) 10:03:46.62ID:5svgdXUG0
asshole

717デフォルトの名無しさん (スプッッ Sdea-DJnL)2017/12/05(火) 10:08:31.35ID:hd3ECn32d
>>712
ムカついたらその関数名いただくわ。

718 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)2017/12/05(火) 10:25:15.57ID:x6DQdw1l0
char aznable は、いつか、やるかも、しれない

719デフォルトの名無しさん (ワッチョイ 3d93-kA4S)2017/12/05(火) 19:06:50.63ID:h9iE2Dgl0
-able は「〜することができる」という意味を加える接尾語と解釈できるから
azn と略せる何か動詞っぽい操作を思いつけば char aznable; を
「合法的に」使うことができるね。

単なるフラグなら int なり bool なりを使え、と言われると弱いけど。

720デフォルトの名無しさん (ワッチョイ a99f-kgrz)2017/12/05(火) 20:13:34.78ID:bbZMw2AU0
>>713
横だが
関数名が事実上のドキュメントになるんだよ

721デフォルトの名無しさん (ワッチョイ 1e8a-mhkU)2017/12/05(火) 22:18:54.85ID:hFLcfi/C0
15行の関数量産したらfunc1, func2, ...となるのが目に見えている

途中の欠番で変更履歴の推測も可能
素晴らしいドキュメントだな

722デフォルトの名無しさん (ワッチョイ 6d81-JjO2)2017/12/05(火) 22:26:12.48ID:CCSnWp9D0
なるわけないだろ絶対ならない

723デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)2017/12/05(火) 22:46:50.50ID:oTa/T8dQ0
ファンクなあ。
アシッドテイストを入れてもう少しオサレな感じにすれば爆発的にヒットするだろうになあ。

724デフォルトの名無しさん (ワッチョイ 3d9f-JjO2)2017/12/05(火) 23:16:38.70ID:KWhjoBwr0
>>721
私は馬鹿です、まで読んだ

725デフォルトの名無しさん (ワッチョイ 6681-NeLc)2017/12/06(水) 00:22:59.42ID:6EAgLXyL0
関数名はプログラマがこう動いて欲しいという願望まで

726デフォルトの名無しさん (ブーイモ MM8e-cp23)2017/12/06(水) 00:44:05.84ID:2vt65plVM
func なんて関数名見かけたら fack に置き換えるわ

727デフォルトの名無しさん (スップ Sdea-aUI1)2017/12/06(水) 01:05:14.08ID:fTW9mDM3d
oh miso sperm

728デフォルトの名無しさん (ワッチョイ 7db3-VWpS)2017/12/06(水) 08:50:44.53ID:GNciMIPS0
変数名とか省略禁止なのにfunc

もうkansuu()って関数名にしとけよ

730デフォルトの名無しさん (ワッチョイ b623-ZQia)2017/12/06(水) 11:49:40.40ID:vFG2ezd00
>>728
ドイツ語とか関数名変数名だけでコード9割埋まりそう

そう考えると世のプログラミング言語のベースが中国語だったら表意文字だしだいぶ可読性高そう

732デフォルトの名無しさん (ワッチョイ a5ea-7XMe)2017/12/06(水) 12:52:19.56ID:okTVVyb50
その昔日本語BASICってあった

日本語はむしろ同じ物を表す書き方が平仮名片仮名漢字と何通りもあるから面倒だろ。

表のように与えられた時各学年の人数と全校の人数をふ計算するプログラムを教えてください。
できれば今日中に。


1組 2組 3組 4組 5組
1年 33 35 34 32 36
2年 34 33 35 33 31
3年 31 32 36 30 35

735デフォルトの名無しさん (ワッチョイ 5d8a-J59I)2017/12/06(水) 17:00:52.31ID:WZX+cLKR0
入力させる文字の指定ってstrchrでOKです?

736片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd0a-umKW)2017/12/06(水) 17:23:48.59ID:uR2+ZG62d
婦警さん?

737デフォルトの名無しさん (ワッチョイ 8a87-8ufQ)2017/12/06(水) 17:35:06.56ID:dghGKPLV0
>>734
明日の朝、学校行く前に覗いてみ

738デフォルトの名無しさん (ワッチョイ 3d93-kA4S)2017/12/06(水) 17:36:10.79ID:mUQybk730
>>734 は学校の宿題か課題の代行をタダでやってくれ、みたいに見えるなぁ。
親切心で教えることが質問者のためになるか疑問ってこと。

元のデータはどういう形で与えられるのかな。
質問の内容から見て、学年数もクラス数も一定で
配列としてソースファイルに埋め込みで良さそうだけど。

学年数やクラス数まで実行時の入力によって可変、となると
かなり面倒な話になるね。

739デフォルトの名無しさん (ワッチョイ 8a87-8ufQ)2017/12/06(水) 17:55:56.74ID:dghGKPLV0
安心して翌朝覗いてみたら何も上がってないという寸法さ

740デフォルトの名無しさん (スプッッ Sd0a-hmNI)2017/12/06(水) 18:30:27.51ID:YX7yBjoZd
execve関数を使うためにclearenv()で環境変数を初期化すると手順にあるのだけど
この関数の影響範囲をどう調べればわかるか調べ方もしくは影響範囲が知りたいです
manページを見ても名前と値の組の環境変数を〜みたいな話しかなくて困ってます

741デフォルトの名無しさん (ワッチョイ 599e-WpQb)2017/12/06(水) 18:48:00.75ID:8+NPe2ry0
マージャンの符計算かな

742デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/06(水) 20:41:52.15ID:5GqDQnIfa
>>734
宿題用のスレなかったっけ?
C言語のはなかった?

743デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/06(水) 20:42:56.94ID:5GqDQnIfa
>>735
君のやりたいことがよくわからない。

744デフォルトの名無しさん (アウアウカー Sa55-iHXH)2017/12/06(水) 20:50:51.97ID:5GqDQnIfa
>>740
影響範囲?そりゃ環境変数使うプログラム全てだろう。特にPATH使うようなやつ(外部コマンドをフルパス使わずに動かす可能性のあるプログラム)は影響受けるよね。
その他、動かすコマンドによって影響は違うと思う。これから動かそうとしているコマンドがどういう環境変数を使うかに掛かっている。だからこうだと固定的に言うことができない。

745デフォルトの名無しさん (スプッッ Sd6d-hmNI)2017/12/06(水) 21:47:43.97ID:9SICms2Nd
>>744
無知ですまんが
環境変数をクリアするってことは要はLD_LIBRARY_PATHに登録されてるものをすべて無にするってことなのだろうか
これは一時的なもの?それとも永続的なもの?

ここらを参考にsystem関数ではなくexecveを使う方針になったのだけど
むしろ改悪になってるんじゃないかとなってきている
https://www.jpcert.or.jp/sc-rules/c-env33-c.html
http://www.jpcert.or.jp/m/sc-rules/c-env03-c.html

下を読んでなんとなく何がリセットされるのかはわかってきたけども
それがどう影響を与えるのだろうかと
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c703.html

746デフォルトの名無しさん (スプッッ Sd6d-hmNI)2017/12/06(水) 21:52:07.31ID:9SICms2Nd
下記のように書いてあるけども
むしろ影響範囲でか過ぎるんじゃねぇか?ってのが困ってるところ
確かに改竄とかの対策にはなるとは思うんだけど
リセットしてしまったことによって使えなくなるものについてはどう担保するのかがわからない

このクリアが呼び出した関数内だけなのか、呼び出したプロセスやスレッドだけなのか、呼び出したら再起動までずっとなのか、呼び出したら再起動しても以降ずっとなのかと


(2) 環境変数のクリア
外部プログラムをコールする(exec(3))前に、環境変数をすべてクリアするとより安全になる。環境変数をクリアするには、clearenv(3) をコールすればよい。

clearenv(3) が無い環境では、以下のように extern char **environ 変数を直接クリアする。
environ = NULL;
※上記の方法で環境変数をクリアしても、system (3) による子プロセスの環境変数は、クリアされず再設定されたものになる。

747片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd0a-umKW)2017/12/06(水) 22:02:02.99ID:uR2+ZG62d
婦警さんするなら、婦警の制服が必要。

748デフォルトの名無しさん (ワッチョイ 6d9f-nek4)2017/12/06(水) 22:02:54.34ID:u7C0REjG0
>>745
一時的もなにもそれを実行したプロセスとそのプロセスからexecしたプロセスにしか影響しないよ。だからfork()後に子プロセスだけでやるなら親プロセスには影響しないしその他無関係なプロセスにも影響はない。

749デフォルトの名無しさん (ワッチョイ 6d9f-nek4)2017/12/06(水) 22:05:07.83ID:u7C0REjG0
>>745
環境変数はシステム全体で一箇所に持っているものではなくプロセス単位で持ってるものだからね。そしてexecの時に引き継ぐ事もできるようになってるだけ。

750デフォルトの名無しさん (スプッッ Sd6d-hmNI)2017/12/06(水) 22:31:14.96ID:9SICms2Nd
>>748
>>749
イケメンな回答ありがとう
それってどこを見たら分かるものなのだろうか
俺調べるのが苦手でどれがそのことを示してるのだろうか
その的確な回答をしてくれてとても分かりやすくてとても助かってるが俺も自身でわかるようになりたい

751デフォルトの名無しさん (ワッチョイ 6d9f-HgL3)2017/12/06(水) 23:56:33.03ID:QVT4XBLu0
>>750
環境変数は大昔から使われているものでどのOSでも多分同じだ。
まずはここを見ると良い。
https://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0

752デフォルトの名無しさん (ワッチョイ 17d3-vw7f)2017/12/07(木) 00:29:29.78ID:X12IxieF0
初心者です
時間取得の関数で待ち時間を作るの方法は使わずに、
現在の処理の完了した後、次の処理に移らせるにはどのようにすればいいんですか?

現在の処理が始まった瞬間に次の処理に移ってしまいます


現在の処理とは、マウスポインタの操作です

お願いします

753デフォルトの名無しさん (ワッチョイ d79f-qmOZ)2017/12/07(木) 00:53:41.38ID:9lSPChPb0
>>752
おそらくそれだけの説明では大半の人が答えられないと思う。(エスパーを除く)

754デフォルトの名無しさん (ワッチョイ 9f87-Nf6k)2017/12/07(木) 01:27:41.37ID:07dplzZ20
マウスイベントの取得はOSの仕事
OSのAPIドキュメント見れ

755デフォルトの名無しさん (スップ Sd3f-KxrP)2017/12/07(木) 07:52:13.51ID:6ZyfpAbkd
>>751
中身見てみたけどプロセスごとに環境変数が割り振られてるってどれが意味してるのだろうか
homeとかいろいろなものがあるのはわかったのだが....

756デフォルトの名無しさん (ワッチョイ 5793-3gxb)2017/12/07(木) 08:07:08.94ID:W1nCZ1Cb0
>>755
「概要」の第3段落冒頭かな。
「環境変数は、各プロセスに付随するデータである」

この1文から「プロセスごとに環境変数は独立」を読み解くのは
この手の文章に対する程度の慣れが要求されるかも。

757756 (ワッチョイ 5793-3gxb)2017/12/07(木) 08:28:21.42ID:W1nCZ1Cb0
最後の行は言うまでもなく「ある程度の慣れ」が正しい。
「ある」を打ち忘れたアル。

758デフォルトの名無しさん (スップ Sd3f-KxrP)2017/12/07(木) 10:59:56.67ID:6ZyfpAbkd
>>756
納得した
確かにそう読める


waitpidで大気中に割り込みとか入ったらどうなるか教えてくれませんか
manには記載がなかったです

マトリックス・リローデッドみたいな話だな。

760デフォルトの名無しさん (ブーイモ MMbb-t4sk)2017/12/07(木) 11:44:46.46ID:CZv4Zvq/M
>>758
ハード的な割込みそのものはプロセスに影響しないよ。
そいつがシグナル出したらそれ次第だが。

761デフォルトの名無しさん (スップ Sd3f-KxrP)2017/12/07(木) 12:10:49.09ID:6ZyfpAbkd
>>760
そいつというと親プロセスでしょうか子プロセスでしょうか
知りたいこととしてはwaitpidを親プロセスが処理を抜けるタイミングについてです
エラーを受けたら抜ける、正常に終了したら抜けるってのはわかったのですが、
これ以外にwaitを解くタイミングがないのかと

762デフォルトの名無しさん (ブーイモ MMcf-t4sk)2017/12/07(木) 18:20:26.00ID:8aHRDFHpM
>>761
waitpidの仕様を聞くんじゃなくて、何をしたいか書く方が早いよ

763デフォルトの名無しさん (ワッチョイ 57b3-4bIM)2017/12/07(木) 18:30:02.50ID:3Bgd1/LJ0
ゲスパーするとタイムアウト付で waitpid のブロッキングから帰ってきて欲しいんでないの?

764デフォルトの名無しさん (ブーイモ MMcf-t4sk)2017/12/07(木) 20:44:53.40ID:8aHRDFHpM
ブロックしないオプション知らないのかな
manまったく読めてねーな

765デフォルトの名無しさん (ワッチョイ 1feb-F7Qh)2017/12/08(金) 09:22:37.83ID:T81djMMQ0
セール中

ハロー“Hello, World” OSと標準ライブラリのシゴトとしくみ
http://www.amazon.co.jp/dp/B01GH9AM8C

766デフォルトの名無しさん (ワッチョイ bfe7-IpD3)2017/12/08(金) 10:17:23.50ID:/XUBF9/70
“Hello, Work”標準派遣のシゴトとしくみ

サイバーセールは他に買いたいものがいろいろあるからなあ

768デフォルトの名無しさん (ワッチョイ 17b3-LVSJ)2017/12/09(土) 19:00:18.23ID:wLDySn0e0
乱数を使って異なる4つの数を作りたい
色々調べると a[10] = {0,1,2,〜,9};
を作って4つランダムに抜き出すとかも見つけたんだけどこれでも重複回避方法がわからん...

>>768
重複しないってルールがある時点で
乱数ではない件について小一時間説教をしたい

770デフォルトの名無しさん (ワッチョイ bfb6-QZHg)2017/12/09(土) 19:28:52.45ID:oe+MwYG+0
>>769
乱数を作りたいと言ってるわけじゃないわけでー

771片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 17b3-n3/l)2017/12/09(土) 19:31:17.31ID:nSkNRr7y0
n個の中から1つ選ぶ。
n-1個の中から1つ選ぶ。
n-2個の中から1つ選ぶ。
。。。

772片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 17b3-n3/l)2017/12/09(土) 19:31:57.38ID:nSkNRr7y0
選んだものには印を付ける。

773デフォルトの名無しさん (ワッチョイ 9f12-F7Qh)2017/12/09(土) 19:36:25.25ID:nZ8OLT0i0
配列に連番で入れて
配列をシャッフルして
配列の先頭から4個抜きとる

お手元のトランプで試してみろよ
絶対に重複しないから

774デフォルトの名無しさん (ワッチョイ 17b3-0+aW)2017/12/09(土) 19:38:14.85ID:f1LM7KYB0
とりあえず異なる4つの数を作りたいって言ったけど最終目標がHit&Blowだからマクロについて学んでくる

775デフォルトの名無しさん (ワッチョイ 17b3-0+aW)2017/12/09(土) 19:39:02.99ID:f1LM7KYB0
あっスマホとPCでID変わるんだった

776デフォルトの名無しさん (ワッチョイ 17b3-0+aW)2017/12/09(土) 19:40:07.11ID:f1LM7KYB0
配列をシャッフルか...なるほど...

777デフォルトの名無しさん (ワッチョイ 5793-3gxb)2017/12/09(土) 19:59:49.27ID:0DJ42hmW0
配列をシャッフルするって方法は、カードゲームや麻雀の洗牌で使うよね。
文字通りシャッフル、一揃いの順番を混ぜ合わせる操作として。
連番で初期化した配列の、乱数で選んだ2つのインデクスの要素同士を入れ替え。
ある程度の回数ループさせると重複なく順番がバラバラになる。

他には、素朴な乱数ルーチンと組み合わせて乱数の質を改善する方法として
乱数プール(配列)の中から乱数で選んだ(インデクスの)値を出すってのを
見たことがある。
最近は高品質な生成アルゴリズムを使うのだろうけど。

778デフォルトの名無しさん (ワッチョイ ff80-8EI8)2017/12/09(土) 20:34:35.00ID:zmyZSbxv0
「Fisher-Yates shuffle」で検索!

779デフォルトの名無しさん (ワッチョイ 578c-FlEo)2017/12/09(土) 20:41:26.15ID:gdFl+nNB0
>>連番で初期化した配列の、乱数で選んだ2つのインデクスの要素同士を入れ替え。
>>ある程度の回数ループさせると重複なく順番がバラバラになる。

それは初心者にありがちな悪手。回数を増やすと見た目はランダムっぽく
なるけどあまりランダムにならない。
1枚目を全体からの一様乱数、2枚目を残りから一様乱数、・・・という具合に選ぶのがいい

780片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-n3/l)2017/12/09(土) 21:03:49.72ID:uxECPca0d
std::shuffle,
古いコンパイラならstd::random_shuffle

781デフォルトの名無しさん (ワッチョイ d79f-qmOZ)2017/12/10(日) 06:04:19.96ID:J0bkBqjd0
それはC言語ではなかろう

782デフォルトの名無しさん (ワッチョイ bfe7-IpD3)2017/12/10(日) 08:43:45.99ID:q697l8m20
リングバッファで選んでないものを探す。

783デフォルトの名無しさん (ワッチョイ 17b3-LVSJ)2017/12/10(日) 11:45:02.06ID:jSvVl/bp0
昨日の768です
Fisher-Yates shuffle
が凄く役に立ちました。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void shuffle(int ary[], int size);

int main(void) {
int list[10] = { 0,1,2,3,4,5,6,7,8,9 };

shuffle(list, 10);
for (int i = 0; i < 10; i++) {
printf("%d,", list[i]);
}
return 0;
}

void shuffle(int ary[], int size) {
for (int i = 0; i < size; i++) {
int j = rand() % size;
int t = ary[i];
ary[i] = ary[j];
ary[j] = t;
}
}

784デフォルトの名無しさん (ワッチョイ 17b3-LVSJ)2017/12/10(日) 11:47:09.13ID:jSvVl/bp0
これだと10桁表示されてしまうので、4桁分表示するように変更
色々有り難うございました
HitとBlowの処理行ってきます

785デフォルトの名無しさん (アウアウカー Saeb-I8sf)2017/12/10(日) 18:48:03.62ID:xLxKGjo5a
4桁なら乱数4つ求めた後で重複調べてあったらまた求めるっての繰り返しても良いんじゃないか?

786デフォルトの名無しさん (ワッチョイ ff80-8EI8)2017/12/11(月) 06:21:58.84ID:4q7JrCp00
arySize = 10
range = 0...arySize # 未満
ary = range.to_a

def shuffle(ary, size, range)
for i in range
j = Random.rand(size)
puts "i=#{i} ← j=#{j} : value #{ary[i]} ← #{ary[j]}"

ary[i], ary[j] = ary[j], ary[i]
end
end

shuffle(ary, arySize, range)
p ary

i=0 ← j=8 : value 0 ← 8
i=1 ← j=9 : value 1 ← 9
i=2 ← j=2 : value 2 ← 2
i=3 ← j=9 : value 3 ← 1
i=4 ← j=7 : value 4 ← 7
i=5 ← j=5 : value 5 ← 5
i=6 ← j=4 : value 6 ← 7
i=7 ← j=8 : value 4 ← 0
i=8 ← j=7 : value 4 ← 0
i=9 ← j=9 : value 3 ← 3
[8, 9, 2, 1, 6, 5, 7, 4, 0, 3]

>j = Random.rand(size)
Ruby で書いたけど、これだと、0〜9 のまま一定だろ。
Fisher-Yates shuffle では、ループの度に、1ずつ減らさないといけないよな?

787デフォルトの名無しさん (ワッチョイ 5793-3gxb)2017/12/11(月) 06:51:09.15ID:IqtrAjQN0
>>779
Fisher-Yates shuffle で検索したら、関連情報として >>777 の方法が
良くないことと、その理由が説明されてるページが見つかった。

可能な並べ方の全パターンが等しい確率で出現するか否か、
というアルゴリズムの原理からの比較は分かりやすくて説得力があった。

個人のページみたいなのでリンクは張らないけど、
「Fisher-Yates shuffle ランダムシャッフル」で出るかと。

最初から全部の組み合わせの分のテーブル作っておいて、
そいつを乱数で選ばせりゃ一発で決まりだろ?

789デフォルトの名無しさん (ブーイモ MMbb-t4sk)2017/12/11(月) 11:17:47.55ID:lUrRZ9vjM
何個いるんですかね?

いまどきハードディスクなんかテラバイト単位でデータ持てるじゃん。

791 ◆QZaw55cn4c (ワッチョイ 9f60-T0Wg)2017/12/11(月) 12:04:58.55ID:maeT9tJH0
ふつうに Fisher-Yates でいいと思うよ

792デフォルトの名無しさん (アウアウカー Saeb-I8sf)2017/12/11(月) 12:51:29.67ID:h/GY+Pada
>>788
おお。斬新なアイデア。
4つしかなくて0〜9ならそれでも問題ないな。(メモリが全然ないような特殊な場合を除いて)。

それするなら、0〜9999の乱数を求めて各桁を使えばいい
配列を作る必要はない

違った。重複しちゃだめだった

>>791
トランプゲーム作った時は真面目にカード配列ん中シャッフルしたわな。懐かしい、

796デフォルトの名無しさん (ワッチョイ 9fe1-xR0X)2017/12/11(月) 13:35:17.11ID:pAWgJfSj0
>>794
重複した時だけやり直せばいい気がする

>>793
各桁の検査の為に分解するんだからむしろ効率悪いんじゃね?

798デフォルトの名無しさん (ブーイモ MMcf-T+jR)2017/12/11(月) 17:12:57.06ID:Sy4nT1MaM
順列のN番目を求める式を作れば

799デフォルトの名無しさん (ワッチョイ b761-LVSJ)2017/12/12(火) 11:36:44.51ID:OaIMcnFX0
/wiki/シャッフル (カード)

各シャッフル方法をプログラムで再現するには・・・

800デフォルトの名無しさん (ワッチョイ d79f-qmOZ)2017/12/13(水) 01:28:00.37ID:bXzZ5Rwc0
>>788
作ってはみたが、なんかアホらしいなw
https://paiza.io/projects/yofogJfSk62gEukoMoCAtA

>>800
つうか、一回限りなら意味が無いかもな。
テーブルに出た回数も記録して同じ組み合わせは出ない様にも出来たり、テーブル自体も別系列の乱数でシャッフルするとか、
使い道は無限大さ。

なんとなくこねくり回しても数学的に無意味な感じがしてならない。

実務で使う関数とか数学的には何の意味も無いなんて、当たり前だろw

804デフォルトの名無しさん (ワッチョイ bfe7-IpD3)2017/12/13(水) 21:48:43.88ID:fGUxNoH20
AIが作ったと妄想してみる。

C言語覚えたい頼む
このアホに教えこんで理解させるとしたらまずなんのテキスト使う?
教え上手のおまいらに最後の希望を託す
(ちな言われたことは必ずやります)

806片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-n3/l)2017/12/13(水) 23:58:12.44ID:dNf1wD6/d
>>805
http://codepad.org/
このコードパッドというサイトで、「ハローワールド」を表示するプログラムを実行できたら、ほめてやろう。
C言語でプログラムを実行するには「おまじない」が必要だ。

807片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/14(木) 00:04:40.76ID:4rioyzzQd
しかも、そのおまじないは半角文字と全角文字を区別する。
一文字でも間違えたら正しく動かない。

808片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/14(木) 00:14:00.32ID:4rioyzzQd
確実に正しくプログラムを入力したいなら、「コピペ」すればいい。

809デフォルトの名無しさん (ワッチョイ 1f93-T0BP)2017/12/14(木) 07:54:19.09ID:XNEgxviE0
>>805 これまでのプログラミング言語の経験を申告してもらうかな。
「この辺の知識は既に持ってる相手」という前提があれば、
教える側としても出発点や道順を選びやすい。

810デフォルトの名無しさん (スップ Sd52-JSy5)2017/12/14(木) 10:53:53.27ID:j4kcZFN2d
>>809
アセンブラ一筋30年
x86, ARM, MIPS, SH, Z80, 6809, R8C, RL78, C2000, PIC, AVR, STM8, HAL9000, RX

>>806
片山さんチーッス!
後ほど報告しますね

>>809
FE試験でCASLを福島本で少々もちろん落ちました春再戦はCで挑みたく…
ほかPython本チラ見と開発環境整え中に他の試験のため頓挫

覚えたいが独学でグイグイいけるモチベもなく(あればここで泣きついてないw)誰かにゆるい階段のお膳立てをしてもらい登ってみようかと。これでだめならセンス無しでITから撤退しますw

812デフォルトの名無しさん (ブーイモ MM0e-oBDN)2017/12/14(木) 11:43:24.92ID:ZG1tcwsuM
>>810
6809案件って30年前はほぼ収束してないか?

813デフォルトの名無しさん (スプッッ Sd52-Ylr/)2017/12/14(木) 12:25:35.27ID:npthtwn/d
主曰く、Cは自らハックする者を救く

814デフォルトの名無しさん (ワッチョイ b260-4mDj)2017/12/14(木) 12:40:06.06ID:/7Md6pmo0
>>811
C++をやれ、accelerated c++ を必死に登れば、開運する

815デフォルトの名無しさん (スプッッ Sd52-2YlR)2017/12/14(木) 12:45:49.47ID:iWXm2kLzd
C曰く、我五chにて学に志す

816デフォルトの名無しさん (ワッチョイ b7ea-AOQJ)2017/12/14(木) 12:48:17.48ID:M3GbY6+F0
ところで IT と C言語 って割と隔たりないか?

817デフォルトの名無しさん (エーイモ SE52-x5Rz)2017/12/14(木) 13:39:55.18ID:viw49ZxRE
C99とかC14とかCにもいろいろ種類があるそうですが
特定の種類で書かれたソースコードであるかチェックしたいのでsouiu
lint toolってありませんか?

818デフォルトの名無しさん (ワッチョイ 92e1-kSiG)2017/12/14(木) 14:31:52.49ID:2joenvDO0
>>817
C14なんて聞いたこと無い
gcc には -Wc90-c99-compat と -Wc99-c11-compat オプションがある

819デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/14(木) 16:12:02.98ID:fPDEs5uN0
C14はC++14を勘違いしたんだろうね
Cの種類は、K&R, C90(C89), C99, C11の4つが主要バージョン
主要でないバージョンというと、primeval CとかC84などがある
C90をC89と言ったりするのは、ISO/IEC9899:1990がANSI X3.159-1989を追認する内容だからだ
日本語版のJIS X3010:2003はC99の直訳

820デフォルトの名無しさん (アウアウカー Sa6f-kaKc)2017/12/14(木) 16:29:20.24ID:8Y/Mk4+4a
>>803
いやほら乱数ってハードウェア利用せずに計算だけでやる場合は処理を複雑にしても無意味なことあるじゃない。

821デフォルトの名無しさん (アウアウカー Sa6f-kaKc)2017/12/14(木) 16:31:27.48ID:8Y/Mk4+4a
>>810
懐かしいのがあるなあ。

でもアセンブラできるなら覚えるの早いかも。

822デフォルトの名無しさん (ワッチョイ 1681-A+LL)2017/12/14(木) 16:33:32.52ID:tnwQop1o0
ワンタイムパスワードで送られてくる数字を事前に当てられたらすごいと思います

823片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ a7b3-wvVH)2017/12/14(木) 16:46:53.67ID:CLsAPy5t0
>>811
時間かかってんな。
「#include <stdio.h>
int main(void) {
printf("ハローワールド\n");
return 0;
}」
これだけ入力してrunさせるだけだぞ。

putsじゃだめなん?

825片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ a7b3-wvVH)2017/12/14(木) 17:01:48.84ID:CLsAPy5t0
>>824
putsは知らんヤツ多いし、教育上、発展的ではない。

826デフォルトの名無しさん (ワッチョイ b7ea-AOQJ)2017/12/14(木) 17:02:54.59ID:M3GbY6+F0
古典だし、コピペでもいいとしてるし
それなら printf にしときたい所存

827デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/14(木) 17:06:32.65ID:fPDEs5uN0
putsの使いにくさときたらアンタ・・

828片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/14(木) 17:43:18.92ID:4rioyzzQd
勝手に改行が入っちゃうのが不味いのかな。

829デフォルトの名無しさん (ワッチョイ 1681-A+LL)2017/12/14(木) 17:56:10.05ID:tnwQop1o0
fwrite で

830デフォルトの名無しさん (ワッチョイ dee7-hnOy)2017/12/14(木) 20:08:02.01ID:ixe7nO7C0
putsは使ってないな一行読み込みだしその後の文字加工がめんどくさいからprintfで済ましちゃうな

831デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/14(木) 20:15:34.79ID:wDiGnNfx0
初心者にprintfを教えると、信頼の出来ない文字列を第一引数として渡す事故が
起きかねないので教育上よろしくないのは常識

[MQ]Z はアホの代名詞

832デフォルトの名無しさん (アウアウカー Sa6f-kaKc)2017/12/14(木) 20:26:36.32ID:kKgdz6jma
printf("%s\n", "うふ");

833デフォルトの名無しさん (ワッチョイ cb8a-xcSB)2017/12/14(木) 20:39:43.33ID:jkby6cOl0
標準ライブラリ禁止な。

834デフォルトの名無しさん (スップ Sd52-WKox)2017/12/14(木) 21:08:44.70ID:MoDZh4zqd
>>805
高橋まな?の
やさしいC
って本がおすすめ

835デフォルトの名無しさん (ブーイモ MM63-VZi2)2017/12/14(木) 21:58:51.30ID:q6i5/Nc7M
プログラミング初心者です

struct hoge *tmp = NULL;
以下うろ覚え
tmp->hage = xxxxx;

最近上記のようなコードに出会いました
明らかにNULLなのにアロー演算子で参照してもぬるぽしないことってあるんでしょうか?

836 ◆QZaw55cn4c (ワッチョイ b260-4mDj)2017/12/14(木) 22:01:55.65ID:/7Md6pmo0
>>835
同じくありえない気がする

837デフォルトの名無しさん (ワッチョイ 772b-5suJ)2017/12/14(木) 22:16:14.39ID:a/3Oigfw0
tmp->hage = xxxxx は、0番地にアクセスしてるわけじゃなくて
0 + hageのオフセット番地にアクセスしてるわけだから、
hageのオフセット番地が有効なメモリまでズレてれば
ヌルぽしないんじゃない?

838デフォルトの名無しさん (スッップ Sd32-rGrM)2017/12/14(木) 22:18:38.35ID:Ka/BKddkd
組み込みならゼロ番地付近をアクセスするためにありうるかもな。
あるいは単にそのコード部分が動いていないか。

839デフォルトの名無しさん (ワッチョイ 1287-e1v7)2017/12/14(木) 22:18:39.02ID:+A9pd2E10
0番地に値を書くのと、ヌルポインタアクセスは見分けが付かないからなぁ

840デフォルトの名無しさん (ワッチョイ 1287-e1v7)2017/12/14(木) 22:20:06.59ID:+A9pd2E10
なので、NULLの値を全く違う値にしてる処理系もあるんだよ。

841デフォルトの名無しさん (ブーイモ MM63-VZi2)2017/12/14(木) 22:26:45.88ID:q6i5/Nc7M
>>837>>838>>839
皆さん凄いですね
確かにその可能性あるかもしれません
しばらくそのコードを確認できないので
確認できたら結果報告します

842デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/14(木) 22:35:39.57ID:JlwKPeYd0
>>810
HAL9000?
処理系あるんだっけ?

843デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/14(木) 22:37:16.44ID:ZN3qJoQh0
>>838
> 組み込みならゼロ番地付近をアクセスするためにありうるかもな。
これで当たりだと思うけど、
そもそも組み込み(≒MMU無し)ならどこアクセスしてもヌルポしないがな。

844デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/14(木) 22:43:41.09ID:JlwKPeYd0
>>835
そもそも何が起きてもおかしくない = なにも起きないかもしれない
から
コンパイラによってはコード生成すらしないことだってあり得るし

845デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/14(木) 22:47:13.04ID:JlwKPeYd0
>>843
> そもそも組み込み(≒MMU無し)ならどこアクセスしてもヌルポしないがな。
そんなもん機器による
ROM領域に書き込んだりなにも割り当てられてない領域を読み出したら例外を発生させるとか普通にある

846デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/14(木) 23:13:34.90ID:ZN3qJoQh0
>>845
その例外を発生させるものがMMUなんだが

847デフォルトの名無しさん (ブーイモ MM0e-oBDN)2017/12/14(木) 23:29:05.12ID:WS/Wft5WM
固定のアドレス範囲で例外出だけならMMUほどの複雑な機能いらないっしょ

848デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/15(金) 00:13:12.48ID:tW10X6gZ0
>>846
知ったか乙
アクセス対象がなかったらタイムアウトでバスエラーにするとかにMMUなんてものは要らん

849デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/15(金) 00:57:29.28ID:QRFEcBGB0
>>847-848
ゆとり死ね

つか組み込みの0番地なら普通にアクセスできるほうが多いと思うが。
ARMだとベクタのようだし。

850デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/15(金) 05:27:47.99ID:GBd6F7vt0
スタックポインタの初期値だね

851デフォルトの名無しさん (ワッチョイ 9776-JSy5)2017/12/15(金) 06:53:37.66ID:tJR4HiUM0
ARMだと未割り当てエリアのアクセスは例外発生する

>>849
> ゆとり死ね
指摘されたら逆ギレとかどっちがゆとりだよ w

> つか組み込みの0番地なら普通にアクセスできるほうが多いと思うが。
組み込みなんてピンきりだから普通にとか言っても意味ない
そもそも
> 組み込み(≒MMU無し)
の認識がおかしい

> ARMだとベクタのようだし。
ARMもピンきりでMMU持ってる奴も多いからARMだから0番地アクセスできるとか無知すぎる

853デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/15(金) 07:02:18.81ID:yuhdgz4g0
>>848
セグメントフォルト、バスエラーは同期例外だ
非同期(タイムアウト)でバスエラーなんか起きたら困る

知ったか乙

854デフォルトの名無しさん (スップ Sd52-cDjN)2017/12/15(金) 07:14:46.17ID:soFbbFtpd
C言語じゃないけど聞いて良いですか(´;ω;`)
バッチ利用して設定ファイル書き換えたい

1. ユーザーに入力してもらう
2. iniの値をそれで上書き

x.ini
AAA=1
BBB=2
CCC=3

AAA=1
BBB=192.168.0.1
CCC=3

キーはBBBで固定
設定値が少ないから一度全部読み込んで一行ずつtmpに書き込んで〜ってのも問題ない
一行ずつ読み込んで別ファイルに出力とかはできたんだけど
BBBなら〜って判別ができないです

855デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/15(金) 07:35:31.85ID:yuhdgz4g0
>>854
>C言語じゃないけど聞いて良いですか(´;ω;`)
ダメ

856デフォルトの名無しさん (スップ Sd52-cDjN)2017/12/15(金) 07:39:05.88ID:soFbbFtpd
>>855
そそそそんなぁ(´;ω;`)


まあそうだよね
すみませんでした

>>853
恥の上塗り乙
68Kだと普通の設計だぞ
https://www.slac.stanford.edu/BFROOT/www/Detector/DAQ/Infrastructure/Maint/177aih.pdf
あとバスエラーの定義はプロセッサによって異なるからプロセッサも限定せずに
> セグメントフォルト、バスエラーは同期例外だ
とか書くと知ったかがばれるので注意しろよ w

>>854
C言語でやりたいならここでいいけど、バッチでやりたいならこっち
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1489207631/

あとバッチはその手の文字列操作があまり得意でないので個人的にははPowerShellとか使った方が楽だと思う
【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1480109402/

859デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/15(金) 10:39:34.38ID:GBd6F7vt0
68kでのバスエラーとは/BERRがアサートされることで
何をセンスして/BERRをぶっ叩くかは基板次第だな

860デフォルトの名無しさん (ワッチョイ 6361-4pIx)2017/12/15(金) 11:50:37.48ID:lVqJ9ww50
PC-9801
0x000000 - 0x0003FF IVT(割り込みベクターテーブル)

まぁ弄るなら割禁とか保険かけるんで専用ライブラリ使うかアセンブラコード書くな。

割り込みと例外は違う
まあバスエラー相当が割り込みであがるアーキもあるけど

862デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/15(金) 12:46:09.63ID:GBd6F7vt0
longjmpやC++のthrowのような例外と割り込みは違うが
ソフトウエア割り込みだの記憶保護例外だのは割り込みと同列なもので
CPUのマニュアルでも同じ章に書いてある

例外割り込みって、割り込みの一部じゃね?

864デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/15(金) 13:49:05.09ID:yuhdgz4g0
>>857
この文脈ではメモリアクセスに伴って発生バスエラーであり、それが非同期って事はアスセスして読めた後で、やっぱさっきのなし、ノーカン、ノーカン

って事だぞ お前は班長か?

>>864
いやいや、そもそも読めないから。

866デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/15(金) 14:30:39.93ID:yuhdgz4g0
>>865
理解してない奴は、混乱の元だから割り込んで来ないように

867デフォルトの名無しさん (スッップ Sd32-JSy5)2017/12/15(金) 16:34:19.49ID:g34oCD75d
同期とか非同期とかどうでもいいだろ

868デフォルトの名無しさん (スッップ Sd32-JSy5)2017/12/15(金) 16:34:43.72ID:g34oCD75d
>>835とは関係ない

869デフォルトの名無しさん (スッップ Sd32-JSy5)2017/12/15(金) 16:36:08.94ID:g34oCD75d
C言語のヌルポとハード0番地って同じである必要は無いんだよね

870デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/15(金) 17:25:38.74ID:GBd6F7vt0
0xffffffff番地でもいいはずだね
要は、Cで合法的に定義されたオブジェクトが決して含まないアドレスを
1つ決めごと作っておいてそれを空ポインタということにしようということと
規格合致処理系はそれを必ず決めておかなければならないということ
C以外のたとえばアセンブラで定義されたオブジェクトまでがその規則に従うとは限らないし
そういうオブジェクトをCで扱えてはならないとまでは言ってない
あくまで自己責任でやる限り余計な邪魔立てはしない

ポインタはポインタであってアドレスではない
けど中途半端に知ってるとポインタとアドレスがイコールと思い込んでしまう
ヌルポインタはアドレスで説明できないポインタの例だね

バスエラーってのは、あらかじめ決めた領域以外をアクセスしょうとしたら発生するのであって、読んだ後にここ読めないからなんて動作はしない。
むしろ決めて無い場合は幾らでも読み書き出来てしまう。例えそれが嘘でも虚構でもな。
後からノーカンなんてならない。

873 ◆QZaw55cn4c (ワッチョイ b260-4mDj)2017/12/15(金) 20:59:24.98ID:kyib3K1A0
>>871
>例だね
ヌルポインタ以外に特異点はないのでは?

>>872
奇数アドレスからのワードアクセスでもでるぞ
なんとかしてくれる方が少数派かと

>>874
それは命令アドレスのLSB見りゃ即出せる罠

876デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/15(金) 21:26:18.69ID:yuhdgz4g0
>>872
わかってない奴は割り込むなって言っただろ
痛々しいぞ

>>876
お前がわかってないだけだろ w
68K の話ならデータが読めると言うのは DTACK のアサートで示される
その後に BERR をアサートしても受け付けなかったと思う
(そんなアホな設計はしたことないから本当にそうかどうかは試してないけど)
そもそも BERR は非同期じゃないからお前が初めから頓珍漢なだけ

>>874
68000 の時代はデータでもダメだったけど今時はプロセッサ側で何とかするアーキも多いと思う

intelの石はワードやロングワードのアクセスでも奇数アドレスからだろうとマシン側で何とかしてくれるから生き残ってるんだと思うわ

880デフォルトの名無しさん (ワッチョイ 4771-exlo)2017/12/15(金) 21:49:45.98ID:6FXlP8Zr0
プログラミング歴1年になったけどみんなの言ってることがわからなさすぎて辛い
アセンブリもやった方がいいんか?

881デフォルトの名無しさん (ワッチョイ ffb3-AOQJ)2017/12/15(金) 21:50:45.81ID:M+B7lc8R0
必要になったらやればいい

>>879
普通に組んでてあまりありがたみを感じたことはないけど...

883デフォルトの名無しさん (ワッチョイ eb55-ngMC)2017/12/15(金) 22:15:07.19ID:esYes5hp0
>>835
hogeがでかい配列で、オフセットの位置に確かに値が書かれているのを確認したことがある。
0番地付近のメモリを参照する人はいい迷惑だなと思った

884デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/15(金) 22:47:47.28ID:QRFEcBGB0
>>852
ゆとりマジで死ね
韓国人も死ね

お前らはそういう所がいけない。俺は逆ギレしているのではなく、単にキレてるだけだ。
お前らはそうやって常に話をすり替え、被害者ポジションを確保する癖があるが、それは根本的に間違ってる。
そもそも、ここにはお前らより知識のある奴が沢山居るんだから、お前らの聞きかじりで回答する必要はない。
話が余計におかしくなってるだろ。

話を>>841に対する回答に戻すと、841の話しぶりからして、
俺は以下を補足した方がいいと思ったから>>843を投稿したんだよ。
1. 841の言う「ヌルポ」はOSがMMUで捕まえるヌルポである。
2. >>838の言う「組み込み」はMMUがない場合を指している。
3. 838の言う「ゼロ番地付近をアクセス」はOS+MMUがない場合を想定している。
4. 従って838のケースでは841の想定するヌルポは発生しない。
というのを伝えるために書いたんだ。
それをお前は知ったかをしたくて、「MMUなら俺も知ってる!」と勝手に食いついてきただけ。
読む限り、お前は例外がどう動くのか理解できてないと分かるが、無知なままでいろ。
俺は841を助けようとしたのであって、韓国人とゆとりは死ねとしか思ってないから。

VBRを変更する場合、確かに0番地付近を構造体アクセスして転記するんだよ。
838はこれに気づいた、そしてそれを伝えた。
俺は841が「0番地アクセス=ヌルポ」と思っているっぽいので、(これは通常のOS+MMUならそうだが)
それとは違うぞと分かるように補足した。
それに知ったかゆとりが食いついてきただけ。

> プログラミング初心者です (>>835)
という点からしても、838で当たりだろう。
VBRを変更するならかなり初期で対応するので、初心者でも目に付く場所に記述される。

885デフォルトの名無しさん (ワッチョイ ef9f-v37J)2017/12/15(金) 23:13:36.36ID:i/+5VHc30
>>835
それをコンパイルするコンパイラの仕様とそれを実行するマシンアーキテクチャによって変わる。

886デフォルトの名無しさん (ワッチョイ ef9f-v37J)2017/12/15(金) 23:15:47.32ID:i/+5VHc30
OSによっても変わるかな。
まあしかしOSそのもののソースコードならそう書いて正常動作したとしても特におかしくないかな。

887デフォルトの名無しさん (ワッチョイ 1287-e1v7)2017/12/15(金) 23:17:08.62ID:BFk+79HN0
>>882
うん普通は何も考えない。
だから他の石を同じ感覚で使ってポインタ渡しした構造体のメンバーにアクセスして焦るんだわ。
intelの石ならこんな事起きないのにってな。

888デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/16(土) 00:41:25.75ID:wOa8xeUW0
>>884
頓珍漢な長文はチラ裏にでも書いとけよ

889デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/16(土) 00:43:03.04ID:wOa8xeUW0
>>887
いや、普通アライメントは合わせるだろ

890デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/16(土) 01:00:53.64ID:TBmZZU6f0
>>888
ゆとり死ね

てかマジな話、知らないのならちょっと様子見する余裕を持てよ。

891デフォルトの名無しさん (ワッチョイ 1ee9-gSDb)2017/12/16(土) 01:04:56.11ID:fQ+nYBte0
はあゆとり死ねとかマヂ意味わからんι……

892デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/16(土) 01:20:01.62ID:TBmZZU6f0
>>891
ゆとり死ね

俺はその理由も既に書いてる

893デフォルトの名無しさん (ワッチョイ 1ee9-gSDb)2017/12/16(土) 01:26:49.17ID:fQ+nYBte0
過去レスまでちゃんと読んで欲しいならコテ付けること☆

894デフォルトの名無しさん (ワッチョイ 4771-exlo)2017/12/16(土) 01:30:20.56ID:Ln4R8YhZ0
「韓国人」はこのスレだとNG推奨だゾ

895デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/16(土) 05:42:42.76ID:V7dZrSJp0
1点、気になるのがNULLと書いていたことだ
0番地にアクセスすることを意図しているコードは
struct hoge *tmp = NULL; ではなく
struct hoge *tmp = (struct hoge *)0; と書くだろう
思うに、単にtmpへの代入を忘れただけではないか?
そういうポカミスを多発するどんくさいやつほど
「変数は必ず初期化」に固執する

896デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/16(土) 07:59:04.78ID:wOa8xeUW0
>>894
まあ、ゆとりとか韓国人とか言い出す時点でお察しって奴やね w

897デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/16(土) 08:59:26.34ID:TBmZZU6f0
>>893
ゆとり死ね
韓国人死ね

俺が読めといっているのは>>884のことだ馬鹿タレ
どうせお前らは日本語が不自由で3行以上は読めないから意味が分からないのだろうが
お前らが迷惑行為を働くことに対して俺はキレてるんだよ


>>895
環境によってはwarningが出る。VC++とか。
個人的には意味ないとも思うが。

MMU とか VBR とか知ってる言葉を必死に使ってるって感じが出てて微笑ましいな

899デフォルトの名無しさん (ワッチョイ 92e3-4pIx)2017/12/16(土) 09:51:57.71ID:ocr1ZUEA0
>>895
初期化してなきゃ警告が出るのにね

>>897
お前は的外れなことしか言わねーな

900デフォルトの名無しさん (ワッチョイ b2f9-M+37)2017/12/16(土) 10:12:43.78ID:qv7q395J0
C言語に関する話題で意味のある文脈で韓国人なりゆとりなりが出てくることはまず無いだろうから、NGしとけばいいな。

901デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/16(土) 12:02:39.06ID:TBmZZU6f0
>>898
その程度の用語で威張れると思える時点で終わってる
ゆとりは本当に馬鹿だな

ゆとり死ね
韓国人死ね

902デフォルトの名無しさん (エムゾネ FF32-JSy5)2017/12/16(土) 13:04:37.50ID:MrWvRMOoF
>>901
後ろ二行は同意

> その程度の用語で威張れると思える時点で終わってる
>>884に言ってやれよ w

904デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/16(土) 13:34:31.45ID:TBmZZU6f0
>>903
ガチアスペか?
韓国人か?
それじゃ論理が通らんだろ

ID:KXDpqAfSM = ID:FCwL/bM6M = ID:wOa8xeUW0 = ID:tW10X6gZ0 = ID:JlwKPeYd0
お前だけがぶっちぎりの馬鹿だな

韓国人死ね

905デフォルトの名無しさん (ワッチョイ cb8a-QofM)2017/12/16(土) 13:41:28.81ID:J4pjF+US0
NULLが(void *)0になったのっていつからだっけ
C89には無かったよね?

906片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/16(土) 13:42:01.01ID:2NfYNG63d
おっぱいおっぱいぽよんぽよん
おっぱいおっぱいぽよんぽよん

仲良くしようぜ

907片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/16(土) 13:45:48.99ID:2NfYNG63d

908デフォルトの名無しさん (ワッチョイ ef9f-mLIQ)2017/12/16(土) 14:30:30.83ID:+Cq6iaDY0
>>906
つまりこうであると。

#include <stdio.h>

int main(int argc, char *argv[])
{
 int i, j;
 for (i = 0; i < 2; i++) {
  for (j = 0; j < 2; j++)
   fputs("おっぱい", stdout);
  for (j = 0; j < 2; j++)
   fputs("ぽよん", stdout);
  putchar('\n');
 }
 return 0;
}

909デフォルトの名無しさん (ワッチョイ ef9f-mLIQ)2017/12/16(土) 14:32:07.96ID:+Cq6iaDY0
そういや古いソースには char *p なのに if (*p == NULL) みたいに書いてあるのがあって、今時のコンパイラだと警告出しまくりになるんだよなあ。

910片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/16(土) 15:55:35.27ID:2NfYNG63d
>>908
こう書いてもいいね。
#include <stdio.h>
int main(void) {
int i;
for (i = 0; i < 8; i++) {
if (i % 4 < 2) fputs("おっぱい", stdout);
else fputs("ぽよん", stdout);
if (i % 4 == 3) putchar('\n');
}
return 0;
}

911デフォルトの名無しさん (ワッチョイ 1287-e1v7)2017/12/16(土) 16:43:18.46ID:CGnB4g3o0
NULLの値が、0xDEADC0DEになってる環境なら知ってる。

912デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/16(土) 17:20:00.24ID:wOa8xeUW0
>>904
頓珍漢な奴に論理とか言われてもなあ w

913デフォルトの名無しさん (ワッチョイ ef9f-mLIQ)2017/12/16(土) 17:23:42.81ID:+Cq6iaDY0
>>910
なるほど。

ちょっと変形してビット演算でも行けるな。

#include <stdio.h>
int main(void) {
 int i;
 for (i = 0; i < 8; i++) {
  fputs(i & 2 ? "ぽよん" : "おっぱい", stdout);
  if ((i & 3) == 3) putchar('\n');
 }
 return 0;
}

914デフォルトの名無しさん (ワッチョイ 92e1-kSiG)2017/12/16(土) 19:24:56.53ID:lAe10LAt0
#include <stdio.h>
#include <stdlib.h>
void o(){ fputs("おっぱい", stdout); }
void p(){ fputs("ぽよん", stdout); }
void r(){ puts(""); }
void e(){ exit(0); }
void (*a[])() = { o,o,p,p,r,o,o,p,p,r,e };
int main(){ void (**x)()=a; while(1) (*x++)(); }

915デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/16(土) 20:18:31.50ID:ftZRkd7o0
>>877
>struct hoge *tmp = (struct hoge *)0; と書くだろう

このように書いても*正しく*NULLポインタが代入される
char zero[(struct hoge *)] = {0};
memcpy(tmp, zero, sizeof zero);
としないとダメ

逆によく見かけるポインタを含む構造体をmemcpyで0に初期化するのも正しく無い

916デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/16(土) 20:46:52.08ID:V7dZrSJp0
>>915
それがわからんやつが、ここに、いや世界にいると思っているのか?
俺のはコードに意図を残すという論旨だったが、それがわからんやつがおまえさんか

ア ホ か

917デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/16(土) 21:04:20.92ID:ftZRkd7o0
意図を残すために間違ったコードを書くとは理解に苦しむ
コメントで残した方が数百倍マシ

918デフォルトの名無しさん (ワッチョイ 926e-zS+j)2017/12/16(土) 21:54:17.26ID:V7dZrSJp0
ほほう、どう間違ったと言うのかね?

919デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/16(土) 22:30:35.99ID:wOa8xeUW0
>>915
いったいそれと BERR になんの関係があるんだ?
ますます頓珍漢過ぎる w

920デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/16(土) 23:26:06.26ID:TBmZZU6f0
>>912
連呼リアン死ね

>>919
アスペ通り越してキチガイか?
まあどっちにしても死ね

921デフォルトの名無しさん (ワッチョイ eb55-ngMC)2017/12/17(日) 00:31:42.98ID:8cbKB5iV0
>>915
ポインタはmemcpyできるのか?

922デフォルトの名無しさん (ワッチョイ 5e8a-F+rF)2017/12/17(日) 04:55:34.79ID:vowUucL80
>>919
>>895と間違えてたな

>>921
memcpy(&tmp, zero, sizeof zero);
こうだね

923デフォルトの名無しさん (ワッチョイ cb8a-QofM)2017/12/17(日) 07:23:21.30ID:0WraWVJn0
標準ライブラリ使用禁止な

924デフォルトの名無しさん (ワッチョイ 12b3-jdna)2017/12/17(日) 08:07:20.40ID:RRxF0FwT0
>>920
> アスペ通り越してキチガイか?
基地害はお前だろ w
>>915のアンカー先見ろよ

925デフォルトの名無しさん (ワッチョイ ef9f-v37J)2017/12/19(火) 08:30:52.67ID:SEIe84in0
お、収まったか・・・

926デフォルトの名無しさん (ワッチョイ 12b0-+NpI)2017/12/19(火) 21:03:25.54ID:6p/5Z93J0
完全初心者です。文字列の性質について質問させてもらいます。

柴田望洋著 「ポインタ完全攻略」という書籍にて次のような内容の記載があります。

・文字列リテラルは変数ではないが記憶域を占有する
・文字列リテラルはcharの配列である

そして次のページに、
・このような文字列リテラルは、整数にいいかえると「定数」に相当するものであるから、自由に取り扱うためには
 変数に格納する必要性がある
・そこで利用されるのがcharの配列である

ここでわかりかねるのが、文字列リテラルというのはそもそも定義自体が「charの配列」であるはずなのに、
これをまた「charの配列」に格納するの??と、疑問に思ってしまったわけです。

これはいったいどういうことでしょうか。

927デフォルトの名無しさん (ワッチョイ eb55-ngMC)2017/12/19(火) 21:09:32.75ID:M/iOujl40
>>926

通常配列名かcharのポインタで参照するぐらい。

928片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/19(火) 21:18:36.23ID:3xf/peDqd
"This is C string literal."
これが文字列リテラルね。参照すると文字列定数になる。
char s[] = "This is character array.";
これが文字の配列の変数sの宣言と初期化ね。sはヌル文字を含めた文字列データ先頭を参照する。sizeof(s)は、ヌル文字を含めたデータのサイズになる。
const char *p = "This is pointer to characters.";
これは文字列の先頭へのポインタになる。サイズはアドレスのサイズ。データは変更できない。

929 ◆QZaw55cn4c (ワッチョイ b260-4mDj)2017/12/19(火) 21:19:44.32ID:U2jplJ2K0
>>926
ちょっと進んだ知識になるのですが。

プログラムがコンパイルされたのち、プログラムの実行の段階にはいったとき、コードや変数領域やその他もろもろがメモリ上に展開されるわけですが、
文字リテラルは、場合によってはメモリ上の書き込み不可能の場所に置かれます。たとえば ROM メモリとか。
もし、その文字リテラルを適宜書き換えて使いたいのならば、書き込み可能な場所にコピーして使うでしょう、それが、変数であり配列でありするわけです。

ただし文字リテラルを書き換えることが可能な環境では、それを見越して、文字リテラルを書き換えて対応する、という手がないわけではありません。
まあ一般的には行儀が悪いと思われています。それに文字リテラルを途中で長くしたい、とかは不可能ですし。

930デフォルトの名無しさん (ワッチョイ af36-zS+j)2017/12/19(火) 21:21:47.79ID:MoA6J0CR0
>>926
おまえさんが疑問に思っているのはこういうことか?
puts("aho"); で済むのを、わざわざ
static const char array[] = "aho";
puts(array); としなければならないのかと

931デフォルトの名無しさん (ワッチョイ dee7-j1NZ)2017/12/19(火) 21:24:55.16ID:x8VtX8Fx0
複数の文字列の先頭番地を便利に参照したいぐらいじゃないかな。

932デフォルトの名無しさん (ワッチョイ 12b0-+NpI)2017/12/19(火) 22:51:39.70ID:6p/5Z93J0
>>927
>>928
>>929
>>930
>>931

みなさんお騒がせいたしました。みなさんから頂いたアドバイスを参考にさせていただいて、
よく考えてみたところ、あまり深く気にするべきではないように感じてきました。
先ほどの本の「配列による文字列」「ポインタによる文字列」という箇所を読み込んだところ、
「配列による文字列」はcharの配列を宣言して文字列を用いる場合で、「ポインタによる文字列」
は「char p* = "ABC"」のように、ポインタchar *を宣言してなんらかの文字列リテラルで初期化する
手法であるとのことです。

おそらく・・・よくわかりませんが、直観的に私が当初感じていた疑問点というのはここら辺の部分に帰結
する話だと思われます。

現段階での私の理解
・文字列はそもそも配列?などということは気にしなくてもよい。
・文字列を配列charに格納してからポインタで操作する方法がある。この場合は当然配列の規則に従う
 ので代入とかはできない
・char * = "ABC" のようにchar[]を宣言せずに文字列をポインタで操作する方法もあり。
 この場合は p = "SEX" のような代入ができる。

933片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/19(火) 22:57:18.83ID:3xf/peDqd
char *p = "string";
はconstがない時代の古い書き方だよ。
良い子は
const char *p = "string";
のようにconstを付けること。

934デフォルトの名無しさん (ワッチョイ 12b0-+NpI)2017/12/19(火) 23:01:45.80ID:6p/5Z93J0
>>933
const
中身を変えられないとかいう…。
ありがとうございます。勉強になります。

935デフォルトの名無しさん (ワッチョイ 1680-zkGJ)2017/12/19(火) 23:37:54.35ID:jfHXMkXp0
immutable・不変かどうかの区別。
不変オブジェクトは、メモリ内の読み込み専用エリアに置けるので、最適化しやすいから、
できる限り、不変が望ましい

Ruby, JavaScript では、文字列は可変オブジェクトだが、freeze すると更新できない

s = "hello"
s.freeze

よく覚えていないけど、この本が良かった気がする。
詳説 Cポインタ、オライリー、2013

936デフォルトの名無しさん (ワッチョイ ef9f-mLIQ)2017/12/19(火) 23:44:08.13ID:SEIe84in0
char *s = "abc";
と初期化した場合は
s[1] = '\0';
のようなことをすると Segmentation fault になったが、
char s[] = "abc";
の場合は
s[1] = '\0';
が問題なくできた。その後 puts(s) をすると a だけが出た。
OS は Linux でコンパイラは gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) だ。
-S でアセンブラの出力をさせるとどちらも "abc" をリードオンリーの領域に配置させているが
char s[] と書いた場合は関数の初めでスタックに領域を確保してそこにコピーしてからアクセスしていた。
char *s の方は単に先頭アドレスを使うようになるだけ。(そしてリードオンリーの領域に書いて死亡)。

man gcc を見ると -traditional や -fwritable-strings で文字列リテラルに書き込めるようにできるとは
書いてあるが、この man page 自体が古く、4.8.5 では既にこのオプションは使えなくなっていた。

937デフォルトの名無しさん (ワッチョイ 1f9f-iA8U)2017/12/20(水) 00:00:34.09ID:FD+Ux1Ht0
>>932
> 現段階での私の理解
だいぶ間違っているが、ド初心者ならあまり細かく考えずに進めてもいい。
(プログラミング自体の初心者なら、最初の段階で重要なのはそこではないから)
キッチリやりたいのなら、メモリを確認しながら進めた方がいい。
IDE等使えば簡単に見えるし、何を間違っているかすぐに理解できると思う。


>>935
JavaScriptのstringはインミュータブルだ馬鹿タレ

938デフォルトの名無しさん (ワッチョイ 92e3-4pIx)2017/12/20(水) 01:15:20.03ID:52iYTq0Y0
>>932
よく言われることだけど、cに文字列型はない
cで文字列という時は必ず文字の配列のこと

char * p = "ABC";

char x[] = { 'A', 'B', 'C', 0};
char * p = x;
って書くのを少し楽に書けるようにしてくれてるだけ

プログラミング自体の初心者なら、cで文字列を扱うこと自体を後回しにした方がいいと思う

939デフォルトの名無しさん (ワッチョイ af36-zS+j)2017/12/20(水) 06:46:09.98ID:63AN+5MK0
> cで文字列を扱うこと自体を後回し

俺もそう思う
ど初心者にはちとキツい

940デフォルトの名無しさん (ワッチョイ b761-OyZG)2017/12/20(水) 07:39:29.61ID:megjw+LT0
char x[] = { 'A', 'B', 'C', 0}; は.dataに保存されるから同じじゃないだろ。

941デフォルトの名無しさん (ワッチョイ 6361-4pIx)2017/12/20(水) 07:57:37.46ID:5B0wk23g0
宗教戦争勃発!

942デフォルトの名無しさん (ワッチョイ 92a6-ak+6)2017/12/20(水) 09:01:12.50ID:RLul2dZl0
const教は良い教義だと思うけどな。

943デフォルトの名無しさん (ワッチョイ 1287-e1v7)2017/12/20(水) 09:12:25.93ID:wldcomI70
組み込み屋の俺から言わせれば、constは常識。

944デフォルトの名無しさん (スッップ Sd32-rGrM)2017/12/20(水) 09:19:53.06ID:ohJmu0wUd
ROMに追い出すconstの嵐w
#pragma でもいいけれど。

945デフォルトの名無しさん (ワッチョイ af36-zS+j)2017/12/20(水) 10:35:07.90ID:63AN+5MK0
C++にconstexprがあるのはconstの設計ミス

>>944
いや、const無くても文字リテラル自身はROMに書かれてるんだけど、デフォルトはそれをわざわざ初期化の時にRAMに展開して書き換えられてもいいように準備して待ってるんだよな。
それがもったないからconst付けるんだ。

947デフォルトの名無しさん (アウアウカー Sa6f-kaKc)2017/12/20(水) 11:48:57.84ID:g9yiCifSa
>>946
ところが chrar * 変数に対する初期化に文字列リテラル使うと>>936のようにエラーも警告も出さずにコンパイルが成功してリードオンリーの領域に書き込みアクセスするプログラムができてしまうと。

>>947
それはパソコンアプリ向けコンパイラが通常じゃROM化に対応してないからだよ。
昔からある話で、特別にROM化可能なコンパイル設定しないとな。

949デフォルトの名無しさん (ワッチョイ af36-zS+j)2017/12/20(水) 13:49:50.09ID:63AN+5MK0
constつーか__attribute__((section(".rodata")))だろ

950デフォルトの名無しさん (ワッチョイ 12b0-+NpI)2017/12/20(水) 20:21:08.31ID:ap2qT8fO0
>>932です。
みなさんありがとうございます。
C言語では文字列を扱うのは難しいようですね。
しかし使うだけであれば「なんとなく感覚的」に可能か?と思われます。

ところで、ネットや本でC言語の難所はポインタだ!とよく書いてますが、この文字列の部分というは正に
ややこしい部分ではないでしょうか?
ポインタと配列の関係性の理解だけでも一山あります。
それが文字列となると、ポインタ+配列+文字列の知識の理解、となってしまって。
構造体を勉強するのが先でしょうか。

951片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/20(水) 20:43:26.94ID:hN2yOtWhd
>>950
この程度で難しいというなら、あきらめてJavaに行った方が身のためだ。
plain Cは時代遅れで、そのまま使うとセキュリティに穴があるシステムを量産してしまう。
Cはロボットにまかせて、人間はC++みたいな高度なプログラムを使うことが望ましい。

952デフォルトの名無しさん (ワッチョイ af36-zS+j)2017/12/20(水) 20:47:28.16ID:63AN+5MK0
>>951
それを言うなら静かに自力で解決するやつ以外すべて足切り点未満だろ
plain Cで隙だらけのコードを量産するおまえさんが体現しているようにw

953デフォルトの名無しさん (ワッチョイ 12b0-+NpI)2017/12/20(水) 21:24:09.39ID:ap2qT8fO0
>>951
最近プログラミングが騒がれているのでpythonを始めたのですが、どうもプログラミングしてる感
が持てないためC言語をかじりだしたのです。
javaはコードが長そうなので嫌な感じですね。C++はえらく難しいらしいですし...
まあpythonかrubyが普通に使えるくらいになれば十分なのですが...

954デフォルトの名無しさん (ワッチョイ 4771-exlo)2017/12/20(水) 21:34:16.38ID:WuO+qrMG0
>>953
まずプログラミングしてる感が十分感じられるくらいまでpythonに慣れましょう

955デフォルトの名無しさん (ワッチョイ ffb3-AOQJ)2017/12/20(水) 21:35:23.89ID:bl+FG2Ud0
余所の芝が青く見えるので、そっちをつまみぐいする進め方は
正直どっちも中途半端に覚えてるつもりになって、実際には道具として使えてない状態に陥りそう

956 ◆QZaw55cn4c (ワッチョイ b260-4mDj)2017/12/20(水) 21:41:33.06ID:8hKmNCKf0
>>953
C++ は教育的配慮に欠けていて、自力でなんとかしないといけない部分が多いし、ここ5〜6 年で規格がばたばた改定されたのに教科書が追いついていない
ついでに私もC++11later には追いつけていない(;;)
プログラムしている感は満載なんですけれども。

java は、資格とかもあり教育的な環境が整っているし書籍も多い、言語的な紛れもC++ に比べると少ない、個人的にはお勧めです。
プログラムしている感は、それなりにあると思います。

python 私もやっているんだけれども、つづりミスに悩まされています。なにか、いい支援環境はないものでしょうか?

957片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/20(水) 21:44:52.24ID:hN2yOtWhd
>>953
Pythonで何かをあやつることをやってみたら? GIMPや、Inkscapeや、IoTデバイスとかをあやつってみるんだよ。

958片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/20(水) 21:49:51.24ID:hN2yOtWhd
Pythonは万能だから、株取引とか天気予報の表示とかニュースフィードとか、思い付く限りのことができるぜ。

959デフォルトの名無しさん (ワッチョイ 1681-A+LL)2017/12/20(水) 22:26:42.84ID:YMSTlUWa0
>>958
地震を予測してみてくれ

960デフォルトの名無しさん (ワッチョイ 1681-iA8U)2017/12/20(水) 22:28:37.10ID:w4Ra0RsW0
イスラエルのスパイ組織に電話でもして聞けば

961片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/20(水) 22:38:41.88ID:hN2yOtWhd
>>959
地震の原因は、地球内部の核融合反応をエネルギー源とするマントル活動だから、三次元マントルマップを
作って天気予報みたいにスパコンでシミュレーションすればある程度予測可能なはず。

962片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/20(水) 22:44:09.10ID:hN2yOtWhd
とかテキトーなことを言ってみるテスト。

963デフォルトの名無しさん (ワッチョイ 1681-iA8U)2017/12/20(水) 22:45:25.57ID:w4Ra0RsW0
地下水で地盤ががたがたになったところを爆弾で引き金ひいてるだけだよ

964片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/20(水) 22:46:01.11ID:hN2yOtWhd
でも人類は地球の中身を見ることも出来ないでしょ?

965片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH)2017/12/20(水) 22:48:45.17ID:hN2yOtWhd
知り合いの宇宙人はみんな人類をバカにしてるぞ。

966デフォルトの名無しさん (ワッチョイ 1681-A+LL)2017/12/20(水) 23:27:29.43ID:YMSTlUWa0
「日本沈没」だと、細菌が地震の原因だとされた

967デフォルトの名無しさん (ワッチョイ 1680-zkGJ)2017/12/20(水) 23:47:53.69ID:nn3v7K500
>>956
【Microsoft Tech Summit】APP017 PowerShellの新しい相棒 Visual Studio Code
http://www.youtube.com/watch?v=0zo6z0yHrGk

2017/01/23 に公開された動画

968 ◆QZaw55cn4c (ワッチョイ b260-4mDj)2017/12/20(水) 23:49:59.93ID:8hKmNCKf0
>>966
これかな?
https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E6%B2%88%E6%B2%A1
最近読んだので記憶は確かだが、細菌が地震の原因とは書かれていなかった
地球内マントルの対流の動きが変わり、ちょうど日本の真下でマントルが持ち上がるように変化した、という推測でストーリーは進んでいる

969デフォルトの名無しさん (ワッチョイ 1681-iA8U)2017/12/20(水) 23:52:58.62ID:w4Ra0RsW0
デンバー地震でぐぐれ

970デフォルトの名無しさん (ワッチョイ 1681-iA8U)2017/12/20(水) 23:54:03.48ID:w4Ra0RsW0
そしたら探査船ちきゅうでぐぐれ

なんで非キリスト教国のまわりばっかり掘ろうとしてるんですかね

971デフォルトの名無しさん (ワッチョイ 1681-iA8U)2017/12/20(水) 23:54:55.60ID:w4Ra0RsW0
プログラム板じゃねーかここ
だまされた

972デフォルトの名無しさん (ワッチョイ b2f9-M+37)2017/12/20(水) 23:57:59.90ID:/r8rw0in0
>>965
その宇宙人たちが接触した人類がお前さんだけだからだろう

973デフォルトの名無しさん (ワッチョイ cf81-+obY)2017/12/21(木) 00:17:01.11ID:HiBe6ryp0
>>968
映画だと、
日本列島の下に沈みこむ海洋プレートが微生物が発生するメタンガスの影響もあって
沈み込み速度をましているため、日本列島が引きずり込まれて「一気呵成」に沈み込む
ことになってます。

974デフォルトの名無しさん (ワッチョイ cf81-7LW1)2017/12/21(木) 00:22:13.48ID:UchjTOEe0
デンバー地震で

975デフォルトの名無しさん (ブーイモ MM27-sMZP)2017/12/21(木) 12:40:43.16ID:FgpIo/kMM
デンバーはダメです

976デフォルトの名無しさん (アウーイモ MM67-yeUS)2017/12/22(金) 15:34:13.13ID:E+fmptBcM
4つの整数と + - * / を組み合わせて10を作ってその組み合わせを表示する、みたいなプログラムって作れますか?

977デフォルトの名無しさん (ワッチョイ ffb3-6aYH)2017/12/22(金) 15:53:53.74ID:sp7ymsVp0
C++ だけとクラスとか定義してないから入出力を書き換えればC言語にできるんじゃね?
http://apollon.issp.u-tokyo.ac.jp/~watanabe/int/ten.html

978デフォルトの名無しさん (アウーイモ MM67-yeUS)2017/12/22(金) 16:10:47.49ID:ft9sfOBHM
>>977
ありがとうございます
計算してみたら1536通り?とかで気が遠くなってましたが、頑張ってみます

979 ◆QZaw55cn4c (ワッチョイ 7f60-IIk+)2017/12/22(金) 16:13:51.13ID:Zf+4IlSz0
>>961
>地球内部の核融合反応
コアは6000K の液体または固体金属、とのことだが、核融合にまでは至っていないかと思っていた
しかし、ググってみると、重水素の核融合が起こっているという仮説があった
http://www.natureasia.com/ja-jp/srep/abstracts/85904
この融合反応は wikipedia には載っていないなあ…よくわらかないね

>>979
よそでやれ

981デフォルトの名無しさん (アウーイモ MM67-yeUS)2017/12/22(金) 17:16:18.78ID:ft9sfOBHM
演算子入れられる変数とか無いのかなー

982片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-1u/G)2017/12/22(金) 17:19:27.03ID:0AiV6ZgEd
>>981
関数ポインタ?

983◆c9Xyadm.dk (ワッチョイ 939d-buzn)2017/12/22(金) 19:56:40.50ID:87p1rPDr0
片山博文MZはMZってマイコンからとったのか

984デフォルトの名無しさん (ワッチョイ a3b3-td9o)2017/12/22(金) 20:05:03.37ID:byb+rqQ+0
シャープのMZ80シリーズ?

985デフォルトの名無しさん (スッップ Sd1f-OpNk)2017/12/22(金) 20:14:04.54ID:LnRzEfKId
>>983
マジ?

986デフォルトの名無しさん (ワッチョイ cfd7-tRgI)2017/12/22(金) 20:43:06.61ID:e2HIssEB0
EXEファイル先頭のマジックナンバーだろ

987デフォルトの名無しさん (アウアウカー Sac7-vdkM)2017/12/22(金) 20:52:06.42ID:xiD1v8rca
二画面スマホ

988デフォルトの名無しさん (ワッチョイ cf81-+obY)2017/12/22(金) 22:49:46.65ID:bOwDb4AP0
片山さんって起動可能?

989デフォルトの名無しさん (ワッチョイ f38a-IlPN)2017/12/23(土) 02:10:08.05ID:AM9XC9Za0
クリーンコンピューター

990デフォルトの名無しさん (ワッチョイ 639f-bsML)2017/12/23(土) 06:03:46.75ID:BUr3nOOf0
まず、カセットテープからBASICを読み込ませます。

991デフォルトの名無しさん (ワッチョイ 8376-Owf0)2017/12/23(土) 06:56:57.79ID:HrCAu8ak0
マジックナンバーの意味が違う使われ方するよな最近

992デフォルトの名無しさん (ワッチョイ f378-tRgI)2017/12/23(土) 07:11:10.70ID:82L7PCHk0
オブジェクトみたいにもともと多義語だから

993デフォルトの名無しさん (ワッチョイ 639f-buzn)2017/12/23(土) 15:13:16.78ID:BUr3nOOf0

994デフォルトの名無しさん (ワッチョイ f38a-IlPN)2017/12/23(土) 15:56:25.06ID:AM9XC9Za0
>>991
294
753
618

995デフォルトの名無しさん (スプッッ Sd1f-k/7O)2017/12/23(土) 16:19:05.64ID:jli6zd8zd
*=/+'")(^ などのアスキーコード内の記号の意味をまとめているサイトを探してるのだけどおすすめ知らないかな?
セキュリティ考慮したテストケースを考えてる
ipaでみた記憶があるのだけど見つからなくて...

996デフォルトの名無しさん (ワッチョイ 238a-3nWA)2017/12/23(土) 19:34:27.90ID:dghfoRy20

997デフォルトの名無しさん (ワッチョイ 0f7f-XeQH)2017/12/24(日) 22:57:46.11ID:UGGlJ0vI0
うめ

998デフォルトの名無しさん (ワッチョイ 0f7f-XeQH)2017/12/24(日) 22:58:09.56ID:UGGlJ0vI0
うめうめ

999デフォルトの名無しさん (ワッチョイ 0f7f-XeQH)2017/12/24(日) 22:58:25.23ID:UGGlJ0vI0
うめうめうめ

1000デフォルトの名無しさん (ワッチョイ 0f7f-XeQH)2017/12/24(日) 22:59:08.58ID:UGGlJ0vI0
梅ラスト

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 58日 1時間 31分 0秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。