C言語なら俺に聞け 140 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 6f8c-8ulf)
垢版 |
2017/05/11(木) 22:20:03.99ID:cn414UR90
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/


http://echo.2ch.net/test/read.cgi/tech/1487757355/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/05/12(金) 13:08:15.72ID://5I1UQ2M
イラネ
2017/05/12(金) 14:58:26.42ID:IiKpnLAId
C言語からVBAで作ったエクセルマクロって実行できないの?
4デフォルトの名無しさん (ワッチョイ cfa9-xHOS)
垢版 |
2017/05/12(金) 16:05:36.32ID:UWkhiPx90
C99からif,for,whileの後に続く括弧の中がブロックのなかという
認識になったらしいんですけど、for以外でどうやって
その中で変数を宣言できるというんですか?
だったらforだけブロックの中っていうことでいいんじゃないんですか?
5デフォルトの名無しさん (ワッチョイ c300-yCMP)
垢版 |
2017/05/12(金) 16:31:31.05ID:js7UY7om0
if ( char * p = malloc( N ) )
こういうのとか?
2017/05/12(金) 18:03:15.98ID:UWkhiPx90
それな
2017/05/12(金) 22:01:43.38ID:HEUwhpUy0
C言語でエクセルのVBAマクロの実行できないの?
2017/05/12(金) 22:06:16.73ID:r6F8dCD7d
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45361&;forum=7
2017/05/12(金) 22:08:09.17ID:HEUwhpUy0
C++かぁ
2017/05/12(金) 22:44:50.71ID:y9SJMwIK0
>>7
VBA マクロのインタプリター書けば良くね?Cで。
2017/05/12(金) 23:06:05.96ID:UkU1KlKv0
おいQZゴミコードをここで書くなよ
ウンコードに投稿しろよ
2017/05/12(金) 23:07:33.76ID:UkU1KlKv0
おいQZ
おまえってやればやるほど洗練された糞さを放ったコードが出来上がるから
自覚しとけ
2017/05/12(金) 23:09:00.10ID:UkU1KlKv0
おいQZいろんなC系スレでクソコードばらまくのやめろよ
今時Cでクソなコード書いてるのはおまえしかいない
2017/05/13(土) 12:44:34.80ID:vKP2EClq0
printf("%s", string);

ではなくて

printf(string);

でエラーが出ないようにするにはどうしたらいいですか?
2017/05/13(土) 13:06:30.63ID:7e4RDEpq0
#define printf(string) printf("%s", string)
とする
2017/05/13(土) 13:47:03.32ID:7pndE6Ym0
stringがchar*なら、それでエラーは出ない
キミが間違っとる
17デフォルトの名無しさん (ワッチョイ c300-yCMP)
垢版 |
2017/05/13(土) 14:03:34.24ID:u94khtn50
コンパイラーによってはセキュリティ警告でも出るんだろうな
2017/05/13(土) 14:12:40.14ID:m48zL+ZP0
>>16
print「f」なのにフォーマットしないってなんか気持ち悪いな
2017/05/13(土) 14:13:58.16ID:RjzTmCQE0
エラーがコンパイル時なのか実行時なのか
2017/05/13(土) 14:20:39.18ID:m48zL+ZP0
gcc使っているならコンパイル時のオプションに-wでコンパイルできたわ
2017/05/13(土) 14:51:14.61ID:7U8nUyJbM
>>18
printf("Hello, world!/n”);
気持ち悪いか?
2017/05/13(土) 14:58:27.01ID:Swj/Rgps0
>>21
馬鹿
2017/05/13(土) 15:42:18.61ID:zKUmpFvI0
string の中身に %s とか %d とかはいってると あわわわ
2017/05/13(土) 15:42:59.20ID:VT1sIlGJ0
ヌルポン渡すと落ちるぞ
2017/05/13(土) 15:55:06.50ID:1Sz8mIFNa
そもそも出ないだろw
2017/05/13(土) 22:21:45.16ID:IUtkDsju0
stringがワイド文字列なら警告くらい出るだろ
2017/05/13(土) 22:24:52.04ID:7pndE6Ym0
>>23
ああ、そう言う事なら、静的な引数チェクが不可能な文字列は警告だすのもありかも知れんな
実例は見た事ないが
2017/05/13(土) 23:37:01.87ID:Bvln+1PG0
format string attackって攻撃が実在するからな
C11で%nが廃止されたのも、それが原因だし
2017/05/14(日) 03:33:24.24ID:AUHwE8VO0
>>27
どのコンパイラもオプションつければ動的に決まる文字列は警告出すぞ
遅い上に危険で利点がない

%nが消えてもメモリ内を読まれるのは脆弱性
2017/05/14(日) 03:39:55.42ID:RBSPlVIO0
やりたいことって、putsではダメなのかな?
2017/05/14(日) 04:15:58.62ID:c1+aTdNX0
プッツ!
2017/05/14(日) 10:30:41.42ID:QnhMTTR+0
a+=1;

a++;
って同じ意味ですか?
2017/05/14(日) 10:51:06.70ID:44d8vf440
>>32
a+=1 と ++a の評価は同じ
a+=1 と a++ の評価は違う
評価後の値はどちらも同じ

#include <stdio.h>
int main(void)
{
int a;

a = 0;
printf("%d\n", a); // a=0
printf("%d\n", a += 1); // a=1 評価結果はインクリメント後の値
printf("%d\n\n", a); //a=1

a = 0;
printf("%d\n", a); // a=0
printf("%d\n", ++a); // a=1 評価結果はインクリメント後の値
printf("%d\n\n", a); // a=1

a = 0;
printf("%d\n", a); // a=0
printf("%d\n", a++); // a=0 評価結果はインクリメント前の値
printf("%d\n\n", a); // a=1

return 0;
}
34デフォルトの名無しさん (ワッチョイ 8ff3-SU9n)
垢版 |
2017/05/15(月) 10:50:08.41ID:ITGYMTaF0
int a=1;
a = a+++a;

これ、たいていの環境で 3 になるみたいだけど
内部ではどっちに構文解析されてるの?
2017/05/15(月) 11:49:32.39ID:8jcxUI920
>>34
a=b++ + c;
2017/05/15(月) 11:56:31.63ID:Z3hdp57V0
>>34
後置インクリメント演算子(a++)は+演算子や前置インクリメント演算子(++a)より優先順位高い
2017/05/15(月) 12:12:51.85ID:Vosr5hkL0
>>34
VC++の場合
a = (a + a)++;

GCCの場合
a = ++(a + a);

int a = 10;
printf("%d\n", a); // a=10
printf("%d\n", a=a+++a); // a=20 (VC++の場合)、a=21 (GCCの場合)
printf("%d\n\n", a); // a=21
2017/05/15(月) 12:55:00.64ID:FMK+ZQcW0
右辺値のインクリメントが出鱈目過ぎる
2017/05/15(月) 13:04:41.31ID:m4iBjxKl0
>>36
演算子の優先順位と構文解析は関係ねーよ

前方から最長になるように字句解釈するから、 a=a+++aは、a = a ++ + aになる
2017/05/15(月) 13:26:43.15ID:Z3hdp57V0
>>39
えっ? 関係ないの?
41デフォルトの名無しさん (ワッチョイ 7fcd-/tbB)
垢版 |
2017/05/15(月) 14:05:11.81ID:KBSLJwGw0
>>37
// GCCの場合
a=10;
printf("1: %d\n", a = a++ + a); // a=21
a=10;
printf("2: %d\n", a = ++a + a); // a=22
a=10;
printf("3: %d\n", a = a + a++); // a=21
a=10;
printf("4: %d\n", a = a + ++a); // a=22

1と2は予想通りだけど3と4は予想が外れた。
GCCは素直に前方から評価すると思っていたが、
インクリメント演算がある項を先に評価するようだ。
2017/05/15(月) 14:08:51.26ID:ITGYMTaF0
>>39
なるほど先頭から最長一致か ありがとう

a = a+++a; // 21
a = a+ ++a; // 22
a = a++ +a; // 21

gccだとこんな感じになったわ
2017/05/15(月) 14:28:56.88ID:m4iBjxKl0
>>40
関係ない

演算子の優先順位はトークンが確定した後の話
構文解釈とは一切関係ない
2017/05/15(月) 14:50:03.73ID:k1YI7zCW0
知ったかぶりしないで
副作用完了点を検索してからレスしようね
2017/05/15(月) 15:08:26.82ID:m4iBjxKl0
さすがに、a=a+++a が未定義なことぐらいわかってるだろ
そのうえで、どう動作してるのだろうかって話じゃねーの?
2017/05/15(月) 15:17:45.01ID:ugjsGD9A0
どう字句解析されるのかって話だろ
2017/05/15(月) 15:41:11.64ID:+h60b5kha
初めから()で囲んで優先つけた方がいいね
2017/05/15(月) 15:48:46.87ID:Vosr5hkL0
VC++での逆アセンブルコード (Visual Studio 2017 debugモード)

// a=a++
a = 10;
004037DE mov dword ptr [a],0Ah
a = a++;
004037E5 mov eax,dword ptr [a]
004037E8 mov dword ptr [a],eax
004037EB mov ecx,dword ptr [a]
004037EE add ecx,1
004037F1 mov dword ptr [a],ecx

// a=++a
a = 10;
004037F4 mov dword ptr [a],0Ah
a = ++a;
004037FB mov eax,dword ptr [a]
004037FE add eax,1
00403801 mov dword ptr [a],eax
00403804 mov ecx,dword ptr [a]
00403807 mov dword ptr [a],ecx

// a = a+++a
a = 10;
0040380A mov dword ptr [a],0Ah
a = a+++a;
00403811 mov eax,dword ptr [a] // aの値と
00403814 add eax,dword ptr [a] // aの値を加算して (a+a)
00403817 mov dword ptr [a],eax // 一時保存(評価)して
0040381A mov ecx,dword ptr [a] // 評価結果に対して
0040381D add ecx,1       // 1を加算して (a+a)++
00403820 mov dword ptr [a],ecx // 最終結果をaに代入
2017/05/15(月) 16:01:51.35ID:Vosr5hkL0
GCCは逆コンパイラが使える環境を持っていないので誰か頼みます
2017/05/15(月) 16:17:06.14ID:vCh6HJnv0
-S付けるとアセンブラソース出力してくれるよ
2017/05/15(月) 16:17:38.49ID:k1YI7zCW0
>>45
未定義とされているものの実装を調べる意味は一片たりとも無い
b = a+++a; ならば文法どおりに解釈されてなければ、コンパイラのバグなので検証する意味はある
52デフォルトの名無しさん (ワッチョイ 2375-QWrk)
垢版 |
2017/05/15(月) 16:26:58.46ID:K4VlRHcT0
>>49
https://godbolt.org
53デフォルトの名無しさん (ワッチョイ 2375-QWrk)
垢版 |
2017/05/15(月) 16:38:44.35ID:K4VlRHcT0
>>51
a+++a;は未定義動作でしょ?
2017/05/15(月) 16:55:22.96ID:m4iBjxKl0
>>53
そこだけで未定義
2つ目のaを別の変数に退避し上で加算しないとアウト
2017/05/15(月) 17:14:07.00ID:Vosr5hkL0
>>52を利用して逆アセンブルコードを調べてみた
スタックを使って細工するところとかコードの展開内容としては結構トリッキーだけど
GCCの場合のa=a+++a のイメージとしては
{
tmp = a, a=(++a) + tmp;
}
といった感じかな
>>54の言う通り内部的には別変数を利用しているとも言える

逆アセンブルコード
push rbp     
mov rdp, rsp
a = 10;
mov DWORD PTR [rbp-4], 10

a = a+++a;
mov eax, DWORD PTR [rbp-4] // aの値に

lea edx, [rax+1]
 // 1を加算して
mov DWORD PTR [rbp-4], edx // aに保存

add DWORD PTR [rbp-4], eax // aに元のaの値を加算
pop rbp
2017/05/15(月) 17:17:38.16ID:Vosr5hkL0
レイアウト崩れたので修正

逆アセンブルコード
 push rbp     
 mov rdp, rsp
a = 10;
 mov DWORD PTR [rbp-4], 10
a = a+++a;
 mov eax, DWORD PTR [rbp-4] // aの値に
 lea edx, [rax+1] // 1を加算して
 mov DWORD PTR [rbp-4], edx // aに保存
 add DWORD PTR [rbp-4], eax // aに元のaの値を加算
 pop rbp
2017/05/15(月) 17:33:28.21ID:FMK+ZQcW0
無能な働き者
2017/05/15(月) 18:48:03.94ID:k1YI7zCW0
>>53
ああすまん、そのとおりだね
なに寝ぼけてたんだろう
2017/05/15(月) 20:47:42.32ID:l6TF2MzAM
>>33
ありがとうございます!
すっきりしました!
2017/05/15(月) 21:40:37.62ID:ITGYMTaF0
>>53
b = a++ +a ならギリギリセーフかなーと思ってた。
これもアウトなんか
2017/05/15(月) 22:35:38.71ID:m4iBjxKl0
ざっくりだけど
C99以前だとaの変更とその変更と関係ないaの評価を行っているからアウト
C11だとa++でのaへの1加算と、2つ目のaの評価に順序性がないからアウト
2017/05/15(月) 22:43:52.12ID:KR9fXitY0
おいQZお前はC向いてないからやめろ
このスレを荒らすなクソマニア
2017/05/16(火) 02:46:28.46ID:8VX1hNny0
a = f(x) + g(x);
とした場合、f(x)とg(x)の関数呼び出しで
どちらが先になるのかは未定義ってこと?
2017/05/16(火) 03:27:48.17ID:lv7gi33v0
>>63
関数呼び出しの順序の問題ではなくて、インクリメント演算子を自分自身に適用した場合の副作用の問題
f(x)の副作用としてg(x)の状態を変化させ、g(x)の副作用としてf(x)の状態を変化させるような場合、(f(x) + g(x))の評価は未定義ということ
2017/05/16(火) 03:34:54.85ID:lv7gi33v0
「インクリメント演算子を自分自身に適用した場合」は説明不足だった
「同じ式の中でインクリメント演算子を自分自身に繰り返し適用した場合」の方が適切だった
2017/05/16(火) 04:11:10.64ID:8VX1hNny0
回答ありがとう
2017/05/16(火) 12:24:07.64ID:hxKx6VJm0
C言語でVBA
2017/05/16(火) 14:51:29.95ID:uP7i9rQE0
>>63
a++ + a
右のaがどうなるか考えてみ
2017/05/16(火) 18:02:14.83ID:9umlqZ68M
a=a+++++aはエラーなの?
70デフォルトの名無しさん (ワッチョイ 8383-hEfH)
垢版 |
2017/05/16(火) 18:26:04.60ID:j2WgBIQo0
大学の講義でc言語やってるのですが、行き詰まってしまったので質問させていただきます
分割コンパイルしているのですが、全部書いてあります
コメント文で分割コンパイルの区切りを表しています
http://codepad.org/VplJG9tZ
これによって表示されるものを左に90度回転させたいのですが条件としてmain関数しかいじってはいけないというものがあります
2次元配列でいけるのかと思ったのですが、どうしたらいいかわからず手詰まりです
よろしくお願いします
2017/05/16(火) 18:28:00.76ID:7Qb0OzW/0
宿題スレにいけ
2017/05/16(火) 19:46:46.04ID:GFMW00ds0
a = a----a;
ってコンパイルできないのね
a = a-- - -a;
にすればコンパイルはできるが
2017/05/16(火) 20:26:25.96ID:fevd2QwgM
>>69
エラーになるかどうかもわからない
それが未定義動作
2017/05/16(火) 20:48:15.67ID:8VX1hNny0
>>64 >>68
レスもらっておいて何ですが、やっぱりなんか引っ掛かってたので自分でも調べてみました

http://www.soum.co.jp/misc/tom/programmer/4.html#id9
https://mattn.kaoriya.net/software/lang/c/20130426110223.htm

あたりを読んで理解した気になりました
C言語テラコワス
75デフォルトの名無しさん (ワッチョイ 8383-hEfH)
垢版 |
2017/05/16(火) 21:05:08.54ID:j2WgBIQo0
>>71
すみません宿題スレとはどこでしょうか
2017/05/16(火) 21:41:19.00ID:9umlqZ68M
>>74
問題はグローバル変数を使うからじゃないの?
77デフォルトの名無しさん (ペラペラ SD9f-5YWk)
垢版 |
2017/05/16(火) 22:17:40.57ID:Ag35s8j3D
>>68
swiftだとa++は廃止された
分かりやすく書くってこと
2017/05/16(火) 22:33:27.46ID:Slyc8zwMd
http://d.hatena.ne.jp/THE_MIND/touch/20090205/1233845661
これ真似たけどExcel開かない
2017/05/16(火) 22:33:48.78ID:Slyc8zwMd
あ、間違えましたすみません
2017/05/16(火) 23:02:13.38ID:OtKe4ieo0
わからなかったの間違えだろ
正直に言えよ無職無能QZ
2017/05/16(火) 23:06:19.27ID:OtKe4ieo0
QZ怒りの他スレ進出ww
2017/05/16(火) 23:07:01.08ID:OtKe4ieo0
宿題スレはどこでしょうかw
おいQZこのスレまで宿題スレ化しようと企んでるのかよ
2017/05/16(火) 23:09:40.58ID:OtKe4ieo0
最近の宿題スレで質問者演じてるやつと口調が見事に一致
84デフォルトの名無しさん (ワッチョイ c300-yCMP)
垢版 |
2017/05/16(火) 23:17:13.00ID:f+nf4d790
インクリメントが無い言語はクソ
2017/05/16(火) 23:18:04.22ID:OtKe4ieo0
QZ怒りの負け惜しみ発言開始
2017/05/16(火) 23:25:44.32ID:OtKe4ieo0
QZ怒りのC絶賛
2017/05/16(火) 23:56:41.57ID:hxKx6VJm0
QZってなに
2017/05/17(水) 00:12:22.70ID:trROhyaD0
QZ怒りの自己紹介
2017/05/17(水) 00:16:07.98ID:t3IXdrQL0
C言語って、機械に分かりやすい言語なんじゃないかな
2017/05/17(水) 00:34:30.07ID:Y+yL8XVsM
何をいまさら
2017/05/17(水) 06:54:51.29ID:wJf0VzTx0
>>87
エディタじゃね?
2017/05/17(水) 11:14:31.02ID:trROhyaD0
QZ怒りのエディタ自慢
93デフォルトの名無しさん (ガックシ 067f-sbka)
垢版 |
2017/05/17(水) 16:12:39.52ID:IVbqBIIG6
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
int i, j, a; //int 整数
FILE *fout; //FILE ファイルの管理用
errno_t error;
if ((error = fopen_s(&fout, "output.txt", "w")) != 0){
printf(" エラー:ファイルの出力ができませんa \n");
exit(1);
}
a = 0;
for (i = 0; i<5; i++){
for (j = 0; j<10; j++){
a = a + 1;
fprintf_s(fout, "%d ", a);
}
fprintf_s(fout, "\n");
}
fclose(fout);
}
これにIf文使って
0 0 0 0 0 0 0 0 0 0
0 0 0 14 15 16 17 0 0 0
0 0 0 24 25 26 27 0 0 0
0 0 0 34 35 36 37 0 0 0
0 0 0 0 0 0 0 0 0 0
にするにはどうすればいいの?おしえてエロい人
2017/05/17(水) 16:18:48.87ID:bdvqA1ry0
>>93
なかなか良い問題だな。大学生?
2017/05/17(水) 16:23:04.39ID:se1pH3p/0
a = a + 1;
if (1 <= i && i <= 3 && 3 <= j && j <= 6) fprintf_s(fout, "%d ", a);
else fprintf_s(fout, "0 ");
96デフォルトの名無しさん (ガックシ 067f-sbka)
垢版 |
2017/05/17(水) 16:24:58.51ID:IVbqBIIG6
>>94
大学生です。
指定場所以外も数字が出てしまいます
2017/05/17(水) 16:32:34.86ID:t3IXdrQL0
if (4 <= (a % 10) && (a % 10) <= 7) printf("%d ", a);
else printf("%d ", 0);
2017/05/17(水) 16:35:45.80ID:smeqz8ba0
>>93
エロい人への質問は板違い
http://phoebe.bbspink.com/hneta/
へ移動しなさい
99デフォルトの名無しさん (ガックシ 067f-sbka)
垢版 |
2017/05/17(水) 16:45:05.44ID:IVbqBIIG6
>>95
ベン図的な考え方ですか......!!
ありがとうございます。
>>97
なぜか0〜50全て表示されてしまってます!
>>98
エロ魔人になるにはまだ早いです!
2017/05/17(水) 16:47:44.21ID:smeqz8ba0
>>99
キミがなるんじゃ無い
キミが質問したがってるエロい人の住処に移れと言っている
2017/05/17(水) 18:12:03.01ID:sXGKWmUcM
>>93
どうでもいいけどコメント酷すぎ
> int i, j, a; //int 整数
> FILE *fout; //FILE ファイルの管理用
102デフォルトの名無しさん (ワントンキン MM1f-QWrk)
垢版 |
2017/05/17(水) 18:52:23.54ID:81y1dPE2M
初心者にありがちな無意味なコメントだね
2017/05/17(水) 19:04:10.40ID:+kjRc1QwH
各行コメントつけろという教育の成果
2017/05/17(水) 22:14:49.58ID:trROhyaD0
QZ怒りのクソコメント
2017/05/18(木) 06:55:44.12ID:Zs9E6Q4t0
俺なら条件部分は↓のように書くかな。
if ((a >= 10) && (a < 40) && ((a % 10) >= 4) && ((a % 10) <= 7)) {
「表示する値、表示しない値を条件に判断」という雰囲気。

普段は表組みの行と列の番号(変数i, j)で制御するけど、
この問題だとaの1の桁の値とjの値が一致しないから何やら座りが悪い感じ。
a = 10*i + j + 1;
みたいに「行と列の表示位置から表示すべき値を算出」なら馴染むんだけど。
2017/05/18(木) 09:33:34.39ID:9pl130wuM
if(i==0&&j==9) printf(" 0¥n);
else if(i==1&&j==3) printf(" 14");
else if(i==1&&j==4) printf(" 15");
:
else printf(" 0");
2017/05/18(木) 12:47:56.59ID:Zif2rhHOM
>>105
> if ((a >= 10) && (a < 40) && ((a % 10) >= 4) && ((a % 10) <= 7)) {
なんかちょっとイラッとくる
if ((10 <= a) && (a < 40) && (4 <= (a % 10)) && ((a % 10) <= 7)) {
の方が分かりやすいじゃん
って思うのは俺だけかな

まあそもそも >>95 でいいと思うが
2017/05/18(木) 12:52:54.23ID:Bcm8Uos60
数直線的な並べかたやね
a が10〜40 を 10 <= a <= 40 と思考して
その並びを Cの文法に適合させて 10 <= a && a <= 40
2017/05/18(木) 20:50:09.48ID:V+1hCye70
>>104
森にお帰り
2017/05/18(木) 21:51:10.32ID:pFlTikPN0
int 変数 = 0;
do{
  if(変数 != 0) printf("0〜100違う");
  scanf("%d",&変数);
 } while (変数 < 0 || 変数 > 100);

みたいな感じのやつどういう仕組み?
111デフォルトの名無しさん (ワッチョイ 3e0d-Yh7p)
垢版 |
2017/05/19(金) 08:23:29.86ID:/7Hxktnz0
if (10 <= a && a < 40 && 4 <= a % 10 && a % 10 <= 7) {
ほらすっきり。
2017/05/19(金) 10:32:30.55ID:xPzfUm9BM
if (a/10&3&&a%10&4) { ...
113デフォルトの名無しさん (ワッチョイ 3e0d-Yh7p)
垢版 |
2017/05/19(金) 13:22:27.31ID:/7Hxktnz0
10で剰余したものをビットマスクって、おまえ何屋?
ビット演算子はB言語の名残で変な結合するから気をつけたほうがいいが
その話と>>111のコードは関係ないぞ
2017/05/19(金) 15:12:35.10ID:xPzfUm9BM
悔しかったらもっと短くしてみ。
2017/05/19(金) 15:26:11.54ID:nQP05M7h0
>>110
(1) 入力
(2) 判定
 範囲外の場合、警告表示して (1)に戻る

を並べ替えたもの

(1) 条件付(初回以外)は 警告表示
(2) 入力
(3) 範囲外なら (1)へ戻る
116デフォルトの名無しさん (ワッチョイ 6f79-rE0G)
垢版 |
2017/05/19(金) 15:34:27.30ID:7FyDjLQd0
WannaCryの裏で「駐禁報告書」メール21万件超が大量拡散、添付ファイルは
ウイルス、銀行・カード情報など盗み取る
https://headlines.yahoo.co.jp/hl?a=20170519-00000094-impress-sci
117デフォルトの名無しさん (ブーイモ MM96-JCxV)
垢版 |
2017/05/19(金) 15:36:33.74ID:9d9oZwpEM
>>112
それ14の判定結果からして偽じゃね?
2017/05/19(金) 15:46:59.07ID:nQP05M7h0
きっちり優先順位をケアすれば合ってるんでないの?
10の位 & 3 (. 1 2 3 . 5 6 7 . 9
1の位 & 4 (. . . . 4 5 6 7 . .
2017/05/19(金) 16:12:46.81ID:huxogVYI0
>>114
特定の値域でしか正常に動作しない欠陥コード晒して、何粋がってんの?
2017/05/19(金) 16:37:44.71ID:xPzfUm9BM
え?
i と j が20兆でも動く必要があるの?

で、短くできた?
2017/05/19(金) 16:41:42.81ID:xPzfUm9BM
>>119
if (a/10&3&&a%10&4&&(a<38)) { ...
これでいいか?
2017/05/19(金) 16:48:56.31ID:huxogVYI0
絶望的にセンスが悪い
> a=>10
比較一回を
> a/10&3
除算一回, 論理積一回に改悪
しかも文字数でも1文字増えている
2017/05/19(金) 16:53:29.16ID:nQP05M7h0
i,j で分離すべきなのか a で分離すべきなのか元質問からは読み取れんし・・・
a がたまたま正の整数で良かった (負数の剰余は考えたくないw)
124デフォルトの名無しさん (ワッチョイ 3e0d-Yh7p)
垢版 |
2017/05/19(金) 17:08:03.89ID:/7Hxktnz0
>>122
=は右
これ豆なw
125デフォルトの名無しさん (ブーイモ MM96-JCxV)
垢版 |
2017/05/19(金) 17:10:52.81ID:9d9oZwpEM
>>118
あ、そうか。確かに。
2017/05/19(金) 18:23:28.28ID:fvUmn17Y0
>>122
何言ってんだコイツ
2017/05/19(金) 19:00:41.98ID:rnjvvj6OM
まあまあ。

動作に関係ない仕様を思い込みで追加するのは良くないな。
「今不要なら、今書くな」だっけか。
128デフォルトの名無しさん (ブーイモ MM76-JCxV)
垢版 |
2017/05/19(金) 21:31:34.84ID:91iCt1N+M
yagniかkissかってところ?
2017/05/19(金) 21:48:07.18ID:dqcfAkCR0
C言語ってEclipseの補完が動かないのがデフォなの?
2017/05/19(金) 22:17:08.26ID:ibFM4KQv0
>>128
そうそう。ソフト屋なら知ってるもんかな?

"Keep it simple, stupid" まさに。
131デフォルトの名無しさん (ワッチョイ 636e-F2TF)
垢版 |
2017/05/19(金) 23:37:00.55ID:jsPxGdeJ0
Cは、ライブラリがすくない。おぼえることがすくない
2017/05/20(土) 06:07:10.11ID:ZnY/c9+20
関数にinlineをつけて外部定義を無くせば
インライン展開されなければinline staticと違って
リンカエラーになるとおもってたんですけど、
inline staticを使ったときにはインライン展開される関数が
inlineをつけて外部定義の無くすとリンカエラーになります
なぜですか?
2017/05/20(土) 08:13:36.98ID:Ykf9CvnEa
>>131
野良ライブラリが多いのは多分Cが一番だろうけどな。
何かしらの言語の野良ライブラリの元はCの野良ライブラリが必要で〜とかで、Linuxじゃないと集めてられない。
Win32APIもC前提だけど、多分MSの中の人もいくつあるか把握出来てないんじゃないかな。
134デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/20(土) 18:45:47.54ID:AtO1B5PX0
ISO/IECだってしょせんはブランドの1つでしかなく
別に数学的な公理とかじゃないからな
2017/05/20(土) 19:07:14.30ID:cC3hGZmH0
無矛盾な公理的集合論は自己そのものの無矛盾性を証明する事ができない
2017/05/20(土) 22:15:46.49ID:d/44g1et0
./a.outって入力すると'.'は認識されてないと言われました
何が問題でしょうか?
2017/05/20(土) 22:21:46.82ID:3NdrFBG3d
>>136
コマンドプロンプトはMS-DOSのカルチャーで区切りはバックスラッシュで、MSYSやLinuxはbashのカルチャーで、スラッシュが区切りあるね。
2017/05/20(土) 22:38:50.18ID:feiyOPgg0
>>136
区切りで「/」使いたいなら、パス全体を「"」で括る
「/」以降をオプション「.」をコマンドとして認識するから、全体で一つのコマンドと認識させる必要がある

「/」を区切りに使うのはunix
windowsでも一応使えるけど普通はバックスラッシュ使う
2017/05/20(土) 22:52:55.54ID:d/44g1et0
>>136 >>137
バックスラッシュということは¥ですよね?
2017/05/20(土) 23:02:48.40ID:3NdrFBG3d
bashではセキュリティ上の理由で、現在のディレクトリのプログラムを起動するのに、./が必要だが、Winのプロンプトでは不要。
2017/05/20(土) 23:12:15.43ID:feiyOPgg0
>>139
日本語のwindowsならそう、円記号
コマンドプロンプトとかエクスプローラとかのパス表示には区切り文字に\使われてるでしょ
2017/05/20(土) 23:54:38.45ID:HEZORyL40
昔は.がデフォルトでPATHの先頭に入ってたな
ホームディレクトリにls置いたら面白いことになった
143デフォルトの名無しさん (ワッチョイ b33c-ysFl)
垢版 |
2017/05/21(日) 11:36:43.59ID:p33VUuKu0
#include <stdio.h>
int main(void){

char i[100];

printf("名前を入力してね。\n");
scanf("%s",i);
printf("%sさんですね。\n",i);

return 0;
}

7行目scanf関数で、&iでなくて、iでいけるのはなぜですか?
2017/05/21(日) 11:43:49.79ID:pUWFtSb10
>>143
i の型はポインタ,すなわち char *i だから
2017/05/21(日) 11:44:04.43ID:JHzb8j250
>>142
&はアドレス演算子で、その変数がメモリ上のどのアドレスにあるかを示す
scanf関数で&を使うのは、つまり、「この変数のアドレスに読み取ったものを書き込め」という意味になる。

しかし文字列などの配列は、配列名自身が「配列の一番最初の要素へのアドレス」を示すものになっているので
配列には&が不必要
146デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 12:20:22.06ID:EhbYbiNc0
>>144
printf("%u", sizeof i);
これで4だか8だかになるとでも?
147デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 12:22:40.28ID:EhbYbiNc0
クズの言い方だと
float a = 1.5f;
printf("%f", a);
これが問題なく動作するから、
よって a は double 型だと言っているようなものだ
2017/05/21(日) 12:23:47.67ID:fDsf7qWsa
>>143
配列を関数に渡すと配列の先頭要素へのポインタになるから。
んで、&は参照なんだけど、参照ってざっくり言えば読み込み専用ポインタ。
2017/05/21(日) 12:27:36.21ID:bYtGqajI0
>>146
ならない。
コンパイルエラー
2017/05/21(日) 12:32:18.38ID:wd4rgPA1a
あ、読み込み専用ってのは値が変えられないんじゃなくて、アドレスを変えられないって意味ね。
関数に渡された配列iをi++ってするとi[a++]と同じ意味になる。
(Cでi[a++]なんて書き方許されたかは忘れたが意図は組んでくれ)
2017/05/21(日) 12:33:01.58ID:wd4rgPA1a
ポインタなら上が出来て、参照は出来ないんよ。
2017/05/21(日) 12:41:04.19ID:pUWFtSb10
>>146
そりゃ配列とポインタは振る舞いがまったく同一というわけではなく,はっきりいって別物だから,言い分はわからんでもない.

>>143
訂正する,配列名を示す識別子は配列の先頭を示すポインタになる >>145 が丁寧な説明だ


>>147
そのたとえは意味不明,可変長引数の可変部は float->double に格上げされることを隠すなんでひどい物言いだね
2017/05/21(日) 12:51:40.59ID:EZ567Ylh0
最近は初心者を騙すのが流行しているのか
2017/05/21(日) 13:33:41.41ID:LBGUGIAq0
linuxでc言語開発したいんですが、IDE使わないのが一般的なんですか?
2017/05/21(日) 13:45:10.14ID:2TTm6ATPa
はい。
CやJavaならEclipseが一般的かと。
Eclipseにサポートして貰ってないのはviやemacsカスタマイズしてIDEとして使う感じ。
2017/05/21(日) 13:45:35.47ID:2TTm6ATPa
あ、はい。は忘れてw
2017/05/21(日) 15:31:07.21ID:Mj8j7wxe0
>>132もおねがいします
2017/05/21(日) 15:34:52.30ID:kPjNSBDr0
>>157
質問文が酷すぎて、何を聞きたいのか理解されてないだけだぞ
2017/05/21(日) 16:54:32.37ID:bYtGqajI0
>>154
最近は yacc じゃなくて何か新しいのあるんだよね。
2017/05/21(日) 17:27:25.62ID:1Ubd4ETn0
>>159
最近じゃないけど bison とかか?
161デフォルトの名無しさん (ワッチョイ aa18-JCxV)
垢版 |
2017/05/21(日) 17:32:24.58ID:ViqOYprV0
何でいきなり構文解析器の話になった?
2017/05/21(日) 17:53:33.03ID:Qv//Z9+/0
>>152
>訂正する,配列名を示す識別子は配列の先頭を示すポインタになる >>145 が丁寧な説明だ
なんねーよ カス

int a[10];
a++; // お前の主張が正しいならエラーにはならないはずだ
2017/05/21(日) 17:53:37.15ID:/ema5D/U0
c言語作るって言ってるからでしょ
164デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 17:59:27.49ID:EhbYbiNc0
>>149
コンパイルエラーって、どこが?
https://ideone.com/VpAiLB

>>152
147だが、最後ふじこってんじゃん
落ち着いてもっぺん日本語で書いてくれ
2017/05/21(日) 18:06:09.69ID:zNfd0kUpa
>>162
横からと言うか流されてるんで。。。
飛び飛びになってるけど
>>148
>>150
>>151
は、おいらなりに結構正確に書いたつもり。
参照はC++用語だからCだと&はアドレス演算子が正確だけど。
2017/05/21(日) 19:10:04.03ID:pUWFtSb10
はいはい,そりゃ配列とポインタは互換じゃないよ
分かりやすい説明はないものかね‥
2017/05/21(日) 19:10:52.98ID:pUWFtSb10
>>164
>147だが、最後ふじこってんじゃん
ん?
2017/05/21(日) 19:20:07.02ID:lXB+sVuE0
%f は 引数を double 仮定で引き出す
呼び出し側は (可変長引数の可変部なので) doubleに格上げしてから引数に詰んでる

詰んでるものと引き出すものの食い違いはおきてないんじゃないかね
2017/05/21(日) 19:28:27.25ID:pUWFtSb10
>>168
>積んでるものと引き出すものの食い違いはおきていない
そりゃ引数に積むときに float->double しているから,そうなって当然だが,その事実を隠したまま
>>147
を主張されても,そりゃないよ,としかいいようがない.
2017/05/21(日) 19:29:57.61ID:zNfd0kUpa
>>166
無いなー。。。
ここが変だよC言語とかもう廃刊だっけ。
あれじゃないと説明しきれん。
2017/05/21(日) 19:40:24.59ID:kPjNSBDr0
配列型の"式"は、一部のケースを除いてポインタ型の式に"型変換"される、それは配列の先頭要素を指す、また左辺値でもない
関数の実引数での使用についてなら、>>147の既定の実引数拡張でfloatがdoubleに拡張(型変換)される例と同じような話だと思うんだけどな
2017/05/21(日) 20:10:14.64ID:zNfd0kUpa
>>146
おいらはこれ、sizeofが関数じゃなくて演算子って呼ばれてるのが肝で、関数に配列渡しても何故かポインタのサイズじゃなくて配列サイズ返す謎な奴って解釈してるな。
2017/05/21(日) 20:19:46.42ID:8VZiX6Z0a
んあ。
ごめん。
>>172は無し。
嘘付いた。
配列関数に渡す時、配列の大きさも別で関数に渡してたの思い出した。
2017/05/21(日) 20:24:04.46ID:8VZiX6Z0a
>>146
これは配列宣言した場所と同じスコープなら配列のサイズ返すけど、配列を関数に渡した先(関数の中)でこれするとポインタのサイズが返ってくる。
2017/05/21(日) 21:28:16.83ID:LBGUGIAq0
>>155
ありがとう
176デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 21:39:54.59ID:EhbYbiNc0
>>174
int main(void)
{
char i[100];
wanker(&i);
return 0;
}

void wanker(char (*j)[100])
{
/* ここは、「配列を関数に渡した先(関数の中)」だが? */
printf("%u", sizeof *j);
}
177デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 21:45:09.31ID:EhbYbiNc0
>>169
隠している? それは聞き捨てならんな
公文書に書かれていることを俺がどう隠したとぬかす?
2017/05/21(日) 21:53:31.38ID:8VZiX6Z0a
>>176
それ、文字配列だからヌル文字(0)で数えられるっしょ。
intの配列とか無理だから。
179デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 22:00:12.54ID:EhbYbiNc0
>>178
どう無理なんだ?
int main(void)
{
int i[100];
booger(&i);
return 0;
}

void booger(int (*j)[100])
{
printf("%u", sizeof *j);
}
2017/05/21(日) 22:02:18.84ID:lXB+sVuE0
いやいや sizeof はコンパイル時に確定する演算だから
strlen みたいにポインタの指し先追っかけてデリミタ見つかるまでのバイト数とか 実行時依存じゃない
2017/05/21(日) 22:08:35.89ID:8VZiX6Z0a
>>179
ん?
出来てんの?
よく見たら宣言だけで初期化(確保)はしてないのな。
うーん。。。
ちょっとおいらの方でも書いて検証してみるわ。
2017/05/21(日) 22:10:30.59ID:lXB+sVuE0
だから sizeof は型さえ類推できれば、変数の実態なくてもいいんだって
なんなら () 付けて 型をかけばいい
183デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 22:10:36.85ID:EhbYbiNc0
176でも初期化はしてないが
184デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 22:13:36.56ID:EhbYbiNc0
>>182
型をかけばいいって、こうか?
if (sizeof i != sizeof(char*)) puts("ahem!!");
2017/05/21(日) 22:15:17.46ID:lXB+sVuE0
>>184
ごめん、すべて ID:8VZiX6Z0a 君向け (>>178 他)
2017/05/21(日) 22:39:46.18ID:fA6hmJLUa
>>179
分かってきたかも。
そのコードだと

int *i;
ってポインタ宣言すると

iのままがポインタで、*iがポインタの指す中身だから。。。

配列の実体になるんだ。

もっとシンプルに初心者のやりがちな

int main(void)
{
int i[100];
booger(i[100]);
return 0;
}

void booger(int i[100])
{
printf("%u",sizeof a[100]);
}

こう言うコードだとポインタのサイズが返ってくる。
2017/05/21(日) 22:41:32.99ID:fA6hmJLUa
ちゅーか十何年ぶりのCだったわ。。。
2017/05/21(日) 22:44:28.27ID:fA6hmJLUa
sizeof a[100]はタイポだけど許してね。
配列の変数名にiとか普通使わんのよ。
インデックス変数に使うからさ。
a[i]
2017/05/22(月) 06:47:21.18ID:3isejMaU0
void f(void * v, int size, void * x){
*v=*x;
}
上のコードで x の指し示す値のサイズが size であるとき
どのようにvの指し示す場所にxが指し示す値を一度に代入できますか?
2017/05/22(月) 07:31:20.24ID:uEzgaoxk0
memcpy(*v, *x, size);
2017/05/22(月) 07:34:49.91ID:uEzgaoxk0
訂正
memcpy(v, x, size);
2017/05/22(月) 07:37:02.82ID:qnT1Y5yL0
>>189
学校の宿題か?
2017/05/22(月) 08:26:47.95ID:jL5+dSxZ0
for (i=0; i<size; i++) ((int8_t*)v)[i] = ((int8_t*)x)[i];
194デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/22(月) 09:21:02.66ID:uUtJqX7+0
while(size--) *(char*)v++ = *(char*)x++;
2017/05/22(月) 11:15:09.22ID:jL5+dSxZ0
>>194
文法エラー (v, x のインクリメント操作は void * で評価されてる)
2017/05/22(月) 11:57:30.90ID:WXjICEY9M
size の単位が何なのか分からんなぁ。
2017/05/22(月) 12:02:49.26ID:HD7uOEeF0
(`・ω・´) ?
2017/05/22(月) 12:44:29.59ID:+BU32a3i0
最近はCMakeを使うのが普通なの?
GNU Make覚える必要があるかな

話変わるけど、MakeFileってソース1つ追加するたびに、変更する必要がある?
199デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/22(月) 13:11:20.22ID:uUtJqX7+0
>>195
すまん、素でボケてたw

しかしこれ構文規則には違反してないぞ
意味論においてvoid*の増分が禁止されているって話で
2017/05/22(月) 13:14:30.22ID:jL5+dSxZ0
>>199
あー コンパイルエラーと言えばよかったかw
2017/05/22(月) 13:14:54.60ID:CEFnqLB20
Makefileを作らなくてもmake出来るケースがある事を最近は知らない奴が多い
202デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/22(月) 17:02:12.42ID:uUtJqX7+0
cc love.c じゃなく
make love でいい件か?
2017/05/22(月) 19:00:44.22ID:J9ejs7e9M
makeのデフォルトルールだね
.c.o はよく使う
204デフォルトの名無しさん (ブーイモ MMea-ysFl)
垢版 |
2017/05/22(月) 19:41:32.06ID:h9CxmUP8M
>>201
まじか、知らなかった
2017/05/22(月) 19:45:14.71ID:yWHDUG7V0
作って覚えるVisual C#のようなゴールを設定して色々学ぶC言語の書籍はありますか?
206デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/22(月) 20:02:28.46ID:uUtJqX7+0
便利にゃ違いないけど
ロクに指示も与えずよきに計らえってスタンスで
何が出来てくるのかに受動的でいることに
俺は我慢できないな

無関心な大将を有能な部下がフォローして事なきを得たってことだろ
207デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/22(月) 20:02:58.11ID:uUtJqX7+0
だからスタックサイズのデフォも知らない馬鹿が大量発生するわけだし
2017/05/22(月) 20:03:31.72ID:Zgh5eQVH0
>>195
(void *)c++ は1だけインクリメントされる,c99 では規格で決まっている
2017/05/22(月) 20:04:10.12ID:Zgh5eQVH0
>>199
>意味論においてvoid*の増分が禁止されているって話で
そんな決まりはない,void * のインクリメントは正確に1だ
2017/05/22(月) 20:15:17.89ID:5FlvGyv/0
*vがsize分確保されてないんじゃね?
普通こうだよな
void f(void ** v, int size, void * x)
2017/05/22(月) 20:16:31.52ID:2o5iWMtc0
>>208
しらなんだ C99 からなのかね
2017/05/22(月) 21:22:47.69ID:d/63nSXI0
voidがサイズ持ってるとか無理やり過ぎ
便利だけど
2017/05/22(月) 21:22:49.29ID:lKEcPOEA0
>>208,209
うそつき
2017/05/22(月) 21:31:07.71ID:oluY6epY0
1になるのはgcc拡張だろ
215デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/22(月) 21:42:16.48ID:uUtJqX7+0
そういうオチか
ばかたれぃっ!!
2017/05/22(月) 23:25:56.35ID:klirxPDR0
息をするように嘘をつかれた
2017/05/23(火) 06:44:54.44ID:a7cn3COJ0
>>214
C99 からガチで
2017/05/23(火) 09:00:04.50ID:BTD2Lf690
>>208-209>>217
C99規格には「(void *)c++ は1だけインクリメントされる」という規定はない。
C99規格書(ISO/IEC 9899)は英語なのでそれを元にしたJIS X3010で説明する。
X3010は章番号を変えてないのでISO/IEC 9899の該当文章は自分で確認してくれ。

ISO/IEC 9899:TC2
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf
JIS X3010
http://kikakurui.com/x3/X3010-2003-01.html

> 6.2.5 型
> 型は,オブジェクト型(オブジェクトを完全に規定する型),関数型(関数を規定する型),
>及び不完全型(その大きさを確定するのに必要な情報が欠けたもの)に分類する。
> void型の値の集合は空とする。それは,完全にすることのできない不完全型とする。
> void へのポインタは,文字型へのポインタと
> 同じ表現及び同じ境界調整要求をもたなければならない。

voidは不完全型だがvoid*はオブジェクト型でchar*と相互に代入可能だ。

> 6.5.3.4 sizeof 演算子
> sizeof演算子は,関数型若しくは不完全型をもつ式,それらの型の名前を括弧で
> 囲んだもの,又はビットフィールドメンバを指し示す式に対して適用してはならない。
> 型char,unsigned char若しくはsigned char(又はそれらの修飾版)をもつ
> オペランドに適用した場合の結果は,1 とする。

不完全型であるvoidにはsizeofを適用できない。
char派生はサイズ1と明確に規定されているがvoidのサイズは規定がない。
だから(void *)c++が元の値のままでもC99規格違反ではない。
2017/05/23(火) 09:33:11.13ID:6xCmSTo3M
>>218
「void はサイズ1だけど、sizeof するなよ」ってことじゃね?

「適用してはならない」が何なのかわからんけど。
2017/05/23(火) 09:47:33.99ID:Mt8tSRb/M
>>219
サイズ1ってどこからわかるの?
2017/05/23(火) 11:13:27.58ID:ufwaINxg0
ウンコQz得意の炎上学習法か
とっとと死ねよ
2017/05/23(火) 11:24:40.32ID:ufwaINxg0
>>218
ポインタの算術演算なので参照するところが違う
6.5.6-2の定義で加算可能なポインタは「オブジェクトへのポインタ」であり、
void *はキミが引用した6.2.5によりこの条件を満たさない 従ってQzはうんこ 今すぐ死ね

6.5.6 Additive operators
2 For addition, either both operands shall have arithmetic type,
or one operand shall be a pointer to an object type and the other shall have integer type. (Incrementing is equivalent to adding 1.)
2017/05/23(火) 11:31:22.03ID:YiZYoA3+0
規格のどこかにあったはず
2017/05/23(火) 11:45:51.13ID:ENsR+rXL0
おいQZ都合悪くなったら自演で叩きかよ
おまえもうム板に向いてないから一人でコードオナニーしてろよ
2017/05/23(火) 12:35:42.70ID:F0rvxaiH0
この件、過去に私が書いたコードを元に議論されたんだよね、当時の書き込みが見つからない…

>>218
>>222
ありがとうございます。感謝です。うれしいです。

>>218
>void へのポインタは,文字型へのポインタと
>同じ表現及び同じ境界調整要求をもたなければならない。

というのだから

>>222
当然、(char *)++ と (void *)++ は同じだよね
2017/05/23(火) 12:37:05.33ID:F0rvxaiH0
>>255 = >>256
2017/05/23(火) 12:38:56.50ID:fCVURflQ0
配置アドレスのアライメント要求が等しいのと
アドレスの算術演算で同じ結果になるのは別じゃ?
2017/05/23(火) 12:50:27.27ID:ufwaINxg0
このバカは
https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Pointer-Arith.html#Pointer-Arith
すら読まずに、C99 からガチでキリッ
とか言ってんのか
死ね死ね死ね今すぐ死ね
2017/05/23(火) 12:57:12.80ID:fCVURflQ0
ideone の C99 でも(同じwarninngで)文句言ってるな
https://ideone.com/fDNXlH
2017/05/23(火) 13:03:46.65ID:BTD2Lf690
>>225
「同じ表現及び同じ境界調整要求」と同じ演算ができるかは別の話だ。
const変数は非const変数と「同じ表現及び同じ境界調整要求」だが変更できない。

>>222のJIS X 3010:2003該当部分は下記の通りだ。
voidはオブジェクト型ではなく不完全型だからvoid*に加減演算するのは規格外だ。

> 6.5.6 加減演算子
> 制約 加算の場合,両オペランドが算術型をもつか,又は一方のオペランドがオブジェクト型への
> ポインタで,もう一方のオペランドの型が整数型でなければならない。(増分は 1 の加算に等しい)
2017/05/23(火) 15:16:25.17ID:Eouhg5rk0
gccでも-pedanticオプションを使えばgcc拡張を警告するぞ
-std=c99オプションに頼るな

gcc-8の警告文
warning: wrong type argument to increment [-Wpointer-arith]

clang-5の警告文
warning: arithmetic on a pointer to void is a GNU extension [-Wpointer-arith]
2017/05/23(火) 17:10:14.54ID:ENsR+rXL0
QZ怒りの暴走
233デフォルトの名無しさん (アウアウカー Sacb-W7a5)
垢版 |
2017/05/23(火) 17:50:06.75ID:YSxby3lha
>>225
char型へのポインタ型のオブジェクトとvoid型へのポインタ型のオブジェクトが同じ境界調整を持つという規格が
なぜchar型のオブジェクトとvoid型のオブジェクトが同じサイズという話になるの?
2017/05/23(火) 18:08:28.42ID:F0rvxaiH0
>>230
なるほど、感謝です。
この議論、以前にも(自分のコードを対象に)問題になって、そのときは
void *p;
に対して
p + 3
が意味をもつのか、というあたりだったのですが、当時の議論に誤りがあったのかもしれません。
なお手元のgcc5.3.0 では -ansi -Wall で警告を出してくれませんでした。

>>228
あなたにもとっても感謝してますよ
これからもどうかご教示ください :-)

>>233
えっ、そう読むのか…
235デフォルトの名無しさん (アウアウカー Sacb-W7a5)
垢版 |
2017/05/23(火) 18:17:27.01ID:YSxby3lha
>>234
それ以外にどう読むの?
「同じ表現」はポインタ型のオブジェクトの内部表現の話だよね
並列で書いてある「同じ境界調整」もポインタ型のオブジェクトの境界調整の話と捉えるのが自然じゃないの
236デフォルトの名無しさん (アウアウカー Sacb-W7a5)
垢版 |
2017/05/23(火) 18:22:45.88ID:YSxby3lha
>>234
あと、-Wpointer-arithって言われてるのに、なんでWallで確認してるの?
Wallを勘違いしてない?
2017/05/23(火) 18:32:25.29ID:ufwaINxg0
>>230
>(増分は 1 の加算に等しい)
++を増分演算って訳した上に「演算」を省略すると意味不明になるね
2017/05/23(火) 18:40:44.02ID:F0rvxaiH0
>>235
該当部分を読むと

JIS 6.2.5
>void へのポインタは,文字型へのポインタと同じ表現及び同じ境界調整要求をもたなければならない ( 39 ) 。
>同様に,適合する型へのポインタ同士の場合,修飾版であるか又は非修飾版であるか(const とかのことby QZ) にかかわらず,
>同じ表現及び同じ境界調整要求をもたなければならない。
>構造体型へのポインタは,すべて同じ表現及び 同じ境界調整要求をもたなければならない。
>共用体型へのポインタは,すべて同じ表現及び同じ境界調整 要求をもたなければならない。
>これ以外の型へのポインタは,同じ表現又は同じ境界調整要求をもつ必要はない。

これを読んで感じるのは、つまりポインタ自身の表現やアラインメントを、いろいろ細分化する実装を思いつかない
far とか near とかでもなさそうだ。
細分化するとすればむしろポインタが指す先に関することではないだろうか?

>>236
え?-Wall って全部だすんじゃなかったんですかね。たぶん勘違いしていると思う。
239デフォルトの名無しさん (ワッチョイ cac8-amUu)
垢版 |
2017/05/23(火) 18:40:46.39ID:wffizmnr0
汎用ポインタのインクリメントは、
エラーが出るか1進むかだろう。
240デフォルトの名無しさん (ワッチョイ 9e28-Yh7p)
垢版 |
2017/05/23(火) 18:41:11.96ID:7CxjD8/v0
>>235
境界調整が同じでもサイズの違うオブジェクトへのポインタはあるだろ
char *a, (*b)[2];

K&R C では char* でよかった用途に、
なぜ、わざわざ void* を持ち込んだのか考えてみれ
サイズが 1 なのが気持ち悪くて、
サイズが不明ということにするためだろうが

この期に及んで void* が指す先のサイズが 1 とか言い出す
どスカタンがもしいたら死刑でいい話だぞ
241デフォルトの名無しさん (アウアウカー Sacb-W7a5)
垢版 |
2017/05/23(火) 18:46:38.37ID:YSxby3lha
>>240
安価先間違ってない?
ポインタの指すオブジェクトのサイズが一緒なんて一言も書いてないんだけど
2017/05/23(火) 18:53:09.03ID:F0rvxaiH0
>>240
よくわかる、その意見
でも memcpy(), memmove() の引数が void * であることが、ちらりと頭に過ぎるんです
これらは C で実装できない、てことですかね?
2017/05/23(火) 18:56:05.69ID:F0rvxaiH0
ID:F0rvxaiH0 = QZaw55cn4c
2017/05/23(火) 18:57:52.22ID:07biNjOo0
>>242
何言ってんの?
245デフォルトの名無しさん (ワッチョイ 9e28-Yh7p)
垢版 |
2017/05/23(火) 19:00:42.38ID:7CxjD8/v0
>>241
IDで追ってみたら、おまえさんの疑いは晴れた
すまんかった
2017/05/23(火) 19:01:37.22ID:F0rvxaiH0
>>244
void *memmove(void *dst, const void *src, unsigned n);
void *memcpy(void *dst, const void *src, unsigned n);
にて char * ではなく void * になっている理由はなにか?
2017/05/23(火) 19:09:35.34ID:ufwaINxg0
>>240
いや第一目的は、全ての型へのポインタと互換(キャストなしで変換できる)なポインタが欲しかったのだ
2017/05/23(火) 19:17:52.52ID:07biNjOo0
>>246
汎用なのになんでstring.hかと思ったことはある
2017/05/23(火) 19:31:53.76ID:ZdN5y2SH0
>>238
Wallは全ての警告が有効になるわけではない
https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Warning-Options.html#index-Wall

> これを読んで感じるのは、つまりポインタ自身の表現やアラインメントを、いろいろ細分化する実装を思いつかない
> far とか near とかでもなさそうだ。
> 細分化するとすればむしろポインタが指す先に関することではないだろうか?
思いつかないなら、同じにすれば良いだけでしょ
そこからなぜ「同じ表現」はポインタの話なのに、「同じ境界調整要求」はポインタの先のオブジェクトの話になるの?

>構造体型へのポインタは,すべて同じ表現及び 同じ境界調整要求をもたなければならない。
>共用体型へのポインタは,すべて同じ表現及び同じ境界調整 要求をもたなければならない。
構造体/共用体型のオブジェクトが等しい境界調整要求を持つほうが非現実的でしょ
250デフォルトの名無しさん (ワッチョイ 9e28-Yh7p)
垢版 |
2017/05/23(火) 22:10:38.61ID:7CxjD8/v0
>>247
K&R C では char* をキャストなしで変換できてたが?
int *a = malloc(4);
251デフォルトの名無しさん (ワッチョイ 9e28-Yh7p)
垢版 |
2017/05/23(火) 22:57:03.61ID:7CxjD8/v0
>>246
バス幅が8bitでないハードでもったいないことしないためだろ
2017/05/23(火) 23:35:41.22ID:ZdN5y2SH0
>>238の通りQZは「構造体型のオブジェクトが全て同じ境界調整要求をもつ」と主張してるからな

この世に存在する大多数のコンパイラが規格に準拠していないという新説を主張しているぐらいだら
QZの脳内には、余人には考えつかない理屈があるんだろ
2017/05/24(水) 03:30:23.68ID:lEIYBmmJ0
QZはサイコ自演厨
くりかえすQZはサイコ自演厨
2017/05/24(水) 13:17:30.92ID:spHSYyT3M
>>250
なんかトートロジーみたいになってきたけど、K&Rの何でもポインタとして使われてたchar *は
ANSI以降はvoid *になったってことでしょ
255デフォルトの名無しさん (エーイモ SE8a-9r6K)
垢版 |
2017/05/24(水) 15:28:53.02ID:QjzRyjLLE
すいませんこのスレにワッチョイを導入した経緯ってなんですか?
256デフォルトの名無しさん (ワッチョイ 9e7c-Yh7p)
垢版 |
2017/05/24(水) 18:24:04.77ID:yvqQkV490
>>254
言い忘れ
今のCだって void* を void* 以外のポインタに変換できるが
あくまで推奨としてキャストする慣習があるだけで、
キャストが義務化されたのは C++

なので >>247 はかなり斜め上
あることを言い忘れているのだろうと好意的に解釈しても
互換とは何かについて考察が甘いと言わざるを得ない
2017/05/24(水) 18:28:35.29ID:UdPLjxGk0
cuda Cコンパイラーは
void*型からの代入にキャストが無いとエラーになる
多分MSのcl使ってるからそうなる
258デフォルトの名無しさん (ワッチョイ 9e7c-Yh7p)
垢版 |
2017/05/24(水) 18:36:39.06ID:yvqQkV490
>>257
そりゃ、管の方言だろ
cl, gcc, clang-cl どれもok
259デフォルトの名無しさん (ササクッテロロ Sp03-4D2f)
垢版 |
2017/05/24(水) 19:26:19.45ID:E7SQQ2iip
PStructA pstA[10];
に対して
&pstA[1] と pstA+1 は同じ一番目のポインタを返すという認識で合ってるでしょうか?
ポインタ演算と配列の違いが腑に落ちてないです
260デフォルトの名無しさん (ワッチョイ 6b00-Gjiu)
垢版 |
2017/05/24(水) 19:45:56.66ID:L7sKwR/z0
アドレス取得が後か先かの違いじゃない?
あんまり深く考えるとハゲるよ
2017/05/24(水) 19:50:38.77ID:/WrwABBj0
>>250
逆ができたか? できなかったと記憶してるが
2017/05/24(水) 20:44:36.72ID:tHoyeV8z0
NVIDIAのOpenCLコンパイラはvoid*を演算するコードをコンパイルしようとすると落ちる。
263デフォルトの名無しさん (ワッチョイ 0fbc-OpMt)
垢版 |
2017/05/25(木) 10:12:33.17ID:NxjYanVn0
>>261
できる/できないを、何を基準に言っている?
K&R 仕様の cc は死ぬほど寡黙なコンパイラで
だからこそ lint が別で用意されていたんだぜ
2017/05/25(木) 10:14:55.51ID:PLr2HWak0
for(int i=0;i<a+3;++i)
でaがループの中で使われなくても毎回計算されなおしますか?
2017/05/25(木) 10:50:22.52ID:jD8c7u6va
され直す。
2017/05/25(木) 11:11:35.32ID:1r4kIkVY0
>>264
volatileなら必ずされなおす
volatileじゃなければされなおされない可能性がきわめて高い
2017/05/25(木) 11:25:49.00ID:jD8c7u6va
そうか、最適化で定数になってる可能性が高いな。
2017/05/25(木) 12:50:12.06ID:0WgUeo5I0
>>263
ああ、思い出して来た
K&R(コンパイラ)では代入でポインタの型検査を行わなかった
関数呼び出し関数プロトタイプがないのでできなかった
すなわち全てポインタ型は互換だった

ここにポインタの型検査を持ち込むんだからK&Rでの「互換」はANSI Cか必要とした「互換」ではなく当然に役にたたない
従って、>>250は的はずれな指摘
269デフォルトの名無しさん (ワッチョイ 0fbc-OpMt)
垢版 |
2017/05/25(木) 14:30:16.20ID:NxjYanVn0
落ち着けよ
代入と関数原型は関係ないし
格助詞がふじこってるぞ
2017/05/25(木) 15:03:16.39ID:0WgUeo5I0
わざとそのように誤読したがるのはわかるが
> 関数呼び出し時の検査は関数プロトタイプがないのでできなかった
だな、編集ミスだ
271デフォルトの名無しさん (ワッチョイ 0fbc-OpMt)
垢版 |
2017/05/25(木) 15:59:46.97ID:NxjYanVn0
いや、だから代入と関数原型は関係ねえってば
代入が関数なのはC++だぞ
2017/05/25(木) 19:12:03.32ID:0WgUeo5I0
代入と関数呼び出しで型検査が必要になった
関係大あり
273デフォルトの名無しさん (ワッチョイ 0fbc-OpMt)
垢版 |
2017/05/25(木) 21:47:16.88ID:NxjYanVn0
代入には型検査がもともとあった
double a = 1.5;
int b;
b = a;
b には (int)a の値が正しく代入され
決して a の bit63-32 が切り裂きコピーされることはない
2017/05/25(木) 23:12:03.91ID:0WgUeo5I0
>>273
ポインタの型の検査の話だが
お前の短期記憶には障害が発生してるぞ
2017/05/26(金) 01:40:06.53ID:SIwotEYO0
またQZが自演を始めたよ
2017/05/26(金) 05:57:05.69ID:gxtuHd510
-Wshift-op-parentheses
これを守ろうとすると括弧だらけでコードが糞になるから切ることにするよ
2017/05/26(金) 08:18:33.58ID:IXNjZ2pR0
>>276
ifの条件節に代入を直接書けないのもうざいな
278デフォルトの名無しさん (ワッチョイ 0f29-OpMt)
垢版 |
2017/05/26(金) 09:57:19.90ID:qaraDccl0
>>274
char *a = "QZ";
int *b;
b = a;
で、これの何が関数呼び出しと関係があるんだ?
俺のページフォールトはいいから
おまえのラッチアップを何とかしようや
2017/05/26(金) 10:14:22.69ID:IXNjZ2pR0
>>278
ポインタの型検査の話だってなんども言ってんだろ
ポインタの型検査は代入と関数呼び出しで行われる

わかったかバーカ
280デフォルトの名無しさん (ワッチョイ 0f29-OpMt)
垢版 |
2017/05/26(金) 11:12:11.70ID:qaraDccl0
>>279
わかんねえよデフェクト野郎

代入での型の検査の話だが
お前の制御記憶にはショートモードの故障が発生してるぞ
2017/05/26(金) 11:15:48.33ID:IXNjZ2pR0
>>280
アホウ ANSI-Cでの型検査の話だ
282デフォルトの名無しさん (ワッチョイ 0f29-OpMt)
垢版 |
2017/05/26(金) 11:33:23.33ID:qaraDccl0
>>281
アホウはおまえ
>>240から始まって247-250と流れてるのが
おまえにはANSI-Cの話に見えるのか

どうでもいいがCの規格文書名はISO/IEC9899だろうが
未だにX3.159-1989を拠り所としている化石かおまえ?
2017/05/26(金) 13:06:41.64ID:IXNjZ2pR0
アホウ ポインタの型検査が規格になったのはANSI-Cだ

> K&R C では char* でよかった用途に、
> なぜ、わざわざ void* を持ち込んだのか考えてみれ
> サイズが 1 なのが気持ち悪くて、
> サイズが不明ということにするためだろうが
このバカ(お前?)が決定的に間違ってる
void*が必要になったのはポインタ型検査に伴い発生する不都合を解消するためだ
それがあらゆる型へのポインタと互角なポインタであり、その役割をvoid *に割り当てた
284デフォルトの名無しさん (ワッチョイ 0f29-OpMt)
垢版 |
2017/05/26(金) 15:24:42.21ID:qaraDccl0
>>283
> ふじこふじこ

>>250もっぺん読め
別に不都合なんか起きてなかったぜ

どうでもいいが、あらゆる型へのポインタと互角に戦えるポインタがあったとして
それ以外のポインタってつおい? compatibility を日本語では互換性だ
ボビーオロゴンみたいな日本語を素でやるな池沼
2017/05/26(金) 18:45:52.60ID:IXNjZ2pR0
>>284
本当に頭悪いなお前
K&Rではポインタの型検査を行ってなかったので、char *(に限らず全てのポインタ)が互換だっただけだ
2017/05/26(金) 18:54:11.28ID:IXNjZ2pR0
ここの文脈では相互に変換できるポインタを「互換」と呼んだ
A pointer to void may be converted to or from a pointer to any incomplete or object type.
2017/05/26(金) 19:53:13.29ID:SIwotEYO0
きえろQZ!
288デフォルトの名無しさん (ワッチョイ 0f29-OpMt)
垢版 |
2017/05/26(金) 22:00:35.72ID:qaraDccl0
>>285
で、どんな「不都合」が生じたというんだ?
空想論を一切含まない具体的な例示をしてみろ
2017/05/26(金) 22:03:50.72ID:EYAykb/80
K&R1 なんて今となってはどうでもいい‥

>>287
やだよ
290デフォルトの名無しさん (ワッチョイ 0f29-OpMt)
垢版 |
2017/05/26(金) 22:06:47.38ID:qaraDccl0
K&R1はCの元々のコンセプトを純粋に美しく語っているもので
これに嫌悪感を持ったり無関心な者はCの本質を知らないのではなく解りたくない者で
去る者は拒まずの消極的破門でいい
2017/05/26(金) 22:14:56.87ID:efrj6x/y0
>>287 >>289
自演?
2017/05/27(土) 00:26:52.71ID:XzB/9PvX0
>>288
バーカ void *のように他のポインタと互換なポインタが無けりゃ
memcpyとか一々キャストしなきゃならないだろ
本当に頭が悪い
293デフォルトの名無しさん (ワッチョイ 7bf9-OpMt)
垢版 |
2017/05/27(土) 06:58:12.92ID:ucevWPfX0
>>292
戯れ言も、せめて事実に基づいてぬかせシャブ中野郎
キャストなんかいらねえのに
おまえが何か思い込んでるのは
コンパイラに警告されたからだろうが
警告って何かわかってねえのまる出しだな
2017/05/27(土) 12:56:06.47ID:XzB/9PvX0
ANSI-CはK&Rで書かれたソースがそのままコンパイルできるように作られたので、エラーではなく警告にしたのは当たり前だ
バカすぎるぞ お前
2017/05/27(土) 15:45:49.87ID:4RTqTK2k0
>>285
>K&Rではポインタの型検査を行ってなかったので、char *(に限らず全てのポインタ)が互換だっただけだ
が事実だったら

>>292
>memcpyとか一々キャストしなきゃならないだろ
2017/05/27(土) 15:46:27.40ID:4RTqTK2k0
>>285
>K&Rではポインタの型検査を行ってなかったので、char *(に限らず全てのポインタ)が互換だっただけだ
が事実だったら

>>292
>memcpyとか一々キャストしなきゃならないだろ
ではないのではないだろうか?
2017/05/27(土) 19:48:36.25ID:bhlzwwxY0
QZ怒りの自演がバレるwwww
2017/05/27(土) 20:24:35.80ID:jOh20AuV0
voidポインタでもキャストしてるわw
2017/05/27(土) 22:37:43.80ID:y4s2F+UB0
freeの戻り値って普通キャストしていたよね
2017/05/27(土) 23:30:24.62ID:3hOJokwS0
(*´ω`*)?
2017/05/27(土) 23:45:53.19ID:vBffp2jh0
(* ͡° ͜ʖ ͡°*)=3
302デフォルトの名無しさん (ワッチョイ 4b10-OpMt)
垢版 |
2017/05/28(日) 07:21:49.29ID:cMxKlmAA0
>>294
ほらな、警告とは何かがわかってない
X3.159-1989ではエラーも警告も定義していない
それらは特定のコンパイラ製品の挙動だ

特定のコンパイラにdisられたら
自分が悪いんだろうとしか思えない
ど初心者の心理からいつまで経っても
卒業できないポンコツPG乙
2017/05/28(日) 20:40:53.29ID:5m3UytZ+0
さあQZが自演するぞ
2017/05/28(日) 20:44:17.90ID:5m3UytZ+0
ゴミ無職QZのクソコード自演は本当に気持ち悪い
305デフォルトの名無しさん (ワッチョイ 2b75-sfkZ)
垢版 |
2017/05/28(日) 21:50:21.98ID:HrcHJfqb0
>>299
いつの時代のfreeは値返したの?
306デフォルトの名無しさん (ワッチョイ bb6e-+G4n)
垢版 |
2017/05/28(日) 21:54:08.04ID:QPUrPhGM0
ANSI C以外を語るじじいが居座るスレかよw
307デフォルトの名無しさん (ワッチョイ 4b10-OpMt)
垢版 |
2017/05/28(日) 21:55:27.91ID:cMxKlmAA0
K&Rにはvoidがなく返却値の型を省略すればintと見なされた
returnがないか空のreturn;は不定を返した
これだけ言えばわかるな?
308デフォルトの名無しさん (ワッチョイ bb6e-+G4n)
垢版 |
2017/05/28(日) 22:01:09.82ID:QPUrPhGM0
C言語はUNIXの仕様が前提だから、そこまで含めて移植しなかったから混乱した。
2017/05/28(日) 22:04:17.46ID:VrUpCcMk0
(void)free(ptr) ?
310デフォルトの名無しさん (ワッチョイ 2b75-sfkZ)
垢版 |
2017/05/28(日) 22:10:09.67ID:HrcHJfqb0
>>307
いや、freeが何返してたのか解らんけど。それをcastする理由も。
まぁ、一生使うことのない知識だからどうでも良いけどね。
2017/05/28(日) 22:37:19.96ID:7TA+N7360
>>307
でvoidもないのに何にキャストしてたって? w
2017/05/28(日) 23:16:58.78ID:KL+xXoJsM
只の釣りだな
2017/05/29(月) 01:09:58.10ID:lyV0c6X20
>>307
たびたび見受けられるけれど、『返却値』を使うのはやめて欲しい
関数に与えた値をそのまま返すとは限らないんだから
普通に返り血、戻り値じゃあかんの?
314デフォルトの名無しさん (ワッチョイ 0f9c-kS8n)
垢版 |
2017/05/29(月) 01:16:09.85ID:j0cmL5ae0
返却値と返り値で、何が違うの?
確かに返却値って言葉はあまり使わない気がするけど、そんなこだわるほどのもん?
2017/05/29(月) 01:17:52.13ID:zS+u+zXg0
排泄値にしよう
2017/05/29(月) 01:27:03.01ID:lyV0c6X20
>>314
返却って人から借りた物をそのまま返すという印象が強い
個人の見解と言ってしまえばそれまでだけれども
317デフォルトの名無しさん (ワッチョイ 0f9c-kS8n)
垢版 |
2017/05/29(月) 01:53:50.29ID:j0cmL5ae0
>>316
その君の言うところの意味が、「返す」と何が違うの?って話。
「返す」を大辞林で引いたら一番目の意味に「返却」と書いてある事実をどう考える?

所詮その程度の主観的な印象に過ぎない物を、人に押し付けられても…
まあ、2chだし、言うのも勝手か。
318デフォルトの名無しさん (ワッチョイ 2b75-sfkZ)
垢版 |
2017/05/29(月) 02:14:29.26ID:JtPPrjAE0
>>317
返すの意味の一つに返却があるというだけでイコールでは無いと思うけどね。
例えば”上げる”とか辞書引いたら色んな意味が載ってて一番目に載ってる意味と関連するわけではないということは解るよね。
2017/05/29(月) 02:20:02.64ID:lyV0c6X20
>>317
返すって言うところを返却に置き換えることが出来るのは限定されるでしょうに

あなたは釣り銭を返却するって言うつもり?
受けた恩を返却するの?
320デフォルトの名無しさん (ワッチョイ 0f29-OpMt)
垢版 |
2017/05/29(月) 05:18:14.60ID:6wk42oha0
>>313
それは日本鉱業標準審査会に言え
俺に言うな、わかった?
2017/05/29(月) 06:20:41.78ID:RCqUfmRt0
>>313
スプラッターな言語やね
2017/05/29(月) 06:24:13.95ID:KA+g5PFR0
$$$4.3$$$
"V"="1.3335412","0","1","3Q",
2017/05/29(月) 07:45:45.57ID:cJoa6MEM0
>>320
石炭でも掘るのかよ?
324デフォルトの名無しさん (ワッチョイ 0f9c-kS8n)
垢版 |
2017/05/29(月) 09:05:50.24ID:j0cmL5ae0
>>319
おかしくないと思うけど?
2017/05/29(月) 09:08:17.15ID:m6wef0Zf0
釣り銭がでてくる所は返却口って呼称してることが多いが まぁ
2017/05/29(月) 09:15:26.79ID:kbe0Kudi0
まさかと思って調べてみれば JIS X3010 では本当に返却値になっているんだな
2017/05/29(月) 09:38:12.28ID:5HzXgXAz0
おいQZそれ以上発狂するな
お前の無知がバレるぞ
328デフォルトの名無しさん (ワッチョイ bb6e-+G4n)
垢版 |
2017/05/29(月) 09:40:08.06ID:3z87Obs+0
ここまで「却」という漢字の調べた者なしw

「却」の意味は答えると「返却値」はおかしいが、英語でReturnと言ってるので返却と翻訳したのだろう。
2017/05/29(月) 10:07:07.99ID:h1ztVJLm0
返すのは制御で、その時に渡す値くらいに思ってたな
330age (ワッチョイ db8d-InMg)
垢版 |
2017/05/29(月) 11:00:15.37ID:T5H0S0Nm0
Windows環境のHANDLE型について教えて下さい。
Windows10/64環境下とWindows7/64環境ではHANDLE型の扱いは異なるのでしょうか?

HANDLE型が使用できない処理系の為に
HANDLE型を返すWindowsのAPIにラッパする形でHANDLE型を整数(unsigned long)にキャストするDLLを作成し、
HANDLE型が使用できない処理系から作成したDLLを通して目的のAPIを使用していました。

Windows7の32/64ビット環境では動作しているのですが、
Windows10の64ビットでは動作しません。
(Windows10/32ビットでは動作しています。)
2017/05/29(月) 11:13:27.19ID:TgEUVyWp0
戻り値を捨てるときはvoidにキャストしてるな
332デフォルトの名無しさん (ワッチョイ 2b75-sfkZ)
垢版 |
2017/05/29(月) 11:27:00.44ID:JtPPrjAE0
>>330
https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
HANDLEはPVOID
PVOIDはvoid*
つまり64bitのWindowsアプリケーション(LLP64環境)では64bit 同環境でunsigned longは32bit
つまりWindows7ではたまたま動いてるだけ。
333デフォルトの名無しさん (アウアウアー Sa7f-+G4n)
垢版 |
2017/05/29(月) 13:16:39.33ID:6ZDN/iGxa
>>330
Windows SDKの話をここでするなというやつがいるから、Windows SDKスレを探したらないんだなw
2017/05/29(月) 13:22:41.71ID:BOg3kn5n0
win32apiスレがあるじゃん
2017/05/29(月) 19:29:40.57ID:5HzXgXAz0
おいQZ下手に知識をひけらかそうとするなよ
無知がバレるぞ
2017/05/29(月) 19:51:26.34ID:EYaE0z6gd
マイケルソフトは標準化を破壊し、混乱をもたらす者。
2017/05/29(月) 19:57:52.02ID:EYaE0z6gd
パソコンの中に主権があるとしたら、我々の主権はマイケルソフトに蹂躙され続けている。
2017/05/29(月) 20:21:44.72ID:mrHKi14mM
なら使うのやめたら?
2017/05/29(月) 20:38:58.27ID:5HzXgXAz0
QZ怒りのLinux
340デフォルトの名無しさん (ワッチョイ 1f7b-OpMt)
垢版 |
2017/05/29(月) 20:55:21.03ID:zjgINM2w0
ここの過半数が訳語「返却値」を知らないわけか
マジでアホの集まりだな
341デフォルトの名無しさん (ワッチョイ 0f9c-kS8n)
垢版 |
2017/05/29(月) 21:35:32.81ID:j0cmL5ae0


2017/05/29(月) 21:45:39.05ID:EYaE0z6gd
ぶらぶらうざい、ブラウザ
2017/05/29(月) 21:49:57.04ID:ZHccw+L90
返却値知ってる俺カッケー


ってか w
2017/05/29(月) 22:27:06.81ID:6SN6+L3k0
少なくとも返り血というなら返却血だな
345デフォルトの名無しさん (ワッチョイ ab6e-cSoe)
垢版 |
2017/05/29(月) 22:54:17.27ID:hRA+Cftk0
returnは、他動詞だから、返す値だろ。返された値
シェーン、カムバック!
346330 (ワッチョイ db8d-InMg)
垢版 |
2017/05/30(火) 09:45:25.55ID:Kzko1WIk0
>>332

ありがとうございました。
「たまたま動いているだけ」が妙に納得しました。
2017/05/30(火) 20:02:22.03ID:C+7xWm9c0
このスレきも!って思ったらQZが自演しまくてるのか
348デフォルトの名無しさん (ワッチョイ 4b10-OpMt)
垢版 |
2017/05/31(水) 05:42:53.04ID:89AX9+Wb0
>>343
知らないおまえは最悪に格好悪い
これだけは間違いない
2017/05/31(水) 06:38:16.67ID:/NpZlBRIM
>>348
だれも「知らない」なんて言ってないんだが...
思い込みでバグ作り込むタイプやね w
350デフォルトの名無しさん (ワッチョイ 2b75-sfkZ)
垢版 |
2017/05/31(水) 06:57:32.87ID:g7bIgogk0
俺は知らんなぁ。
知ってると何か良いことあんの?
2017/05/31(水) 09:15:02.98ID:jPWlNl/x0
異なる翻訳単位に存在するtypedefで定義された型を参照するには
どうやればできますか?
2017/05/31(水) 11:27:45.76ID:tgfSYh/d0
typedef した部分を分離独立して、必要に応じて #include とかは普通にアリだけど。
この場合、#include した時点で同じ翻訳単位になってしまいそうだし。

A.できません(たぶん
2017/05/31(水) 12:08:17.16ID:BjVTieBy0
参照する必要が出た時点で共有しなきゃならんでしょ
適当なヘッダで宣言して必要に応じてincludeだな
逆に、その型を公開できない理由があるの?
2017/05/31(水) 12:21:23.09ID:9Uam09Ht0
何でインクルードすると同じ翻訳単位になるの?
2017/05/31(水) 12:33:24.61ID:cF3ZhhKb0
プリプロセス終了後の1ソースの範囲が翻訳単位だし
ソース中の #include によって展開されたものは同じ単位内だべさ
356デフォルトの名無しさん (ワッチョイ 8ade-01DN)
垢版 |
2017/06/01(木) 22:22:53.65ID:iiFY2Tb80
>>349
いや、おまえは知らない
そうでなければ343のような発言には至りえない
357デフォルトの名無しさん (ワッチョイ 8ade-01DN)
垢版 |
2017/06/01(木) 22:23:46.02ID:iiFY2Tb80
知ってても、このやりとりで知っただけのくせに
それ以上に訳知り顔すんじゃねえぞ
2017/06/01(木) 22:50:17.11ID:JcXv0anO0
>>356 > いや、おまえは知らない
って大見得切ったのに
>>357 > 知ってても
っていきなりトーンダウンするチキン乙 w
2017/06/01(木) 23:19:34.58ID:Dt+iD1aba
相変わらずどうでもいい言い争いをしてるな
360デフォルトの名無しさん (ワッチョイ 2575-YsH8)
垢版 |
2017/06/01(木) 23:36:18.95ID:Gz+/nkqG0
知ってたからといって、どうというものでもないものをよくここまで引っ張れるよね。
361デフォルトの名無しさん (ワッチョイ a6f0-01DN)
垢版 |
2017/06/02(金) 05:53:52.88ID:3GNvn+Lb0
効いてる効いてるw
俺、別に言ってること変えてねえぜ
まあ、そういうことにしなきゃ立場ねえのはわかるが
2017/06/02(金) 07:14:07.93ID:ROv7EaIxM
自分だけが知ってるスッゴい知識
をバカにされた老害発狂 w
2017/06/02(金) 11:34:32.62ID:pA0XtcoN0
同じファイルをインクルードしたところで
.cが違えば翻訳単位も違うだろ
2017/06/02(金) 12:19:23.31ID:V1/OI3VR0
異なる翻訳単位に存在するtypedefで定義された型を参照するには
自分の翻訳単位に同じ定義を持ち込むしかない
365デフォルトの名無しさん (ワッチョイ eac8-CLsp)
垢版 |
2017/06/02(金) 13:28:22.87ID:fUQLBdQr0
関数側から見て返す値がリターン(Return)値
関数を呼び出した側が受け取る値をリザルト(Result)値

私はこの二つでしか理解しておりませぬ
366デフォルトの名無しさん (ワッチョイ 2d51-01DN)
垢版 |
2017/06/02(金) 19:53:55.49ID:4eAI2C8m0
はあ?
無知をバカにされて発狂してんのはおまえだろw
2017/06/02(金) 21:04:53.84ID:kW0O8rcbM
>>365
Pascal だと関数側が result だけどね。
Cしか知らないなら仕方ないけど。
368デフォルトの名無しさん (ワッチョイ 2d51-01DN)
垢版 |
2017/06/03(土) 19:01:35.82ID:d/bMfhNd0
「自分だけが知ってる」すっごい知識だっておバンバン

自分の国の公文書に書いてあることなんだが
あ、自分の国じゃなかったか
なるほどそのようで
369デフォルトの名無しさん (ワッチョイ 2575-YsH8)
垢版 |
2017/06/03(土) 20:31:14.37ID:ez6eSYjJ0
>>368
公文書に書いてあるんだ。それって何の公文書?
2017/06/03(土) 23:15:17.12ID:0mDMXJvk0
>>369
JIS X3010:2003のことだろ
C99のISO規格(ISO/IEC 9899:1999)を翻訳して日本工業規格(JIS)に標準化したもの
371デフォルトの名無しさん (ワッチョイ 2575-YsH8)
垢版 |
2017/06/03(土) 23:29:36.08ID:ez6eSYjJ0
>>370
JIS規格票は公文書だったのか。それは知らなかった。
2017/06/03(土) 23:39:27.80ID:0mDMXJvk0
>>371
一応JISは法令に基づいて制定される日本の標準規格だし公文書と言ってもいいんじゃないの?
https://ja.wikipedia.org/wiki/%E5%B7%A5%E6%A5%AD%E6%A8%99%E6%BA%96%E5%8C%96%E6%B3%95
2017/06/04(日) 00:25:08.91ID:X8vsjvHi0
私文書じゃないだろ。
374デフォルトの名無しさん (ワッチョイ 456e-1YR0)
垢版 |
2017/06/04(日) 02:48:19.44ID:0v3tAx3a0
公文書なら無料にするべきだ
2017/06/04(日) 08:52:49.42ID:aIMLeetf0
複写に費用や手数料取られるのは当たり前だろ。
図書館で借りれば無料なんだし。
376デフォルトの名無しさん (ワッチョイ 6a37-1CPh)
垢版 |
2017/06/04(日) 11:22:12.97ID:QtczELPi0
公文書の無料と言うのは、国民全員の負担になるということなので、実はあまり良くない。
ほとんどの人が損をするという意味で、携帯の新規機種変無料とかと似たような問題。
2017/06/04(日) 21:48:59.17ID:uAW2AjVo0
0円携帯禁止したせいでケータイメーカ全滅したけどな。
エコポイントのせいかも知れんが。
2017/06/04(日) 22:00:00.35ID:xWX/pEI60
>>377
ツートップなんてやったもんだから、
対象外のメーカー製造取りやめたしな
2017/06/04(日) 22:17:29.69ID:EH/r73Ar0
>>375
コピーしてるの?
380デフォルトの名無しさん (ワッチョイ 6a37-1CPh)
垢版 |
2017/06/05(月) 00:56:05.33ID:9KIhNzrG0
>>377
それは0円なんて言う訳のわからんガラパゴス作戦に乗っからんと売れないようなゴミを作ってたからでしょ。
2017/06/05(月) 01:20:59.03ID:/8LBEV6v0
おいQZ自演しないでゴミコードを晒せよ
2017/06/05(月) 04:45:59.05ID:/8LBEV6v0
QZって無知を指摘されるとすぐ自演でかき消すよな
お前もう気持ち悪いだけだから消えろよム板から
2017/06/05(月) 04:49:01.59ID:/8LBEV6v0
おいQZゴミ煽りはもうやめろ
おまえはさっさとウンコードマニア殿堂入り級のゴミコードを貼ってろよ
2017/06/05(月) 04:50:02.91ID:/8LBEV6v0
過去にすがるだけのゴミ無職がご高説垂れるなよ無職が
2017/06/05(月) 16:44:47.93ID:bGR3O5j30
おまえのゴミコードじゃ何も語れないから
2017/06/05(月) 16:51:56.25ID:9PUOi1A/0
>>367
resultはボーランドが始めた方言だろ
387デフォルトの名無しさん (ワッチョイ 25aa-YsH8)
垢版 |
2017/06/05(月) 23:06:28.96ID:s9HDUBeH0
お前ら書いたプログラムをaddressSantizerやThreadSantizer、valgrindとかでチェックしながらテスト実行してる?
2017/06/05(月) 23:45:19.00ID:agBnyIwY0
Cで書かれたプログラムがどのように機械語に翻訳され実行されるのかについて書いてある資料ってありませんか?
C言語の書き方的なWebサイトや本は腐るほどありますがCのコースコードがコンパイルされリンクされ実行可能なバイナリが出来上がり
そのバイナリ(必要なら関連する動的リンクライブラリも)がメモリにロードされ実行される過程をある程度詳しく解説している物はまず見かけません
この過程で良く使用されるファイルフォーマットの情報も欲しいです
当然実行環境や開発環境によって差異はあると思いますが基本的なところは変わらないはずですよね?
今のところターゲットはWindowsのPEと組み込み向けのバイナリファイル(メモリイメージ)で、開発環境はひとまずVC++とGNU系を考えています

最近C/C++を本格的に使わざるを得なくなり調べているのですがこのへんの情報が得られずに悩んでいます

スレ違いだったらすみません
2017/06/06(火) 01:06:07.57ID:uiQBRp2m0
コンパイラの実装がどうなってるかを知りたいのか、
それとも機械語がどう実行されているのかを知りたいのか

後者ならアセンブリ言語を勉強すればいい気がする
参考書も探せばありそう
2017/06/06(火) 01:20:44.75ID:aIR29BXyM
>>388
本読むのが一番
おすすめは、コンピュータの構成と設計、パターソン他著
2017/06/06(火) 01:48:28.43ID:MUdbHmDP0
x86ならアセンブルソース出すオプションあるだろ
2017/06/06(火) 01:50:16.07ID:MUdbHmDP0
GNUだとx64もあるのかな?
まだやったことないや
2017/06/06(火) 03:59:12.40ID:hzSn699I0
QZはうざいから黙ってて
2017/06/06(火) 07:16:30.22ID:rRaTvlwzM
>>388
> 最近C/C++を本格的に使わざるを得なくなり調べているのですがこのへんの情報が得られずに悩んでいます
使うだけならそんな情報は要らんだろ
ネタでないならもっとピンポイントで聞かないと本読めと言うような回答しか返しようがない
2017/06/06(火) 07:48:32.18ID:Q6prYP2u0
LLVM 言語マニュアル(Language Reference Manual) 日本語訳

http://www.h3.dion.ne.jp/~mu-ra/llvm/LangRefJ.html
2017/06/06(火) 10:44:02.61ID:euIMzFdw0
>>388
デバッガーの使い方かアセンブリ言語を調べたらいいんじゃない?
「C言語をアセンブリ言語に翻訳してどうやってコンピュータを動かすか見てみよう」
っていう企画はネットや紙面でたまに見かける

gccならオプションでアセンブリ言語を出力できたはず
2017/06/06(火) 12:13:04.78ID:HfSY3J2pa
>>388
「ハロー"Hello, World"」っていう本が面白い
linuxでの話だがシステムコール呼び出しやmain関数の前に行われる処理、共有ライブラリの仕組み、elfフォーマットなどCプログラミングの裏にあるものについて詳しく書かれてる

まあ他の人も言ってるように普通にプログラミングするのにそんな情報は当分いらないけどな
2017/06/06(火) 20:27:56.37ID:MUdbHmDP0
デバッグやリバーs
2017/06/06(火) 20:33:35.53ID:5Y/t1Obrr
レスありがとうございます

C/C++コンパイラに与える物に関する情報は沢山あるのですが、その先で何をやっているかについて解説されている資料は一気に減る気がします
リンカについて解説されている資料もあまり見ませんし、ほとんどはリンカはコンパイラが勝手に呼び出す物とされているように思います
今のところやりたいのはAPIフックやラッパーDLLなどを利用した既成アプリケーションへの介入と、組み込み系のアセンブラとCを混合した開発です
後者の場合は純正の開発ツールを使う場合に限りそれなりの資料がありますがgccなどで開発する場合の情報は多くない上に錯綜していたりします

>>389
昔組み込み系のソフトウェアをアセンブラで書いたことがあるのでアセンブラは多少読めますがCとの繋がりが見えてきません
アセンブラは違っていなければ何でもOKな所があるというか、特に生で動かす場合はレジスタの使い方からコードの配置やジャンプの方法まで
好きに決められますけど、Cだとその辺は全てブラックボックスですよね

>>391,396
アセンブルリストを出せるのは知っていますが出てきたコードはそのまま実行出来る物ではないですよね?たとえば別のソースコードの関数を
呼ぶようなケースでは呼び出し元が呼び出し先のアドレスを把握できていないと動かないはずです

>>397
おぉ、探していた物一つはまさにそんな感じの情報です。Windows向けのがあれば理想的でしたがその本を探してみます
2017/06/06(火) 20:38:47.84ID:xjZg+i4X0
Advanced windows かの?
2017/06/06(火) 21:05:10.62ID:i8rk4NdIM
知りたいことは言語じゃなくてOSの仕様なのに
言語の延長だと思い込んでるから情報にたどり着けないんだろう
2017/06/06(火) 21:18:01.76ID:vqgdCAO10
ハロー“Hello, World” OSと標準ライブラリのシゴトとしくみ
が挙げられているが、その著者の坂井さん関連で本屋で実際手に取って
みて好きなのを選んだらどうだろうか。

12ステップで作る組込みOS自作入門
http://www.amazon.co.jp/dp/4877832394/

リンカ・ローダ実践開発テクニック
http://www.amazon.co.jp/dp/4789838072/

熱血! アセンブラ入門
http://www.amazon.co.jp/dp/479804180/
2017/06/06(火) 21:33:57.74ID:6cAGm0S8M
>>399
> ほとんどはリンカはコンパイラが勝手に呼び出す物とされているように思います
コンパイラとコンパイラドライバの区別もついてないのに背伸びしすぎ w
そもそもgccでもアセンブラを混在させたきゃインラインアセンブラで充分だしドキュメントも揃ってる
2017/06/06(火) 23:03:45.40ID:1lY7TIjFa
https://www.amazon.co.jp/Linkers-Loaders-JohnR-Levine/dp/4274064379
405デフォルトの名無しさん (ワッチョイ 2997-8pkt)
垢版 |
2017/06/06(火) 23:37:37.16ID:Qy4U0ic00
>>403
言ってることが嘘くさいよな。コンパイル、リンクの流れを知らないのは。
406デフォルトの名無しさん (ワッチョイ f9cf-q7dZ)
垢版 |
2017/06/07(水) 01:45:32.01ID:MW2os+Jx0
ヒカル TV出演「年間5億は稼ぐ勢いですね」
https://www.youtube.com/watch?v=G7qL6ftpets
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
https://www.youtube.com/watch?v=asF2wQ2xhjY&;t=61s
ユーチューバーの儲けのカラクリを徹底検証!
https://www.youtube.com/watch?v=FUSb4erJSXE&;t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
https://www.youtube.com/watch?v=Y7DAQ0RKilM&;t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます
https://www.youtube.com/watch?v=E4q-vaQh2EQ&;t=118s
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法
https://www.youtube.com/watch?v=Fr0WXXZRMSQ

最高月収5000万円だとさ。年収じゃなくて「月収」な
おまえらもyoutubeに動画投稿したほうがいいぞ。副業にぴったしだ
やろうと思えばスマホがあればできるぞ
最低2年はやらないとここまではいかないだろうけど才能とアイデアと
企画力と継続力があればが大儲けできる可能性がなくもない
まだまだ他の職種に比べれば競争率は低いからオススメ
顔出したくないならラファエルみたいに仮面つければいい
407デフォルトの名無しさん (ワッチョイ f9cf-q7dZ)
垢版 |
2017/06/07(水) 01:46:59.80ID:MW2os+Jx0
ヒカル TV出演「年間5億は稼ぐ勢いですね」
https://www.youtube.com/watch?v=G7qL6ftpets
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
https://www.youtube.com/watch?v=asF2wQ2xhjY&;t=61s
ユーチューバーの儲けのカラクリを徹底検証!
https://www.youtube.com/watch?v=FUSb4erJSXE&;t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
https://www.youtube.com/watch?v=Y7DAQ0RKilM&;t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます
https://www.youtube.com/watch?v=E4q-vaQh2EQ&;t=118s
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法
https://www.youtube.com/watch?v=Fr0WXXZRMSQ

最高月収5000万円だとさ。年収じゃなくて「月収」な
おまえらもyoutubeに動画投稿したほうがいいぞ。副業にぴったしだ
やろうと思えばスマホがあればできるぞ
最低2年はやらないとここまではいかないだろうけど才能とアイデアと
企画力と継続力があればが大儲けできる可能性がなくもない
まだまだ他の職種に比べれば競争率は低いからオススメ
顔出したくないならラファエルみたいに仮面つければいい
ハロウィン用でいろいろな仮装マスク売ってるからオヌヌメ
2017/06/07(水) 07:27:30.60ID:ahDmd+gPr
一番使用経験があるのがインタプリタで、次がアセンブラです。この二つは一から実用になる物を作ったことがありますが
コンパイラは既存のコードを改造するのがせいぜいで何かを一から作ったことがありません
C/C++はVC++にプロジェクトを読み込んでビルドしたり、configure→makeやgccのコマンドを叩くくらいしかできないです

>>400,402,404
全部買える余裕はないのでまずは本屋で眺めてみます

>>403
組み込み系だとアセンブラからCで書かれたコードを呼び出す例も普通にあるようです
リセットベクタから最初に実行されるコードはアセンブラで書くのが一般的みたいですし

>>401
あ、なるほど。実行する部分はOSの仕事ですね
2017/06/07(水) 11:32:37.62ID:F8quZWoL0
>一から実用になる物を作ったことがあり
を指してるのは
(自作した)インタプリタと (自作した)アセンブラ じゃなく
既存のインタプリタと既存のアセンブラによって得られた生成物
だよな?
2017/06/07(水) 11:49:04.14ID:SSzPpmQQ0
情報処理資格の組み込み・エンベッドのテキストに書いてある

宇宙産業・医療機器・産業機械などは、組み込みの高資格を持っていないと無理。
この領域では、すぐに人が死ぬから、MISRA-C に準拠していないと、使えない。
国際的に、MISRA-C 無しのCは、製品には使えない

各人が、個別のアセンブラで学ぶことは、
各人が個別の言語で話すことと同じになり、分断される

だから日本の情報処理資格では、CASL2 という抽象的なアセンブラで、議論する。
それをまねたのが、LLVM。
だから外国が、LLVMに飛びついた

>>395
を参照
411デフォルトの名無しさん (アウーイモ MMa1-8pkt)
垢版 |
2017/06/07(水) 12:42:49.70ID:AU15h8rIM
>>408
Cで作られたかどうかは関係ないだろw
2017/06/07(水) 19:23:59.78ID:vdjoMcEt0
>>408
大概の言語ならコンパイラもあるんじゃないの?py2cとかperl2cなんかもあるし。
2017/06/07(水) 20:09:08.11ID:sUBS3aGw0
QZ怒りの流れを無視した無知晒しレス
414デフォルトの名無しさん (ワッチョイ eaea-q7dZ)
垢版 |
2017/06/07(水) 23:18:34.34ID:Mt8hQ3L40
鶴亀算のプログラムが違うと言われたのですが、どこが違うか教えてくださいm(_ _)m
#include <stdio.h>
int main(void){
int a;//足の合計
int b;//頭の合計
int c;//鶴1羽の足の数
int d;//亀1匹の足の数
int x,y;
scanf("%d %d %d %d",&a,&b,&c,&d);
//全部が鶴だとする
x = c * b;
//実際の足数の合計-全部が鶴の場合の足数
x = a-x;
//亀の数
x = x / 2;
//鶴の数
y = b - x;

printf("%d %d\n",x,y);
return 0;
}
そもそも鶴亀算の計算方法がネットで調べてもよく分かりませんでした
2017/06/07(水) 23:36:19.43ID:SnVv1syS0
それだとd使ってないから正しいはずないよね

もはやC言語関係ないが
//亀の数
x=x/(d-c);

てか連立一次方程式解けないってガチな小学生?
2017/06/08(木) 00:38:33.35ID:g5GXU2ST0
またQZが自演工作を始めたよ
2017/06/08(木) 06:54:57.70ID:XoSqWmPA0
Hello!!
418デフォルトの名無しさん (ワッチョイ 0bcb-Fz1p)
垢版 |
2017/06/08(木) 17:37:09.59ID:JhfPMuMm0
https://ideone.com/iVXO9e
上のコードのどこが間違っているのか分かりません
動くようにするにはどのようにしたらよろしいですか?
2017/06/08(木) 17:55:38.25ID:B37qUMHpd
>>418
引数の個数
2017/06/08(木) 17:58:25.99ID:B37qUMHpd
https://ideone.com/OyxrXn
2017/06/08(木) 19:15:57.89ID:g5GXU2ST0
おいQZゴミコード投下をこのスレでもやるのかよ
また臭くなったなこのスレ
2017/06/08(木) 19:22:01.48ID:JhfPMuMm0
>>419
マクロの使い方じゃなくて定義の方を改変してほしいです
423デフォルトの名無しさん (ワッチョイ 9d97-Eb90)
垢版 |
2017/06/08(木) 19:40:15.68ID:HjFtHmDJ0
>>422
結局、何がしたいのか?
2017/06/08(木) 19:40:15.97ID:vowgkzVG0
https://ideone.com/rXDfUM
f3の仕様知らんから適当だけど、こんな感じか?
2017/06/09(金) 04:09:12.83ID:tFl0611n0
>>424
ありがとうございます
それを求めてました
2017/06/09(金) 11:40:03.51ID:i7mtMiOg0
おいQZ
宿題スレと同じようなレスするなよゴミ
2017/06/09(金) 16:20:13.99ID:vSS0Y+fX0
マクロ地獄w
2017/06/09(金) 20:25:14.30ID:CAB9wzmf0
>>426
Hello World!
2017/06/09(金) 23:48:48.50ID:IBAe8Zr/r
まだ一冊も買っていませんが>>397,402両氏に感謝
坂井氏の記事は判りやすくて良いですね。別件でググっていたらITmedia系列で連載しているのを発見しまして
今読んでいるところですけど大変為になります
ttp://www.itmedia.co.jp/author/174171/
2017/06/10(土) 01:59:22.10ID:zs39aG6C0
QZ怒りの感謝芸
2017/06/10(土) 08:08:29.71ID:pb8IN1oh0
>>430
巣から出てくるな
2017/06/10(土) 19:50:14.54ID:SZlbpMsi0
なんか禁止文字があるようなので画像で質問します

http://i.imgur.com/ZotbBm5.jpg
2017/06/10(土) 20:03:35.22ID:WN3QcUIY0
>>432
同一IPアドレスで複数のホストを割り当てているのだろう
だから、IPアドレスで要求しても答えられないことになる

https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88
2017/06/10(土) 20:24:27.55ID:WN3QcUIY0
>>432
バーチャルホストへの対応は http 1.1からなので、リクエストヘッダーを作成し
その中にどのホストへの要求かをサーバーに伝える必要があります。
このページを参考にしてみて。

http://tomosoft.jp/design/?p=3636

サンプルソースはローカルネットワークでやっているので、
変数 httphost にはIPアドレスが指定していますが、
ここに求めるホスト名を指定すれば良いはずです。
2017/06/10(土) 20:26:42.82ID:ya4F889pd
ありがとうございます
ちょっと出てしまったので家に戻ったら
もらった情報を元に解決頑張ってみます
2017/06/10(土) 20:45:37.76ID:gQtHq0zi0
ありがとうございますwww
QZの自演感謝芸は本当にわかりやすい
2017/06/10(土) 23:40:32.38ID:IgPZpOJ50
誰が誰を煽ってるのかは分かりませんが
リクエストヘッダの記述をHTTP1.1にして
1.1の必須ヘッダのHostを設定して試してみたら
無事動作しました
ありがとうございました
2017/06/11(日) 01:17:53.70ID:3YYJxHfi0
おいQZ自演範囲拡大かよ気持ち悪い
2017/06/11(日) 09:55:13.67ID:IXRoGBtM0
>>438
巣から出てくるな
2017/06/11(日) 11:01:28.44ID:jDqQVEke0
C99の識別子について質問です。
構造体のメンバ命を「アンダーバー + 小文字アルファベット」で始まるものにするのは
仕様上、予約語と名前衝突しないことになっていますか?

「アンダーバー + 大文字アルファベット」で始まる識別子は予約されてるという記事がいくつかありましたが、小文字の場合に言及している情報は見つけられませんでした。
2017/06/11(日) 11:12:15.08ID:8e5gqfxU0
>グローバル スコープを持ち、_ で始まる名前
>_ で始まり、その次が大文字の名前
>__ で始まる名前
この3つだけなんで、アンダースコア+小文字かつメンバ名なら大丈夫
まぁ個人的には2連アンダースコアと先頭アンダースコアは避けるけど
2017/06/11(日) 11:58:31.34ID:jDqQVEke0
>>441
素早い回答有難うございます。
安心しました。

でも、ご指摘の通り使用は最小限にとどめたいと思います。
ありがとうございました
2017/06/11(日) 15:12:12.69ID:3YYJxHfi0
QZいかりの焦り
2017/06/12(月) 01:04:21.12ID:yvrc7Cbj0
QZはム板から消えろ
2017/06/12(月) 01:07:04.82ID:yvrc7Cbj0
でも、ご指摘の通り使用は最小限にとどめたいと思います。www
QZ落第のときのセリフがこれ
2017/06/12(月) 11:24:14.92ID:tv4YfZMV0
ワッチョイとD9zBでNGすりゃいいのか?
447デフォルトの名無しさん (ワッチョイ 85aa-vEzb)
垢版 |
2017/06/12(月) 11:46:58.72ID:gcWGi0lu0
QZをNGにすりゃいいんじゃない?
2017/06/12(月) 18:10:03.52ID:yvrc7Cbj0
QZ怒りのNG推奨
2017/06/12(月) 18:11:22.02ID:yvrc7Cbj0
おいQZ自演オナニーに飽き足らず
他スレで無知披露かよ
お前のような永久無職が議論できるような場所じゃないから
2017/06/12(月) 18:54:22.58ID:3CfNjtZc0
>>449
おいそれどこだよ?
451デフォルトの名無しさん (ワッチョイ e511-yTT2)
垢版 |
2017/06/12(月) 19:34:00.50ID:5L3xq22d0
%%%MC+7,8%%%

}

000-"M","LES","TUV=0.13325&/0\7&%&",

001-"23","1","0","2","7.14",[\b%7/1444*%812%2.3%7&6111\end\\]{%3%12%\br
2017/06/13(火) 17:20:53.30ID:kTA8yB7D0
よくいろいろなホームページにinlineは付けなくてもコンパイラーが最適化で自動で決めるので
付けなくていいと見かけるけれど、重要なのはinlineを書くかどうかじゃなくて
定義をヘッダーファイルにかいてinlineに出来るかソースファイルに書いて
出来ないようにするのかってことでしょ。
inlineが出来るようにするのか出来ないようにするのかの話を
inlineを書くか書かないかの話にすり替えている汚いやり方だと思いませんか?
2017/06/13(火) 18:10:46.25ID:TlpR08p20
>>452
翻訳単位という括りで見たらヘッダーファイルとかの区別は無意味だから
あなたの意見には同意しかねる
2017/06/13(火) 19:22:36.04ID:7vUqF+ijM
register 変数だって、本当にレジスタに割り当ててるか怪しいもんだ。
2017/06/13(火) 19:32:28.37ID:fqqPhx3LH
当たり前の話であって怪しくもなんともないんだが
456デフォルトの名無しさん (スププ Sd43-BT4T)
垢版 |
2017/06/13(火) 19:45:37.31ID:+kV5cJp9d
Cって関数オブジェクト的な動作ってできるっけ?
2017/06/13(火) 20:05:20.23ID:co8+PZUE0
第一級関数
https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0

>CやC++、Pascalなどのプログラミング言語は関数ポインタをサポートしており、データ構造に含めたり他の関数に引数として渡したりすることができる。
>しかし、それらの関数は一般にリフレクションなしではプログラムの実行時に動的に生成することができないため、第一級関数をサポートしているとは見なされていない。
2017/06/13(火) 20:37:39.64ID:siDT5/O8M
>>454
今時ヒントにもしてないだろ
459デフォルトの名無しさん (ワンミングク MMa3-vEzb)
垢版 |
2017/06/13(火) 22:14:31.00ID:fqqtkiftM
registerとか、メジャーなコンパイラで同じオプティマイザーを使用するC++では無くなっちゃったしな。
460デフォルトの名無しさん (スププ Sd43-BT4T)
垢版 |
2017/06/13(火) 22:26:08.47ID:+kV5cJp9d
>>457
ないってことか。ありがとうございます
2017/06/13(火) 23:50:32.05ID:Vyd7kh0w0
-O3つければ関係ナッシング
-O2でもいいかも
462デフォルトの名無しさん (ワッチョイ 9511-LnFi)
垢版 |
2017/06/14(水) 02:09:06.53ID:cctIdNvV0
http://i.imgur.com/b3A3YWl.jpg
この(お)がよく分からん
最初の段階でi=j=0だからswapさせても意味なくね?
だったら(お)でiとjずらすのか?
とも思ったが反応なし
教えてくれると嬉しい
2017/06/14(水) 02:17:07.73ID:cctIdNvV0
自己解決した
2017/06/14(水) 10:41:57.78ID:xDw396a4d
出力変換指定子について教えてください

printf("16進のffを10進に変換すると%dです\n", 0xff);

実行結果→16進のffを10進に変換すると15です

%dなどの出力変換指定子というのは、数値を文字列に変換して出力している、という理解でよろしいのでしょうか?
それとも数値を数値のまま、文字列の間に挟み込んで出力してくれている、という理解の方が合っていますでしょうか?
2017/06/14(水) 11:28:08.77ID:cB3KRwiX0
前者
2017/06/14(水) 11:36:10.60ID:H04nBmO80
http://linuxjm.osdn.jp/html/LDP_man-pages/man3/printf.3.html
%dは文字列に変換する
15じゃなく255になるかと
数値のままってのがよくわからんけど
printf( "%c", 0x41);
ならほとんどの処理系で大文字Aが表示される
%cでcharのビット数より上位のビットが
立っていた場合の挙動は知らん
2017/06/14(水) 11:37:07.78ID:H04nBmO80
失礼しますた
2017/06/14(水) 11:38:27.87ID:iafztWleH
>>464
前者。文字列にしないと文字として表示できない。
ちなみに15じゃないけどな
2017/06/14(水) 12:41:52.28ID:Xahf6/YZM
>>468
補足すると、0xffは引数にした場合 0xffffffff に拡張される
(32bit機の場合)
2017/06/14(水) 12:49:16.05ID:jUBU+j0AM
>>469
255 じゃなくて、4294967295 になるってこと?
変なの。
2017/06/14(水) 12:57:53.53ID:Xahf6/YZM
>>470
符合が付いているから255じゃない。で466のレスに繋がる(^_^)ノ
2017/06/14(水) 12:58:00.19ID:cB3KRwiX0
符号付で -1 とみなし、そこから符号を維持したまま拡張して引数に詰む
引数を引っ張り出して 符号付評価で値を文字化の結果 "-1 "
(char 型変数に 0xff を入れてて、それを printf に渡したケース)


ところでリテラルの 0xff が符号付か否かは何か規定あったっけ?
2017/06/14(水) 13:30:59.38ID:jUBU+j0AM
>>471
どこに符号が付いてるの?
(符合と符号は違うの?)
255 にしかならないけど。

>>472
char が符号付きかどうかは処理系依存なはず。
2017/06/14(水) 13:41:28.06ID:cB3KRwiX0
>>473
リテラル文字列中の文字が signed か unsigned か とは別だっけか?
あんまり出くわさないのでルーズになってるわ・・・
2017/06/14(水) 18:52:36.33ID:ROBFB8K40
0xffの型はintだよ
2017/06/14(水) 18:54:17.69ID:ROBFB8K40
int a = 255;
の時に、aが-1になったら不便でしょ?
2017/06/14(水) 18:56:15.18ID:ROBFB8K40
int a = (signed char)255;
の場合は-1になる
2017/06/14(水) 19:07:02.19ID:wXdIbuq80
比較演算子の左辺 右辺 でやらかしそうだ・・・
2017/06/14(水) 19:25:17.22ID:jUBU+j0AM
>>471
とりあえず >>469 を説明して!
2017/06/14(水) 19:56:00.75ID:7MR8m8vU0
>>464
本当に試したのか?
https://ideone.com/yMxt39

>>469
本当かね?int なんだけれども

>>472
リテラルは int なんじゃないかな?で int は別に符号拡張しない

>>479
>>469 は誤り
2017/06/14(水) 21:51:54.69ID:ROBFB8K40
リテラルが無条件でintなわけじゃない

intで表現出来る範囲はint
intを越えた場合には基本的には表現出来る最小の型になる
u, l, ul, ll, ullなどのサフィックスで明示的に変更も可能
サフィックスで作れない型はキャストして作る
2017/06/15(木) 03:30:56.19ID:foJhra+T0
数値リテラルはこの辺参照
www.bohyoh.com/CandCPP/FAQ/FAQ00074.html
あと、-100とかは数値リテラル100と単項-となることに注意
2017/06/15(木) 09:30:50.85ID:dX1k+/c2M
>>482
表が分かりにくすぎる。
2017/06/16(金) 13:48:41.24ID:6HI1EFfUd
>>465>>466>>467>>468>>480をはじめとした皆様
ご解答していただきありがとうございました(_ _)

お礼遅くなりすみませんでした
2017/06/16(金) 13:50:22.93ID:6HI1EFfUd
>>481
ulって書く人とluって書く人がいますがどちらが正しいのですか?
2017/06/16(金) 14:04:02.57ID:ZbWJ164Ea
どちらも正しいです
2017/06/16(金) 14:10:39.42ID:5SN0StmUd
>>486
ありがとうございます
2017/06/16(金) 16:33:55.37ID:lEbqssrF0
QZ潜伏スレッド
2017/06/16(金) 17:03:31.61ID:15uCJDWTM
switch(c)
case no:


これで、ケースnoに入った際に、もう一度switch文を繰り返す方法はありませんか?
goto文使わないと無理ですかね?
2017/06/16(金) 17:06:02.86ID:qjls6Rocd
>>489
do {
switch(c) {
case no: continue;
...
} while (0);
2017/06/16(金) 18:55:58.83ID:OzysmJdyM
>>490
ありがとうございます

case yes:
ほにゃらら
case no:
break;


yesの場合もbreakしたいのですが、noに流れさせてbreakするのと、yeaにbreakも書くのとどちらがいいんですかね?
2017/06/16(金) 19:13:28.04ID:exN5gWxV0
お好きなように

caseはbreakする事がほとんどなので、コードを読むときにbreakがあると勘違いしないように、ほにゃららの後とcase no:の後の両方にコメントを忘れずに
2017/06/16(金) 22:34:26.38ID:jRm/huKjd
変換仕様とデータ型との関係について質問させてください


int a;
scanf("%c", &a);
printf("%c\n", a );

考え方として、intと%cのどちらが優先されるでしょうか?
2017/06/16(金) 22:41:33.61ID:qjls6Rocd
>>493
> scanf("%c", &a);
これは入力された文字の文字コードをaに入れる。

> printf("%c\n", a );
これは、aが表す文字コードの文字を出力する。
2017/06/16(金) 23:09:12.38ID:exN5gWxV0
>>493
scanfの方は、&a を charへのポインタとして処理をする
結果は環境依存

printfも基本的には書式と引数が合っている必要があるが、intより小さい引数は全ていったんintに変換されてからコールされるので、この場合は問題なし
2017/06/16(金) 23:37:22.59ID:jRm/huKjd
>>494
>>495
すごい勉強になります
詳しい興味深く書いていただきありがとうございます
2017/06/17(土) 03:37:57.37ID:O3DVEcmT0
さっきからここQZ自演だらけだぞ
2017/06/17(土) 05:36:36.60ID:4Gyw35tF0
QZとは?
2017/06/17(土) 12:08:22.44ID:ir1eTLN60
>>498
http://peace.2ch.net/test/read.cgi/tech/1408962564/53
2017/06/17(土) 16:45:24.10ID:Znj/bctpd
>>497
私は自演とかはしてないです
スレの先輩方への感謝とともに申し添えます
2017/06/17(土) 19:52:46.57ID:O3DVEcmT0
QZ怒りの自画自賛ww
本当はマ気取りの無職無能のおっさん
誰にも相手されないから自演で賞賛してる
2017/06/17(土) 19:53:20.24ID:O3DVEcmT0
こういう自画自賛してるあたり
自演がバレバレ
2017/06/17(土) 20:07:29.95ID:mM98wL1Bd
ここに書き込む前にマニュアル見ろよ。
2017/06/17(土) 21:04:59.42ID:O3DVEcmT0
老害無職QZはきえろ
2017/06/20(火) 17:20:58.36ID:En99E4tcM
自作関数でファイルオープンする際に、ファイルが存在しなかったらその関数を強制終了したいのですが、どうすればいいんですか?
exit(0)を使うとプログラムごと強制終了されてしまいますよね?
2017/06/20(火) 17:24:57.70ID:En99E4tcM
exit(-1)でした
2017/06/20(火) 17:35:35.16ID:mOitPqgi0
自作関数の戻りの型を void にしてるならしかるべき場所で
return ;
て書くだけ
2017/06/20(火) 17:45:00.45ID:YsGmXvJhM
>>507
それでいいんですか?
void型の関数なんですが、エラーが発生した事を明示しなくていいんですかね?
2017/06/20(火) 17:59:48.83ID:RGtVeD1Gd
printf("エラーが発生したんだぜ、この野郎。やんのか?\n");
2017/06/20(火) 18:12:33.50ID:hyzgnXlk0
紙のメモ用紙に書き込むサブルーチン作って、そいつにやらせたらどうだろう
2017/06/20(火) 18:16:22.54ID:3WBJr6kg0
>>508
それでいいです
それで目的は達成出来ます
2017/06/20(火) 18:39:43.32ID:tAZ0INkH0
言語関係無いな
2017/06/20(火) 18:48:54.06ID:RHsT5Eol0
>>508
目的が変わっている
自作関数でファイルオープンする際に、ファイルが存在しなかったらその関数を強制終了したい
                    ↓↓↓↓↓↓↓↓↓↓
自作関数でファイルオープンする際に、ファイルが存在しなかったらその旨を通達して抜けたい


戻りの型を int にして 成功は 0 失敗はそれ以外のエラーコードにして戻る
ポインタでエラーコードを指す引数受けて、その指し先に値を渡す
(errorno 等のグローバル変数でエラーを伝える)

呼び出し元のほうでエラーの有無で分岐
514デフォルトの名無しさん (アウアウイー Saeb-yC+1)
垢版 |
2017/06/20(火) 22:46:25.81ID:bX2tlMgna
ちょっと直接C言語に関係ない話なのですが、

コマンドプロンプトから、標準入力からデータを受け取る必要のある
Cのプログラムを実行する際、「<」を使ってファイルから入力しています。

あるデータファイルのショートカットファイルから「<」を使って
データファイルのデータを入力するにはどうしたらいいでしょうか?
2017/06/21(水) 06:56:18.44ID:tmnPHhmOM
>>514
> ちょっと直接C言語に関係ない話なのですが、
ならよそに行けよ
2017/06/21(水) 11:47:59.41ID:x++JJuQ30
>>514
どこに誘導すればいいかわからんなw

filter(仮).exe < %1

ってバッチファイルじゃダメなのか?
2017/06/21(水) 12:03:23.32ID:P8lmP+eo0
ショートカットファイルということは windows の話かねぇ?

渡ってきてる .lnk ファイルの中身から本当のパス文字列を知って
さらにその指し先のファイルを標準入力に流す なんてことが
コンマンドラインシェルはやらんだろうな
2017/06/21(水) 14:51:27.68ID:mT0xXfH20
入力を受け取るコマンドがやればいい
2017/06/21(水) 22:27:31.29ID:7+kf0Fyw0
またQZがほざいてる
2017/06/22(木) 13:44:42.49ID:LmRn3xN/0
ショートカットファイルをリダイレクトしても
単に中身を標準入力として読み取るだけで、
解釈するわけじゃない
2017/06/22(木) 13:46:53.43ID:lDx6Yk3FH
初心者です
構造体の使い回しができないというのは、どういう意味ですか?
structがない場合です
2017/06/22(木) 14:03:59.21ID:l/KIobDzM
>>521
構造体の使い回しとは何のこと?
文脈がわからないと答えられない
2017/06/22(木) 15:01:01.41ID:nVwUJlKa0
>>521
構造体の使いまわしはできるよ
2017/06/22(木) 15:16:04.77ID:iuy16AyXM
struct のない構造体は難しいな。
自分で実装するのかな?
525デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 16:34:33.27ID:6ZKlzltP0
すいません初学者ですが質問です

#include<stdio.h>
double add(double i,double j){return i+j;}
double sub(double i,double j){return i-j;}
double mul(double i,double j){return i*j;}
double div(double i,double j)
{if(j!=0.0) return i/j; else return 0.0;}
int main(void){
double a=39.0,b=12.0;
double (*func)(double x,double y);
func=add;
printf("add:%f\n",(*func)(a,b));
func=sub;
printf("sub:%f\n",(*func)(a,b));
func=mul;
printf("mul:%f\n",(*func)(a,b));
func=div;
printf("div:%f\n",(*func)(a,b));
return 0;
}

8行目の(*fanc)の意味が解りません
例えばfunc=addで代入すると(double *add(double i,double j){return i+j;})(a,b)になるんですか?
(double add(double i,double j){return i+j;})(a,b)になってadd(double i,double j){return i+j;}の部分で
プロトタイプ宣言が呼び出されるからおkなんですか?そうなると(*fanc)の*の意味が解らなくなります。
ちょっと、頭が混乱してて訳の解らない文章になってるかもしれませんが上記プログラムで何故スムーズに行くのかがいまいちよく解りません
2017/06/22(木) 16:39:23.60ID:XYYNYBrF0
>>525
関数ポインタの普通の使い方やん。
それよりゼロで割った場合にゼロ帰すのは変だと思う。
527デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 16:40:28.01ID:6ZKlzltP0
もうちょっと言うと8行目の*がポインタ宣言として何でfuncにaddとかmulとか代入すると関数を参照できるのかよく解りません
*が無いとコンパイラからエラーを指摘されるんですが*がなくても関数のプロトタイプ宣言と同じ形になるのに関数が呼び出されないのが納得いきません
528デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 16:42:15.27ID:6ZKlzltP0
>>526
うーん、なんていうか普通だとしてもなんか納得できないって言うか理屈の順序がわからないというか
2017/06/22(木) 16:45:03.29ID:LDtj9GzU0
double (*func)(double,doube);
[double を 2つ受けて double を返す関数] の場所を覚えるための変数 が func
プロトタイプ宣言ではなく 長ったらしいけど変数宣言 int *func; と本質的に同じ
530デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 17:05:19.55ID:6ZKlzltP0
>>529
でもint *fancの場合だとfanc=&a見たいに&をつけてアドレスを入れるんじゃないですか?
この場合&が省略されてもいいのは何でですか?
代入もaddとかsubと短くなってますけど
いつadd=double add(double i,double j){return i+j;}になったんでしょうか?
理解力や理解度が低いのもあると思いますがいまいちよく解りません・・・
2017/06/22(木) 17:19:00.14ID:LDtj9GzU0
>>530
前半の疑問
関数へのポインタ変数 func に 関数を代入する際の記述に限り & を省略できる
という文法にしちゃった そしてそう記述するのが古くからの慣わし

関数宣言 double add(double i, double j);
関数の実装 double add(double i, double j) { return i+j; }
宣言した関数の呼び出し add(i,j);
宣言した関数のポインタを得る add (もしくは &add でも同じ)
532デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 17:46:27.25ID:6ZKlzltP0
>>531
> 関数へのポインタ変数 func に 関数を代入する際の記述に限り & を省略できる
> 宣言した関数のポインタを得る add (もしくは &add でも同じ)
凄く頭がすっきりしました。コンパイルで実行してみてもaddと%addどちらでも通りました。
printfの(*fanc)も&addの実態を参照してるわけですね。
ありがとうございました
2017/06/22(木) 17:46:30.59ID:dMWz8j2D0
>>530
8行目 double (*func)(double x,double y); は変数funcの宣言
型は double(*)(double,double) の関数ポインタ
変数funcに各関数のアドレスを代入して呼び出してる
代入される関数には&を付けても付けなくても動作は同じ
534デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 17:47:38.20ID:6ZKlzltP0
>>533
ありがとうございます!ここ数日悩んでたんですがすっきりしました。
2017/06/22(木) 18:07:18.42ID:dMWz8j2D0
>>534
呼び出すときのデリファレンスはいらないよ
これでいい
printf("add:%f¥n", func(a,b));
536デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 18:33:38.45ID:6ZKlzltP0
>>535
それは
1。ポインタ側から見たら*fancになってfancの実体をみている
2.fanc=addと代入されているんだからfancと書かれていてもaddという変数(代入済み)に読み替えて実体を見ている
という意味で同じだという捉え方で大丈夫でしょうか?
2017/06/22(木) 18:39:12.10ID:9RPI8PPS0
関数へのポインタを得るのに & を省略できるのと同じように

ポインタの指し先の関数を呼び出すのに
(*func)(引数) と書いても func(引数) と書いても同じ という文法にしちゃった


Cは短く書けるならそっちを使う って歴史なので func(引数) って書くことが多い
538デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/22(木) 18:42:56.92ID:6ZKlzltP0
>>537
ほへー
勉強になります
ありがとうございます
そういうところがみんながポインタが難しいというゆえんなのかもですね
2017/06/22(木) 18:43:53.42ID:Ep4mqRnU0
>>525
divの中身が気にくわない
2017/06/22(木) 19:20:58.14ID:n4zvfmL3M
>>531
> 関数へのポインタ変数 func に 関数を代入する際の記述に限り & を省略できる
しれっと嘘書くなよ
代入関係なく関数名だけ(後ろにカッコをつけない)なら関数へのポインタとして扱う
比較とかでも使える
2017/06/22(木) 19:44:37.36ID:9RPI8PPS0
あ ごめんなさい ごめんなさい ごめんなさい
2017/06/22(木) 20:51:10.41ID:vBYXjCtX0
Hi !
2017/06/22(木) 20:53:54.63ID:9RPI8PPS0
bye
2017/06/22(木) 21:42:29.54ID:xapmI+EN0
exit(1)
2017/06/23(金) 00:26:19.17ID:Txr7HE8G0
>>539
俺も最初にそう思った。j != 0.0 て
2017/06/23(金) 09:04:15.74ID:pzaENb+m0
浮動小数点の四則演算で例外が起きないようにするには、どこを注意したらいいんだろう
2017/06/23(金) 09:13:50.88ID:OUZ9ZG4GM
普通の設定なら0で割っても例外は起きないよ。Infになるだけ。
Infも計算できる。Inf/InfとかはNaNになったりするけど。
2017/06/23(金) 09:28:01.22ID:7CKItQkCM
柴田さんの本でアルゴリズム勉強したいんだけど、c言語とjavaどっちがいいんですか?
目的は基本情報技術者試験午後対策と競技プログラミング用です
どっちも読むのがいいのでしょうか?
2017/06/23(金) 10:45:37.79ID:HJ43MjWq0
ここか ここの1に書いてあるスレで
http://mevius.2ch.net/test/read.cgi/tech/1194614600/
2017/06/23(金) 12:39:03.49ID:7CKItQkCM
プログラマー板で聞いてみます!
2017/06/23(金) 12:40:24.54ID:bga0zZR5H
アルゴリズムならC言語かなぁ
理由は、再帰があるから
2017/06/23(金) 12:51:15.76ID:7CKItQkCM
>>551
ありがとうございます
2017/06/23(金) 13:09:18.89ID:s9DU3vr6a

再帰なんてほとんどの言語でできるだろ
できない言語探すほうが難しいのでは
2017/06/23(金) 13:17:04.39ID:jGFBZEPId
>>547
例外が発生するかどうかは環境依存
555デフォルトの名無しさん (アウーイモ MM9b-+bbG)
垢版 |
2017/06/23(金) 17:25:39.99ID:zs9t5gljM
>>552
Javaは難しいものを作り込む言語ではないからね。
2017/06/23(金) 18:36:24.35ID:9AlljSA6M
>>554
もちろん。
だから、普通ってかいた。
ところでデフォルトで例外になる環境教えて。
2017/06/23(金) 18:43:11.28ID:cLuj8vNR0
Infの演算決めたヤツアホだよな
せっかくの異常値検出が糞仕様のせいで出来ない

InfなんてほとんどNaN扱いでいいんだよ
1/(1-1) > 0 > 1/-(1-1)
とか決めたヤツ、頭おかしい
2017/06/23(金) 18:45:50.11ID:KSkSHD0C0
0 > -1/(1-1) ではなく 0 > 1/-(1-1) で?
2017/06/23(金) 19:12:15.59ID:cLuj8vNR0
そう
頭おかしいでしょ?
560デフォルトの名無しさん (ワッチョイ 9711-LvKX)
垢版 |
2017/06/23(金) 19:27:42.95ID:vbPiU/7d0
%%%5,7$$$
}
000-[[[%ER,D,A%%~
2017/06/23(金) 19:34:32.39ID:9AlljSA6M
ん?整数?じゃないよね。
そりゃ、ieee754には正のゼロと負のゼロがあるからな。
2017/06/23(金) 19:44:07.40ID:KSkSHD0C0
ああ 負のゼロの意図で -(1-1) か
563デフォルトの名無しさん (アウアウウー Sa9b-h10b)
垢版 |
2017/06/23(金) 21:30:08.71ID:DRFAk1dca
>>548
十数年挫折してやっと分かってきたおいらに言わせれば、アルゴリズムは何でも良いから関数型言語で勉強した方がいい。
アルゴリズムの殆どがリストを基本にしてるけど、CもJavaも配列が基本だから挫折しやすい。
一旦リストが基本の言語でアルゴリズム勉強して、それを配列で実現するには?って考えた方がいい。
2017/06/23(金) 22:03:37.03ID:gW02JZGeM
>>563
基本情報技術者試験を受かりたいので、関数型言語では無くcかJavaで覚えたいんです
仕事で他の言語覚えなきゃいけないので、関数型言語を覚える時間が無いです
すみません
565デフォルトの名無しさん (アウアウウー Sa9b-h10b)
垢版 |
2017/06/23(金) 22:57:40.45ID:DRFAk1dca
>>7
エクセルのだとエクセル立ち上げないとだからな。。。
WSHのVBSでエクセル操作するのを呼び出すとかならSystem関数で一発だろ。
566デフォルトの名無しさん (アウアウウー Sa9b-h10b)
垢版 |
2017/06/23(金) 22:59:45.35ID:DRFAk1dca
>>18
改行するならputsだが、改行したくないならprintfしかあるまい。
ある意味立派なフォーマットだ。
567デフォルトの名無しさん (アウアウウー Sa9b-h10b)
垢版 |
2017/06/23(金) 23:04:15.20ID:DRFAk1dca
>>564
うん。
文法は覚えられるけど、コードがどう言うことしてるのか理解出来ないと思うんだよね。。。
その為の関数型言語なんだが。。。

まあ、CやJavaでコード読めないってなったら関数型言語においで。
そしたら読めるようになるから。
2017/06/23(金) 23:16:54.40ID:tdHTYauf0
スッキリわかる Java入門 第2版、2014

Cは、ポインタがあるので、ややこしい。
この本を3回読んで、オブジェクト指向をみっちりと学ぶ
2017/06/23(金) 23:53:50.89ID:afzAOFtI0
>>566
fputs("hoge",stdout)
2017/06/24(土) 02:23:58.77ID:sW+IRv2v0
>>564
システム深く入り込んで、いろいろ弄りたいならC言語の方がいいと思うが
アルゴリズムを学ぶことが主要な目的なら、Javaの方がいいように思う
571デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/24(土) 05:52:05.44ID:AiSsJYjg0
>>570
そのアルゴリズムがどんな高度なものかによるから答えにくいんだろうが。

基本情報技術者試験用の言語というあたりでたいしたことをしないのはわかるが。

まだどの言語もまともに使えないレベルなんだろう。CとJavaならCをやってからJavaをやった方がコンピュータの理解にはいいけど。
2017/06/24(土) 07:48:16.71ID:SFTuX/e+0
>>570
今はC言語にしようかなって思ってます
>>571

C言語とJavaなら基本的なものは使えます
レベルとしては蟻本くらいです
573デフォルトの名無しさん (アウアウエー Sadf-h10b)
垢版 |
2017/06/24(土) 07:50:04.53ID:TrIYg7wba
Cだとリスト必要な時リストそのものを作らないといけないけど、Javaだとリストクラスのインスタンス作ればいいだけだしね。
574デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/24(土) 07:54:12.89ID:AiSsJYjg0
>>572
アルゴリズムというのがどこまで高度なものを言ってるのかわからないが、Cは適度なところで抑えないと時間切れで他のことができなくなるぞ。
2017/06/24(土) 08:02:26.86ID:i0vCbpkL0
ソートとか検索とか簡単な計算とか
超基本的なやつでしょ?
言語なんて何でもいいよ
2017/06/24(土) 09:05:31.01ID:SFTuX/e+0
>>574
蟻本レベルを目指してます
>>575
一つの目標としては、そうです
あともう一つは、競技プログラミングにも参加したいです
2017/06/24(土) 09:10:20.82ID:SFTuX/e+0
基本情報技術者はC出行こうと思うんですけど、競技プログラミングもC言語でいいのでしょうか?
2017/06/24(土) 14:53:17.50ID:Px3P/nJx0
>>570
ZDDとか展開出来る?
クヌース本とかJAVAで実装し直すの?
579デフォルトの名無しさん (ワッチョイ 178e-Lvcy)
垢版 |
2017/06/24(土) 17:35:51.09ID:GiFMFqzr0
アルゴリズムを勉強することが目的なら、言語は何でもいいに一票。
使い慣れたやつじゃないと、言語自体の使い方とかに気を取られて、アルゴリズムの勉強がはかどらない。

ただ、C言語はいろいろと手順が多い傾向があるので、「言語初心者」には適さないと思う。
2017/06/24(土) 19:57:34.57ID:7Dka8Eta0
昔はpascalだったが
oberonとかどうなってるんだろ
2017/06/24(土) 23:21:27.81ID:BBTzLwWV0
アルゴリズムは、Ruby で説明する。
型の記述が無いから、Rubyが圧倒的に楽

競技プログラミングでは、Java, C++

基本情報技術者は、Java でいい。
C にはポインタがある分、時間を食うから損
582デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/24(土) 23:33:11.12ID:AiSsJYjg0
>>581
競技プログラミングは仕様をみたすプログラム作りだから言語は関係ない。

Cについてはキミがポインタを理解してないだけじゃないか。

基本情報技術者試験ではなぜかC言語が一番難しい問題になっているのは謎だが。
2017/06/25(日) 09:19:10.07ID:PrMsbOwj0
>>582
C言語が一番難しいってどういう基準なのでしょうか
584デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/25(日) 09:33:58.41ID:wnVI7vr50
>>583
問題をみればわかるでしょ?
585デフォルトの名無しさん (スププ Sdbf-VLv6)
垢版 |
2017/06/25(日) 09:53:15.23ID:LyAyGbQ7d
Cは一番単純明快でわかりやすいでしょ
2017/06/25(日) 10:05:18.30ID:PrMsbOwj0
問題見てもどれも一緒に見えるけど…
2017/06/25(日) 10:43:25.62ID:OKoNwt4v0
>>579
CASL II でもいいでつか?><
588デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/25(日) 11:14:35.21ID:wnVI7vr50
>>586
そうかCもまだよくわからないレベルだったな。
2017/06/25(日) 11:20:49.47ID:PrMsbOwj0
>>588
Cは分かるんですけど、CとJavaの難しさの比較が出来ません
2017/06/25(日) 12:44:21.11ID:OKoNwt4v0
基本情報技術者試験の過去問見たけど、
COBOL でもいいんじゃね?
2017/06/25(日) 13:04:19.37ID:PrMsbOwj0
>>590
基本情報技術者試験はCで受けます
592デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/25(日) 15:21:31.61ID:wnVI7vr50
一番簡単なのは昔からアセンブラなんだよな。
2017/06/25(日) 17:09:12.90ID:+wWOGC6CM
何故アセンブラ…
2017/06/25(日) 17:18:27.51ID:crK74dJZ0
問題文に仕様書が付いてくるから暗記がいらない。あまり重箱の隅をつつくような問題が出ない。
595デフォルトの名無しさん (アウアウエー Sadf-h10b)
垢版 |
2017/06/25(日) 18:04:37.90ID:pYBZiqDJa
>>593
言語の難易度と問題の難しさでバランス取ってたりして。。。
2017/06/26(月) 05:39:11.26ID:nrkIqgVb0
単純な仮想CPUのアセンブリ言語だから割と簡単
2017/06/26(月) 06:34:56.32ID:XtO3Dk5zd
受験生に愛されるコメットさん
2017/06/26(月) 14:59:45.01ID:nH0wW7kQM
カシオのポケコン
2017/06/26(月) 19:43:30.58ID:TF0F3xMAr
アセンブラが簡単というのは同意。アーキテクチャにもよるけど単純で罠も少ない
2017/06/26(月) 20:41:11.90ID:GM19K0OY0
ふーん
じゃあアセンブラでテトリス作ってみて
601デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/26(月) 20:58:03.95ID:Ntea+VQr0
>>600
なんの話かまったく読まずにレスw
2017/06/26(月) 21:13:56.64ID:DVB4gtQza
基本情報技術者試験のことだとすると「アーキテクスチャにもよるけど」っておかしくね?
>>599は一般にアセンブラが他の言語より簡単だと言ってるようにみえるんだが
603デフォルトの名無しさん (ワッチョイ b797-+bbG)
垢版 |
2017/06/26(月) 21:47:17.10ID:Ntea+VQr0
>>602
CASLUではないとしてもあの程度のコンピュータのアセンブラなら言語としては単純。
2017/06/26(月) 23:17:34.88ID:PKYMbkgl0
並列動作とか遅延ジャンプとか出てこないし
レジスタの塊みたいな奴に比べりゃ可愛いよな
605デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/26(月) 23:19:06.55ID:31mN8SV/0
Visual Studio community 2017をC言語のコンパイラとして使えないんでしょうか?
2017/06/26(月) 23:21:42.03ID:Th5Kxani0
>>602
当然、COMP-XかCOMETかという話だろう。
2017/06/26(月) 23:27:10.92ID:go0auT85d
>>605
C言語にしたいなら、拡張子を.cにしろよ。
608デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/26(月) 23:47:45.66ID:31mN8SV/0
>>607
コンパイラとしてどうやって使っていいのかわかりません。
コードを書いてもどうやって実行すればいいのか解りません・・・
今は勉強用にEasyIDECって言うのを使ってますがこれはプログラムの実行はできるんですが
ファイルを読み込むタイプのプログラムを実行できないしexeファイルも作れません。
勉強しながら早いうちからexeファイルとか作れる環境で慣れたいんですがやりかたがわからなくて・・・
よければ教えてください
2017/06/27(火) 00:20:49.40ID:aHvsmlwPd
>>608
IDE使う前にMSYS2+MinGWのコマンドラインでhello would書いて特訓しろ。
2017/06/27(火) 00:37:59.30ID:1mHdD+S50
またQZが自演してるな
たのむからゴミコードは出すなよ
611デフォルトの名無しさん (ワッチョイ 376c-dFnT)
垢版 |
2017/06/27(火) 08:53:16.46ID:ucAV+SpP0
>>564
試験対策ならJavaだろうなぁ
俺はJavaで合格した。

派遣のプログラマーで仕事もらうには、合格必要だぜ。
今は、派遣はヤメたけど、派遣の経験は良い勉強になったわぁ。
2017/06/27(火) 09:31:49.14ID:jtm5ziJ2M
>>609
MSX2+ とか笑かすわ。
613デフォルトの名無しさん (ワッチョイ 376c-dFnT)
垢版 |
2017/06/27(火) 10:00:06.40ID:ucAV+SpP0
>>609
トグル・スイッチをパチパチやってプログラミングするところからやる?
パチパチやってBoot Loaderを打ち込むのからやると、全てが判るよ。
614デフォルトの名無しさん (ワッチョイ 376c-dFnT)
垢版 |
2017/06/27(火) 10:03:11.75ID:ucAV+SpP0
十進カウンタや、JKフリップ・フロップをNANDを組み合わせて作る事は今でもやるんだろ?大学で。

学生実験とか?最近の大学では無いの?
2017/06/27(火) 10:47:01.95ID:ZcFCap/E0
加算器とか情報算数かな
616デフォルトの名無しさん (ワッチョイ 376c-dFnT)
垢版 |
2017/06/27(火) 10:57:18.19ID:ucAV+SpP0
>>615
それ、なんちゅう授業?授業のタイトルは?
2017/06/27(火) 12:53:23.72ID:GRUOkSLcd
>>612
ジジイ乙
2017/06/27(火) 12:54:46.79ID:/HeVfsPd0
ハーフアダー フルアダー を論理回路で
2017/06/27(火) 13:05:58.64ID:IF4g2E0D0
演算器の設計 - 加算器(Adder)
http://news.mynavi.jp/column/architecture/070/
演算器の設計 - キャリールックアヘッドアダー
http://news.mynavi.jp/column/architecture/071/
演算器の設計 - キャリールックアヘッドアダー(2)
http://news.mynavi.jp/column/architecture/072/
パラレルプリフィックスアダー
http://news.mynavi.jp/column/architecture/073/
パラレルプリフィックスアダー(2)
http://news.mynavi.jp/column/architecture/074/
パラレルプリフィックスアダー(3)
http://news.mynavi.jp/column/architecture/075/
Lingアダー
http://news.mynavi.jp/column/architecture/076/
アダーの実装に関して
http://news.mynavi.jp/column/architecture/077/
620デフォルトの名無しさん (ワッチョイ 9fc1-NIhq)
垢版 |
2017/06/27(火) 17:08:46.44ID:HjxjU0LK0
exeの作り方は結局わかりませんでしたが
textファイルを読み込んで結果を吐き出すプログラムはvisual stadioで何とか実行できました
スレ汚しすみませんでした
2017/06/27(火) 17:43:30.17ID:jtm5ziJ2M
プロジェクトの下の debug か release の下に出来てるだろ。
2017/06/27(火) 17:57:16.27ID:HOHNeZU7M
>>616
こんなやつじゃね?
http://risyu.is.it-chiba.ac.jp/syllabus/syplssb302
623デフォルトの名無しさん (ワッチョイ 9fc1-NIhq)
垢版 |
2017/06/27(火) 18:21:29.40ID:HjxjU0LK0
>>621
よく見たらdebugフォルダの中にアプリケーションって言うのがありました
これがexeファイルなんですね(*´ェ`*)
2017/06/27(火) 19:29:10.53ID:eugTAuNDM
char *hoge にファイル名が入っていて、
printf("%s",hoge);とするとファイル名が表示されます
このファイル名を
http://dqn.sakusakutto.jp/2013/04/c_kr_stack.html
のpush()に引数として入れたいのですが、型が合いません

どなたか教えて下さい
2017/06/27(火) 20:00:27.36ID:7v0X4ZTWM
すみません自決しました
2017/06/27(火) 20:07:10.41ID:bJ//gE7J0
自決しちゃったのか
2017/06/27(火) 22:36:09.51ID:pewKiBDj0
御冥福を
2017/06/27(火) 22:38:45.02ID:YYgE0wDj0
せっかくだから辞世の句を詠んでからにしよう
2017/06/28(水) 01:29:20.62ID:CBwCtPCV0
>>608
EasyIDEC ってこれのことだよな?
http://9cguide.appspot.com/p_9cide.html
だったらこれはコンパイラがtccだからちゃんとexe作った上で実行している筈だしファイルの読み書きも全く問題なくできる筈だぞ。
630デフォルトの名無しさん (アウアウウー Sa9b-h10b)
垢版 |
2017/06/28(水) 07:58:22.81ID:na5KYPACa
>>608
コマンドラインからコンパイルしたいならVCは何かバッチ実行したらclでコンパイル出来たはず。
面倒だったらbccに乗り換えて見ては。
setbccってツールも併せて検索して使えばパス通しまでしてくれる。
2017/06/28(水) 10:17:50.38ID:xb2y2Mwj0
ベン図とかカルノー図とか
スレチ過ぐる
632デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/28(水) 17:26:43.67ID:duiTP6800
>>629
自分ではtxtファイルの読み込み方が解りませんでした・・・
あとこんな感じで使えたらいいんですけど
http://9cguide.appspot.com/easyidec7.jpg
自分の環境(win7)だと立ち上げた後
http://light.dotup.org/uploda/light.dotup.org459505.jpg
こんな感じでスクリプトエラーが9個ぐらい出るし理想の使い方ができないんです・・・

>>630
Borland C++ Compiler 5.5がもう配布されてなくて代わりに
https://www.embarcadero.com/jp/free-tools?redirect=http://www.codegear.com/jp/downloads/free/cppbuilder
こんなのが配布されていてこれのC++Compilerをダウンロードしてみたんですがなんか違う気がします。
http://forest.watch.impress.co.jp/article/2002/10/24/cwohajimeyou.html
これもBorland C++ Compiler 5.5を要求されますが参考サイトと同じような設定ができなくてあきらめた経緯もあります。

今はvisual studio community 2017を使っていますがエラーを山のように吐いてくれて勉強になるしテキストファイルを読み込んだり吐き出したりする
プログラムも作れたりととりあえず初心者として目指すレベルには十分やりたい事ができるのでこれでいいかなと思っています。

レスありがとうございました。
633デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/28(水) 18:02:23.14ID:duiTP6800
>>632はこっちじゃなくて
http://forest.watch.impress.co.jp/article/2002/10/24/cwohajimeyou.html
こっちでした
http://forest.watch.impress.co.jp/article/2007/02/07/cwohajimeyou2.html

EasyIDECも写真のように右にいろいろ出るなら使いたいんですけど、よく解らないんですよね・・・
634デフォルトの名無しさん (アウアウウー Sa9b-h10b)
垢版 |
2017/06/28(水) 20:06:32.41ID:AA6Kh2Ana
>>632
setbcc新しい方に対応してないんか。
フォルダ名書き換えるだけやから対応すりゃ良いのにね。
gccとかは-oファイル名ってしないとa.exeになっちゃうけど、確かインストール時にパス通してくれるはず。
(最悪、binだけ自分でパス通せば行けたはず。ライブラリのパスをコンパイラの設定ファイルに通すとか、そういう面倒はなかった)
2017/06/28(水) 22:11:54.96ID:SRIFWNkc0
>>633
ずぶの素人なんだろ?
だったら、そういうのはチュートリアルを一つずつやっていくもんだ。
https://msdn.microsoft.com/ja-jp/library/szatc41e(v=vs.110).aspx
https://msdn.microsoft.com/ja-jp/library/zftbwa2b(v=vs.110).aspx

ただしMSはVC++にはやる気を出してない(基本あれはプロ用)なので、
チュートリアルが整備されているC#等を使ってIDEの使い方を学んだ方がいい。
https://msdn.microsoft.com/ja-jp/library/jj153219.aspx
https://msdn.microsoft.com/ja-jp/library/dd492135.aspx
https://msdn.microsoft.com/ja-jp/library/dd492171.aspx

IDEに関してはVSがかなりいいから、そんな古いマイナーIDEなんて使わずに、
最初からVSでやったほうがいい。

ただ、環境整備をずぶの素人がやるのは辛い。
というか、周りに誰かいないのか?居るのなら拝み倒してやってもらえ。
そんなところで苦労しても何の足しにもならない。
とっとと実行環境を整備して、ガンガンコード書いて動かして試さないと意味が無い。

周りに誰も居ないのなら、マジでチュートリアルを頭から全部一つずつやっていけ。
そしたらいつか、ああもういいか、って思うときが来るから、
その時にチュートリアルを卒業し、自分のプロジェクトの開発を始めろ。
2017/06/28(水) 22:28:47.16ID:SRIFWNkc0
>>633
ああごめん、VC++もチュートリアルあったわ。
いつもどおりハロワだが。
https://msdn.microsoft.com/ja-jp/library/jj620919.aspx

C++だからstdafx.hになっているが、
VC++はそこらへんごちゃ混ぜに出来るので(この意味は今は分からなくていい)
#include "stdio.h" すれば printf とかも普通に使えるはず。
まあがんばれ。
637デフォルトの名無しさん (ワッチョイ d7c1-NIhq)
垢版 |
2017/06/28(水) 23:04:41.12ID:duiTP6800
>>636
ありがとうございます
チュートリアル読みました。
エラーが出るとはいえEasyIDECを使ってある程度流れがわかっていたのとvisualstudioを何時間か弄っていたので
チュートリアルは多分理解できたと思います
今はwin32コンソールアプリケーションの空のプロジェクトを作ってソースファイルのところに.cファイルやtextファイルを追加する感じで使っていて
それなりに自分の目的にあうようには使えてるとは思います・・・多分
だからコードをひたすら書いて、理解を深めようと思っているところです。
また解らないことがあったら質問させてください!!
2017/06/28(水) 23:55:03.72ID:SRIFWNkc0
>>637
いや見りゃ分かるが君はこのスレで質問すべきレベルに達してない。
つっても他に聞く相手が居ないのならどうしようもないが、
質問されてもさすがに相手するのが嫌になるレベルだというのは自覚しろ。
だから質問したところで回答があるかどうかはまた別の話だ。

君は分かっていないだろうが、
レベルの低い奴(今回は君)に対して回答することはスレに悪影響を及ぼす。
単純には、そういうレベルの奴が集まる方向に圧力がかかり、結果的に上級者が逃げ出す。
俺はこのスレの常連ではないから、俺がこのスレに対して影響を及ぼすのは本意ではない。
だから今後は俺は君の質問は無視する。
それでも君が質問するのも自由だし、それに対して回答するのも他住民の自由だが、
見たとおり、適当にあしらわれて終わりになるはずだ。
それがスレのレベルを下げないための適切な行動だからだ。

ところが君はどうやら本気で学びたいようだ。
だからとりあえず回答したが、今後は俺は回答しない。自分で勝手に学べ。
今はそれが出来るだけのリソースがWeb上にある。
最新IDEとWebを使うのが一番無駄に引っかからなくていいからそうしろ。

IDE自体の質問なら、VSならスレがある。
というかバージョン毎に12スレもあるからそっちで聞け。
http://mevius.2ch.net/test/read.cgi/tech/1491618774/

> win32コンソールアプリケーション
多分、1-100まで足してみようとか、そういうのからやってるんだろ?
それならこれで合ってるから、まあがんばれ。
とりあえずブレークポイント/ステップ実行/ウオッチが使えれば何とかなるだろう。
後は適当に弄繰り回していれば分かるようになる。
IDEなんて基本的に使い方は同じだから、最初から高機能IDE(今回はVS)に慣れたほうがいい。
2017/06/29(木) 00:08:02.54ID:GSOqdYxT0
こんな感じでQZが煽られ発狂
640デフォルトの名無しさん (ワッチョイ 2d6c-ddzC)
垢版 |
2017/06/29(木) 08:26:00.68ID:7eb8fA4L0
>>635
すげぇなぁ、Microsoft.
日本語チュートが充実じゃん。
641デフォルトの名無しさん (ワッチョイ 2d6c-ddzC)
垢版 |
2017/06/29(木) 08:43:40.13ID:7eb8fA4L0
stdafx.hをみて恐れをなしてVisual Basicを選択したのを思い出した。
その後、Obj-C -> Swiftに流れたが、今VC++さわれば楽しめるかもしれん。

ただし、Microsoft仕様のC++が今どうなってるのか?不安。
それと、Windows環境ってAPI Referenceを気軽に検索する方法があるのか?

俺がVC++触っていた時は、msdn developer’s networkっていう重いAPI Viewerがインストールされて、ちょっと検索するにもエライ待たされて閉口したんだが。
642デフォルトの名無しさん (ワッチョイ 2d6c-ddzC)
垢版 |
2017/06/29(木) 08:48:30.60ID:7eb8fA4L0
VC++って、C++11/14/17に準拠してるんだって。部分的に。
VC++も進化してるんだ。知らんかった。
2017/06/29(木) 08:49:10.03ID:kjfsQTVLd
そう、部分的に
644デフォルトの名無しさん (アウアウエー Sa4a-kiAr)
垢版 |
2017/06/29(木) 09:07:42.11ID:OIGMpkDEa
その辺の準拠率はg++かclangだな。
c99対応コンパイラは皆無だっけ?
2017/06/29(木) 09:09:29.51ID:NPwerNyC0
C++/CLI
https://ja.m.wikipedia.org/wiki/C%2B%2B/CLI
2017/06/29(木) 09:19:32.95ID:Tswd9qCud
emacsから離れられん
647デフォルトの名無しさん (ワッチョイ 2d6c-ddzC)
垢版 |
2017/06/29(木) 09:20:48.70ID:7eb8fA4L0
CCmdTarget UIResponder
CWnd UIWindow
CView UIView
CEditView UITextView
CButton UIButton
CWinApp UIApplication

MFCとUIKitの対応関係はこんな感じか?

クラス階層図はかなり違うなぁ。継承を使ってカスタマイズしていく設計と、デリゲートを使ってカスタマイズしていく設計との違いから来るのかな?
648デフォルトの名無しさん (ワッチョイ 2d6c-ddzC)
垢版 |
2017/06/29(木) 09:26:19.20ID:7eb8fA4L0
VC++がプロ仕様と言うのだったら、Xcodeも同じ様なもんだな。
String構造体が、
Conforms To

Comparable
CustomDebugStringConvertible
CustomPlaygroundQuickLookable
CustomReflectable
CustomStringConvertible
CVarArg
Equatable
ExpressibleByExtendedGraphemeClusterLiteral
ExpressibleByStringLiteral
ExpressibleByUnicodeScalarLiteral
Hashable
LosslessStringConvertible
TextOutputStream
TextOutputStreamable
こんだけのプロトコルに準拠しているって、仕様を見て、どれだけのヤツがピントくるかな?
おまけに山ほどイニシャライザがあって、初心者はびっくりするだろなぁ。
C++から来た奴は、構造体にイニシャライザ?って思うのかな!
2017/06/29(木) 09:37:55.49ID:NPwerNyC0
https://msdn.microsoft.com/ja-jp/library/system.string(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1
650デフォルトの名無しさん (ワッチョイ 2d6c-ddzC)
垢版 |
2017/06/29(木) 10:36:02.44ID:7eb8fA4L0
>>649
あのぉー。Visual Studioのリファレンスって、offlineでも引く事できますか?
例えば、4Gの携帯回線が細い場所でも、リファレンスを閲覧出来るのでしょうか?

リファレンスをローカルの開発機へインストールできますか?
2017/06/29(木) 10:52:35.22ID:NPwerNyC0
オフラインのヘルプビューアもあるけどコンテンツ内容が古い
オンラインでもそれほど重くはないので4G回線ならWebでも問題ないだろ
652デフォルトの名無しさん (ワッチョイ 1911-CicO)
垢版 |
2017/06/29(木) 17:10:15.78ID:wGgfLCtF0
***SLAMO***

}

000-"F","TAP","0","1M","L","E-07"/0B"[9BA%]"^"2*73B"="0"/"9GA"
001-"Do"[[[%9DE=HUF%%!%$0B1OTU"NE"]]]<\b>
002-<<%!!!HNDEL%!0DAI@$7[1B]!0#!@>>
3000-{{1\B%HUF!0$$\%6/0Q\%6/GA[[7BU]]%9TE!%$en$}}


---

[[[C%%]]]
}

000-"5802"/"α"="0.1888412376155482"%en{
2017/06/30(金) 00:41:38.72ID:OFeLP1+80
以下のコードように、呼び出し先の関数で作った配列をポインタとしてmain関数に返すプログラムでwarningが出るので、調べてみたところ
・呼び出し先の変数は一時的に保管される領域に入っている
・一時的に保管される領域はmain関数に戻ると消える
・main関数にリターンされるのはあくまで配列の開始位置なので、この書き方では配列が消える恐れがある
という情報を目にしました。
以下のようなコードであればどのように改善すればいいでしょうか。
宜しくお願いします。

/*main.c*/
int main()
{
int *hoge=sub();
}

/*sub.c*/
int *sub()
{
int b[10];
return b;
}
2017/06/30(金) 01:03:42.29ID:obNwHzFda
mainにbの配列を宣言してsubにポインタを渡し中身を書き換える
もしくは
sub内のbをstatic intにする
2017/06/30(金) 01:17:27.06ID:RtmcppLUM
もしくは
mallocで確保した領域を返し、freeするのは呼び出し元の責任にする
2017/06/30(金) 04:27:36.41ID:8CWbZ/OEd
null pointer
2017/06/30(金) 05:56:01.96ID:sS6ajRjO0
呼び出し元で寿命を管理すべきなので、
mainに int b[10]; と宣言してsubにbのポインタを渡す
2017/06/30(金) 08:37:20.11ID:Zx9hbpt8M
別にどっちで管理してもいい
2017/06/30(金) 09:33:09.99ID:OFeLP1+80
>>654 >>655 >>657
ありがとうございます!!
2017/06/30(金) 09:40:38.20ID:b/sHRIH80
構造体で包んで値返し
typedef struct { int b[10]; } foo_t;
foo_t sub(void) { foo_t a; return a; }
2017/06/30(金) 09:44:31.82ID:RtmcppLUM
>>657
strdup使わない派?
2017/06/30(金) 10:43:50.08ID:12icUynjd
Cでprintfみたいな可変引数関数のラッパー
を可変引数で作りたいです。
コンパイラの実装に依存しない書き方って
有りますか?
2017/06/30(金) 11:24:03.18ID:zIElKXKqH
>>662
それができないからvprintfみたいなラップされる専用の関数ができた
2017/06/30(金) 11:37:38.99ID:12icUynjd
やっぱそうですか、残念。
ターゲットの関数はソース無いし、
vprintfみたいなのは用意されてないです。
2017/06/30(金) 11:51:41.54ID:vgqCM8Lxd
>>656
ガッ
2017/06/30(金) 12:52:04.96ID:X/gd7WZi0
可変引数関数を記述するだけなら stdarg.h で事足りるけど

printf のフォーマット文字列解釈して 文字に置き換える部分を
そのまま利用したいとなると、vsprintf の有無次第だよな・・・
2017/06/30(金) 17:00:50.82ID:sS6ajRjO0
>>661
状況によるけど、malloc/freeはコストが大きいので、使わなくて済むなら使わない
668デフォルトの名無しさん (ワッチョイ 2d6c-ddzC)
垢版 |
2017/06/30(金) 17:07:02.99ID:BBkM2EA10
>>667
コスト高いの?本当に!

高いのはSystem Callのこれじゃぁ?
sbrk/mmap/VirtualAlloc等
2017/06/30(金) 17:27:47.82ID:sS6ajRjO0
>>668
不必要なら避ける癖ついてたなあ
厳密に検証してないが、確保するサイズにもよるけど10%ぐらい違う
しかし関数コールは減らした方がいいのは明らか
2017/06/30(金) 18:45:37.58ID:I/Y6yRYUM
>>668
高い場合がある
と言う方がより正確かと
なので組み込みだと禁止してたり独自のルーチン組み込んでたりする
2017/06/30(金) 20:10:41.26ID:caqhD/Ov0
int b[10]とmallocではmallocの方が常にコストは高いけどな。
前者は最適化無しで1命令、最適化後は0命令。
後者はK&R的軽量実装でも10〜1000命令は必要になる。
10%ってのは他含めてコミコミの計測結果だろ。確保のみなら喧嘩にならん。
2017/06/30(金) 20:23:10.05ID:Hz970lyir
ガベージコレクタだって高コストだしな。自分でメモリを管理するのが一番安いw
2017/06/30(金) 20:33:40.33ID:APIJ3en80
アセンブラ時代思い出すなぁ。
2017/06/30(金) 23:38:17.22ID:yb1eWQ160
コストが高いからalloca()が出来たんだし
2017/07/01(土) 00:12:13.52ID:bUPyefPgM
>>638
もちつけ。おまいださいぜ
2017/07/01(土) 02:56:34.34ID:PLwoIwzod
Windows環境のMINGWです
\nをASCII文字コードにするとASCII表の通り10になりますが、
Windowsの改行コードCR+LFですよね?
UNIX環境ならLFつまり10になるのはわかりますが、何故Windows環境でも10なのでしょうか?
2017/07/01(土) 08:20:28.99ID:PrUYVLVg0
\nをprintしたりした場合に改行になるだけであって、\nが10なのは変わらない。
2017/07/01(土) 08:40:33.80ID:EmOg/tlYd
>>677
ありがとうございます
\nが10になるのはCR+LFでもLFでも同じだということですか?
2017/07/01(土) 13:13:17.56ID:FWbGo/9j0
\nは改行を表しその値は(ASCIIなら)10
printfとかの入出力するときにunixなら何もしないがwindowsではCR+LFと変換する
2017/07/01(土) 14:26:57.37ID:jAe4uSb20
出力先のファイルポインタがクックドモードの時だけ変換される
2017/07/01(土) 15:56:17.04ID:9IpZzPucd
>>679
>>680
ありがとうごぞいます
クックドモードも調べてすっきりしました
2017/07/04(火) 18:08:24.69ID:K9JgJTrT0
[[[C++]]]
}

001-GOM#\%71/#1,16,2,M,BL,SAJ%\*%U,615325,6,11,62,364,3,21,673,!\0.1,11.5,78,21,6%<<<\BSA\>0>>>%11.27,21,0,73.561,2,3,4,6,1,{\!end
2017/07/04(火) 23:36:19.93ID:ydrc2aV60
テキストファイルは、CR + LFでも読み込んだらLFだけになる。書き込むときCR + LFになる
バイナリファイルは、そんなことにならない

テキストエリアで改行するなど、ファイルとは関係ない場合、CRが必要になる場合がある
2017/07/05(水) 12:59:27.11ID:63hLHVD1M
初心者の誤った回答の典型
685デフォルトの名無しさん (ワッチョイ 6e1c-4/kT)
垢版 |
2017/07/05(水) 15:35:27.26ID:4h6UtxrL0
ファイルの属性じゃねえもんな
2017/07/06(木) 04:58:28.75ID:pM9IP2NJ0
教えて下さいm(_ _"m)

size_t n;
n = (int)n < 0 ? -n : n; /* quick absolute value check */

"<" や "? :" の演算子は調べて分かったのですが、(int)n の部分は
どういう処理を行いますか?
intって宣言するものが、かっこで囲まれていて、なんだこれ!
っていう状態です。
687デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/06(木) 05:47:36.98ID:CwAIhoRS0
キャストだよ
本来size_t型のnを、その場だけintてことにしてくれって要求

ただし本当にintになっちまうわけじゃないから
(int)n = n < 0 ? -n : n; みたいに
代入先にしようとするとエラーだ
コンパイラによっては通るのがあるけどそれは非標準
2017/07/06(木) 05:57:41.52ID:pM9IP2NJ0
>>687
ありがとうです!
キャストですね。
size_tからintに一時的な変換ですね。
双方のメモリー上の大きさが違う気がするんですけど、僕の環境でどうなるのか調べてみます。
2017/07/06(木) 08:10:55.85ID:rcg+ZZ7N0
何がしたいコードなのか意味がわからない
2017/07/06(木) 08:12:31.54ID:TeNYF/iwM
nが負になりうるならなんでsize_tで宣言するんだろ
691デフォルトの名無しさん (ワッチョイ 9f8f-gRQY)
垢版 |
2017/07/06(木) 08:30:53.10ID:KLsItAo20
ssize_t が標準に欲しいところだよね。
2017/07/06(木) 08:36:29.39ID:c6kgU9bA0
キャストを覚えろ
キャストしない事を覚えろ
キャストをすこしだけする事を覚えろ
2017/07/06(木) 08:37:13.77ID:kIxohS2+M
>>689-690
単なるサンプルコードだろ
そもそもそのまま実行したら未初期化のnを参照することになるし
2017/07/06(木) 08:41:41.93ID:kIxohS2+M
>>691
sizeof と言うコンパイラ組込演算子の戻り値の型がコンパイラに組み込まれていない違和感
695デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/06(木) 09:45:19.82ID:CwAIhoRS0
>>694
いや組み込まれているが
それが具体的に何型なのかを
コンパイラの実装者が明らかにせよと
規格が要求しているということだ
2017/07/06(木) 11:03:13.91ID:TUAsW00PH
>>693
出典はここだな。
https://stackoverflow.com/questions/10204471/convert-char-array-to-a-int-number-in-c

問1: この回答者がnの絶対値をとりたくなったときの気持ちを3行で答えよ。
2017/07/06(木) 12:41:49.84ID:kIxohS2+M
>>695
> いや組み込まれているが
「コンパイラ(プリプロセッサじゃなくて)」には組み込まれてないだろ

> それが具体的に何型なのかを
> コンパイラの実装者が明らかにせよと
> 規格が要求しているということだ
だからなに?
698デフォルトの名無しさん (ワッチョイ f76c-QYYo)
垢版 |
2017/07/06(木) 12:58:54.02ID:Ot0nxXPI0
size_tは__darwin_size_tでトドのつまり、unsighed longだって。
2017/07/06(木) 13:20:12.73ID:SSOSMdMWM
>>697
どうであれば組み込まれてることになるの
size_t n がコンパイルできることじゃないんだよね?
2017/07/06(木) 14:53:10.10ID:m/Ia1fy10
>>691
反物質のサイズでも記述する気か?w
701デフォルトの名無しさん (アウアウウー Sa5b-pw7F)
垢版 |
2017/07/06(木) 15:09:30.84ID:F+RVqvnpa
【環境】
CS+ + RX62N + E1エミュレータ
【言語】
C言語

上記にてprintf()でCS+のデバッグウィンドウに出力するにはどうすればいいですか?
2017/07/06(木) 15:37:45.25ID:H/fupZr5d
ここできくないようか?
2017/07/06(木) 15:51:10.46ID:F+RVqvnpa
>>702
printf()ってCの標準関数でしょ?ここでいいのでは?
2017/07/06(木) 16:28:30.82ID:hwRP8VqJ0
ターゲットデバイス上でプログラムを実行するのであって、開発マシン上でプログラムを実行するのではない
705デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/06(木) 17:11:22.36ID:CwAIhoRS0
>>697
おまえの定義では、どうなっていることを「組み込まれている」というんだ?
たとえば、
float a = sizeof(int);
これの動作過程の途中に生じる整数型は、コンパイラには組み込まれていないのか?
だとするならば、コンパイラは標準変換の規定に「準拠」することができないぞ

# cl.exeではsize_tがいきなり使えるが、それがおまえの理想か
2017/07/06(木) 19:16:01.36ID:kIxohS2+M
>>705
> # cl.exeではsize_tがいきなり使えるが、それがおまえの理想か
どこの cl.exe なのか知らんけど手元の Visual Studio 2015 Express では未定義の識別子だぞ
2017/07/06(木) 20:40:37.21ID:fTFUdLH00
>>700
size_tの差を記述したいんだろう。
708デフォルトの名無しさん (ワッチョイ 9fea-hKQV)
垢版 |
2017/07/06(木) 21:53:15.95ID:GBHzG+Z/0
何も入力されずにenterが押されたらループを終了する方法が分かりません・・・
誰か教えてください・・・
やはりscanfでは出来ませんかね
fgetsだったらできますか?
誰か教えてください、お願いします
2017/07/06(木) 22:01:35.45ID:TwV4dW80d
プロとしては、scanf単独で使うのではなく、fgetsとsscanfの組み合わせをオススメする。
Enterキーのみが入力されたときは、fgetsのバッファには\nが入る。
710デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/06(木) 22:02:15.40ID:CwAIhoRS0
>>706
ああ、わりいな
拡張子が.cppの場合だw

で、それがおまえの理想か?
711デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/06(木) 22:03:10.59ID:CwAIhoRS0
つーか+Mはメインの質問に答えてないんだが
712デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/06(木) 22:04:47.65ID:CwAIhoRS0
>>709
すげえのオススメしてんなw
へーえ、それがプロの仕事か
713デフォルトの名無しさん (ワッチョイ 9fea-hKQV)
垢版 |
2017/07/06(木) 22:08:15.36ID:GBHzG+Z/0
>>709
ありがとうございます
参考になります
2017/07/06(木) 22:13:42.82ID:btC8Tydl0
http://www.c-tipsref.com/reference/stdio/fgets.html
読み取ったものが空だったときfgetsはNULLを返すらしいのでそれを使えばいいかと
2017/07/06(木) 22:17:43.51ID:btC8Tydl0

確かにfgets(s, N, stdin)は改行を含めて読み取るな
じゃあ戻り値をsに格納したときにs[0] <= 0x1fのときループを終了させればいいか
716デフォルトの名無しさん (ワッチョイ 9fea-hKQV)
垢版 |
2017/07/06(木) 22:18:05.33ID:GBHzG+Z/0
>>714
ありがとうございます!
2017/07/06(木) 22:24:35.28ID:btC8Tydl0
>>716
>>715(もう読んでるかもしれないけど念のため)
2017/07/06(木) 22:58:55.19ID:Ksmyoljx0
>>710
スレタイも読めないアホは黙っとけ
2017/07/06(木) 23:10:54.32ID:mkYh7+Rt0
>>709

^d だと?
2017/07/07(金) 00:50:35.73ID:eIaxM4+K0
>>717
多分、

入力文字列の最後が '\n' の時は '\0' に置き換える。
入力文字列が空の時は、処理を終了する。

がいいと思う。
721デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/07(金) 04:21:12.07ID:WdR7zyOW0
>>718
スレタイに沿って聞いている>>705に答えられないゴミがドヤってんじゃねええよ
722デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 05:29:44.02ID:1OiH67XQa
>>708
環境依存ならgetchってのがあったな。
VS使ってんなら使えると思う。
2017/07/07(金) 06:45:35.54ID:URSZRmHsM
>>721
スレタイも話の流れも読めないアホは黙っとけ w
724デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/07(金) 08:07:53.36ID:WdR7zyOW0
>>723
誰だよそれ
実在しない人物を罵倒することこそ
このスレですることじゃねえだろクズ
2017/07/07(金) 08:12:35.70ID:URSZRmHsM
アンカーついてるのに誰だよとか
さらにアホさが増してるやん w
2017/07/07(金) 08:22:53.74ID:o9CZFWTBM
説明不足と読解不足の両方だおまえら
もういいからどっちも黙れ
727デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/07(金) 09:38:36.86ID:WdR7zyOW0
>>725
アンカーつけられた人物と
おまえさんの説明が一致しない
と言っているんだよ
ニホンゴワカリマスカ?
728デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 19:49:06.92ID:9n40FStT0
質問です。
http://fast-uploader.com/file/7054979858432/
このプラグラムで関数
void InsertList(struct LIST **ptr ,char *newname,char *newpref,double newdistance);
の部分のポインタのポインタ**ptrを普通のポインタ*ptrにするとコンパイラが通らないのは何故でしょうか?
*ptrに直してコンパイラがエラーとして指摘する場所は
newcell->nextptr=*ptr; /* いままでの先頭ポインタを次ポインタに変更 */
*ptr=newcell; /* 新しいデータ領域を先頭ポインタに変更 */
で、「「struct LIST」型の変数の値を「struct LIST *」型の変数に自動的に変換することはできない」とのことです。
自分の頭の中では**ptrを*ptrにしてもアドレスを渡すという役目はできそうに思うのですがよく解りません。
**ptrと*ptrで型が違うとは具体的にどういう意味で**ptrと*ptrでは何がどう違うんでしょうか?
2017/07/07(金) 19:54:32.46ID:w6YiLhhJM
単純に型が違うんどすえ
int a, *b, **c;
これ全部違うんどすえ
a = 728;
b = &a;
c = &b;
int d, *e, **f;
f = c;
e = *c;
d = **c;
どすえ
730デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 20:42:03.04ID:9n40FStT0
>>729
今回のプログラムに当てはめたらどうなるんでしょうか?
int a, *b, **c;
a = 728; = ?
b = &a; = root=NULL
c = &b; = ?
int d, *e, **f;
f = c; = ?
e = *c; = newcell
d = **c; = ?

それとも

a = 728; = ?
b = &a; = ?
c = &b; = root=NULL
int d, *e, **f;
f = c; = ?
e = *c; = newcell
d = **c; = ?

なのでしょうか?
根本的な回答を戴いたようで嬉しいのですが、なにぶん頭が悪くて理解が追いつきません・・・
*1つで型が変わる概念がいまいち理解できません
2017/07/07(金) 20:59:30.90ID:w6YiLhhJM
ごめん、今回のプログラムとやらを一回も見てない
ポインタなんてのはCやる上で基礎の基礎
かつ、ポインタは一生大事に使っていけるお友達なんで
一時間でも二時間でも集中して時間とって
いろいろ調べるなり試すなりして一気に理解してほしい

あと、変数のポインタを渡すっていうのは定番
void foo() {
int x = 100;
bar(&x); // ここで&をつけて…
// ここでxが200になってる
}
void bar(int *p) {
*p = 200; // こっちで*付きで左辺に置いて代入する
}
こうやって呼び出し元の変数の中身を触るのはCでは定番(?)
今回は元のがint xとしたけど、
これがint x, *y, **zでも全部やることは同じ
&yしておいて*y = する
&zしておいて*z = する
732デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 21:03:22.53ID:9n40FStT0
もう1週間ぐらいこのプログラムとにらめっこしててそれなりに思いついたワードでググったりはしてるんですが
状況にあってると思えるものが見つからないんです
733デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 21:35:03.37ID:eVPhxI3Pa
一週間って。。。
才能無いか最低限の文法も理解してない気がする。
一回腰を据えて入門サイトなり入門書読んだ方がいい。
猫でもわかるC言語とかサンプル多くて良いぞ。
2017/07/07(金) 21:36:13.31ID:w6YiLhhJM
void InsertList(struct LIST **ptr); // ←このとき
newcell->nextptr=*ptr; // struct LIST *にstruct LIST *を代入している
*ptr=newcell; // struct LIST *にstruct LIST *を代入している

void InsertList(struct LIST *ptr); // ←こうしちゃったとき
newcell->nextptr=*ptr; // struct LIST *にstruct LISTを代入しようとしてエラー
*ptr=newcell; // struct LIST *にstruct LISTを代入しようとしてエラー

int a, *b, **c; // int, int *, int **
a = 728; // int
b = &a; // int *
c = &b; // int **
int d, *e, **f; // int, int *, int **
f = c; // int **
e = *c; // int *
d = **c; // int

変数の宣言と、式の中で*つけたり&つけたりする挙動については
自分でいろいろいじってみて納得いくまで確かめてみてほしい
2017/07/07(金) 21:39:10.74ID:w6YiLhhJM
逆ぅ!
誤:*ptr=newcell; // struct LIST *にstruct LISTを代入しようとしてエラー
正:*ptr=newcell; // struct LISTにstruct LIST *を代入しようとしてエラー
2017/07/07(金) 21:44:11.61ID:l2MEk1rK0
久々にCを見るとウザいな
737デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 22:02:46.24ID:9n40FStT0
型を合わせるために**ptrにしなければいけないところまでは解ったんですが
頭が悪いものですみません
**ptrだとstruct LIST *になって
*ptrだとstruct LIST になるところがよく解りません・・・
2017/07/07(金) 22:11:27.39ID:w6YiLhhJM
void foo(struct LIST **ptr) {
struct LIST **a = ptr; // struct LIST **型の変数aを宣言して、struct LIST **型の値を代入
struct LIST *b = *ptr; // struct LIST *型の変数bを宣言して、struct LIST *型の値を代入
struct LIST c = **ptr; // struct LIST 型の変数cを宣言して、struct LIST 型の値を代入
}
へんすーの宣言時にくっついてる*と、
へんすーが式の中にでてきてるときにくっついてる*は役割がべつだよ!
分けて考えたほうが多分理解しやすいよ!
2017/07/07(金) 22:12:23.98ID:TNY1f3mCd
変す〜
2017/07/07(金) 22:30:21.67ID:a0p8X5TA0
>>737
マジレスするとお前はCをあきらめたほうがいい。

C言語においてハマりポイントはポインタだと言われてはいるが、
実際は10秒で通過する奴と、永久にはまる奴という感じだ。スクリーニングに近い。
昔みたいにC言語しか選択肢がないのならともかく、現在は他の言語もある。
そこをすんなり理解出来ない奴がCにこだわってもどうせ付いていけない。

てか、あんまり真面目に話を聞いたことはないんだが、
ポインタが分からないって言う奴らは、こいつがはまっているケースじゃないよな?


ちなみに俺が疑問なのは関数ポインタの表記方法で、
俺の感覚は以下ブログ主と全く同じ。
http://fa11enprince.hatenablog.com/entry/2015/11/15/135056
内容は要するに以下。

現行:void (*signal(int sig, void (*func)(int))) (int);
希望:(void (*)(int)) signal(int sig, void (*func)(int));

何で現行の文法になってるのか分かる人いる?
昔、「入れ子だとマクロでも対応できる(キリッ」って聞いたんだけど、
以前考えたら上記「希望」でもマクロ対応出来る感じだったので、謎になってる。
2017/07/07(金) 22:47:31.37ID:a0p8X5TA0
一応ポインタ周りについてググってみた。

> C言語のポインタが難解とされる理由
> https://teratail.com/questions/9058

以前から言われており、上記URL内でも散見されるが、
アセンブラをCよりも先にやった連中は誰一人としてポインタで躓かない。
だからポインタで引っかかる奴は

・ポインタの物理イメージがつかめないから

だと俺は理解していて、そいつが引っかかっているデリファレンス周りではないはず。
ただ、共用体がない言語なら物理イメージを持たずにプログラミングできるから、
それで問題ないとも思う。だから他言語にしろって話にしてる。
742デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 22:51:15.64ID:9n40FStT0
>>738
void foo(struct LIST *ptr)だとどうなるんですか?
2017/07/07(金) 22:52:13.92ID:l2MEk1rK0
fooとかhogeとかウザい
2017/07/07(金) 22:54:49.07ID:UOx3xuNS0
>>707
そりゃsizediff_tじゃないか?
2017/07/07(金) 22:58:53.18ID:w6YiLhhJM
>>742
void foo(struct LIST *ptr) {
struct LIST **a = &ptr; // struct LIST **型の変数aを宣言して、struct LIST **型の値を代入
struct LIST *b = ptr; // struct LIST *型の変数bを宣言して、struct LIST *型の値を代入
struct LIST c = *ptr; // struct LIST 型の変数cを宣言して、struct LIST 型の値を代入
}
これでなんとなくわかった?
746デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 23:01:13.47ID:9n40FStT0
>>745
いえあまり・・・すみません・・・
747デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 23:02:33.34ID:9n40FStT0
>>745
あ、すみません>>738の引用かと思いました
ちょっとよく読んで考えて見ますすみません
2017/07/07(金) 23:04:45.62ID:w6YiLhhJM
int aとint *bとint **cが別の型なのは分かる?
わからないよね?
b = cの代入がエラーになるのが分からないんだよね?
749デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 23:13:41.64ID:9n40FStT0
>>748
型が違って代入できないのは指摘して頂いたのでわかるんですがどこで型が違ったのかがいまいちよく解らなくて
まぁもちろん関数の**ptrを*ptrにしたところで変わったんだと思うんですがどうして*をつけると型が変わったといえるのかがいまいちよく解らないんです
750デフォルトの名無しさん (ワッチョイ 97ea-okny)
垢版 |
2017/07/07(金) 23:16:17.01ID:q3zfwuJv0
最近VBAを勉強したんだけど、動作が遅く感じるわ
2017/07/07(金) 23:23:00.08ID:l2MEk1rK0
最近初めてCまで行った
2017/07/07(金) 23:24:40.63ID:a0p8X5TA0
>>745
多分君なりのポリシーがあるのだと思うのだけど、

struct LIST **a = &ptr; // (A)

よりも

struct LIST** a = &ptr; // (B)

の方が一般的には分かりやすいのではないかと。
そして宣言 int* i, j, k; でシンタックスエラーを出すまでが様式美。
と思ったけど、K&R確認したら全部(A)だったw
2017/07/07(金) 23:25:06.38ID:w6YiLhhJM
うんうん…うん?

int a; // int
int *b; // intへのポインタ 型
int **c; // intへのポインタへのポインタ 型
ここまでわかる?
ここまで変数宣言時に*くっつくと型が変わる例

(こっち側考えないで) = c; // intへのポインタへのポインタ 型
(こっち側考えないで) = *c; // intへのポインタ 型
(こっち側考えないで) = **c; // int 型
ここまでわかる?
ここまで、式の途中で変数に*くっついてると型が変わる例

これだけのこと
2017/07/07(金) 23:26:09.89ID:w6YiLhhJM
>>752
あー
そいうとこでもひっかかってるのかな彼は
2017/07/07(金) 23:34:50.66ID:a0p8X5TA0
>>754
いや、マジでCの文法は直感的じゃないんだよ。(プログラミング時の論理イメージとずれる)
俺的には(既に書いたが)以下のほうが良かったと思うよ。

(void (*)(int)) signal(int sig, void (*func)(int)); // これで関数ポインタ宣言させろ
int* p, q, r; // これは全部ポインタ宣言にさせろ

とはいえ限られた記号を使って上手くそれなりに整合性良く纏めてあるとは思うが。
2017/07/07(金) 23:37:20.26ID:EA9An3gB0
宣言で ポインタ型を示す時 *
ポインタの指し先の実体を求める時 *
変数のポインタを求める時 &

上2つが文法的にやっかいかな? 同じ記号使ってるし
757デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 23:38:35.07ID:9n40FStT0
>>753
多分その基本は理解できてると思います
ただstruct LIST *newcellがどうして**ptrと同格に扱われてるのかよく解らないというか・・・
*ptrでアドレスのやり取りできるんじゃないのって思ってしまうんです
でも実際は型が違う
どうして?っという感じです。
2017/07/07(金) 23:45:37.17ID:w6YiLhhJM
>>757
ポインタのことをアドレスだと考えるのはやめたほうが良い
ポインタは単なるアドレスなんかじゃないからね
そこには必ず型ってもんがあるの「〜へのポインタ」
ってなるからこそ色々できるんだけどその話は今は省略

> struct LIST *newcellがどうして**ptrと同格に扱われてる

同格に扱うってどういうこと?
759デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/07(金) 23:49:58.38ID:9n40FStT0
>>758
**ptrで対応しないといけないなら当然struct LIST *newcellも**型ということですよね?
struct LIST *newcellが**型というのが理解できません
2017/07/07(金) 23:53:32.79ID:a0p8X5TA0
>>759
君が分かってないのは以下。

void foo0(struct LIST **ptr) {struct LIST *b = *ptr;} // >>738
void foo1(struct LIST *ptr) {struct LIST *b = ptr;} // >>745
void foo2(struct LIST ptr) {struct LIST *b = &ptr;}

関数内のptrは関数宣言時(仮引数)の型を受け継ぐ。
つかここで引っかかっているようではマジでお先真っ暗だぞ。
2017/07/07(金) 23:59:10.17ID:EA9An3gB0
みてないけど >>728 の第一引数は 引数の書き換え結果を呼び出し元に伝えたいケースなんじゃないの?

int の値を受けて その値の1大きい値を返す

引数で受けて書き換え結果を戻り値で返すなら
 int func0(int arg) { return arg + 1; }

引数で受けて、引数の指し先を書き換えることで書き換え結果を呼び出し元に伝える
 void func1(int* arg) { *arg = (*arg)+1; }

※ なお Cには参照型というのがないので
※ void func2(int arg) { arg = arg+1; } としても呼び出し元には 1増えた値が伝わらない
int a = 1;
a = func0(a); printf("%d\n", a); // a = 2 となる
func1(&a); printf("%d\n", a); // a = 3 となる
func2(a);  printf("%d\n", a); // a = 3 のまま
2017/07/08(土) 00:09:59.34ID:cmJEhNfHM
>>759
> struct LIST *newcellも**型ということですよね?

違います

> struct LIST *newcellが**型というのが理解できません

違います

struct LIST *newcell の型は struct LIST * です
struct LIST **ptr の型は struct LIST ** です

*ptr=newcell

これは、左側の*に注目
何をしているかは、もうわかるよね?
>>757で分かってるって言ったよね自分で
2017/07/08(土) 00:21:10.89ID:t7BT1SeM0
誰も見てないのが笑える。俺もだがw

質問者は分かってないようだが、
> 「struct LIST」型の変数の値を「struct LIST *」型の変数に自動的に変換することはできない」 (>>728)
ってのは要するに & か * を忘れたときの典型的なエラーで、
隣に人がいたら「サーセンwwwww」とか言って誤魔化して10秒で修正して再コンパイルする、
ただのtypo。
みんなこれを知ってるから誰もソースなんて見に行きません。

newcell?知らんがな。ソース?見るまでもなく & か * 忘れてるだけだろ、さっさと直せ、って感じ。
とはいえ、エアプがいないのはいいことだね。
764デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/08(土) 00:30:18.82ID:P0Vqm6hU0
もしかしてvoid foo1(struct LIST *ptr) {struct LIST *b = ptr;}の場合に*ptrを使うとそれはアドレスを渡すのではなく
実数として渡してしまうから論理破綻しているということですか?
2017/07/08(土) 00:40:47.53ID:cmJEhNfHM
やっぱ>>756さんの言ってることが問題な気がする
そういえば俺も最初はそこで混乱あったような気がする

int a = 100;
int *b = &a; // 1) intへのポインタ型のbに、intへのポインタを代入している
*b = 200; // 2) bが指してたint型の領域に、200を代入
printf("%d %d", a, *b);

ここなんだよなぁ
1)と2)が見た目似てるくせにやってることがテラ違うという
なんか懐かしいわ
2017/07/08(土) 00:41:41.51ID:t7BT1SeM0
>>761
× > ※ なお Cには参照型というのがないので
○ 参照が必要な場合は、ポインタを使って明示的に参照を渡す

だね。そしてC++の「参照」とJava等の「参照型」の物理的意味が異なるから
余計に話がおかしくなり、辻褄を合わせるために
「参照の値渡し(キリッ」とか言い出すという。

とりあえず生Cで「参照」という言葉は使われてないでしょ。
それを持ち出すのは余計に混乱するだけ。
K&R確認してみたが、
「Fortranのようなcall by referenceとは違い」のところでしか出て来ない。
これのおかげかFortranは再帰できない糞言語だった。(と聞いている)
そんな糞とは違う、まさに「ザクとは違うのだよ、ザクとは」の文脈で使われてる。

見た目だけ参照型が欲しければtypedefすればいいだけ。
(普通は余計に分かりにくくなるからしないが)
それをここで持ち出す意味が分からんね。
2017/07/08(土) 00:46:30.43ID:t7BT1SeM0
>>764
エスパーするとイエス。
「実数」ではなく「実体」な。
2017/07/08(土) 00:47:46.49ID:gQ2FFwnX0
>>766
ちょっと横道

call by reference な引数型で デリファランスするのに特別な記号を必要としない
ってところに着目したかったのよー
2017/07/08(土) 00:50:34.05ID:YHFGbdic0
>>764
関数の引数で渡されるのは"同値のコピー"なのよ

void func1(int b) {...}
void func2(void) {
int a = 100;
func1(a);
}

func2からaを引数として関数func1に渡すと、func1では「aと同じ内容のコピーb」が用意される
func1内でどれだけbを書き換えようが所詮コピーなのでfunc1を抜ければbは破棄されaにはなんら影響がない
a自体を書き換えさせたいならaの内容ではなくaの場所を教える必要がある
それを実現するのがポインタで上の例なら

void func1(int *b) {...}
void func2(void) {
int a = 100;
func1(&a);
}

となりキミの当初の質問にも同じことが言える
*が何個重なろうが理由は同じ
2017/07/08(土) 01:02:46.45ID:t7BT1SeM0
つか質問者はC言語以外には何ができるんだ?

>>768
なんか噛み付いた感じになってすまんかった。
他言語ができれば「参照」の説明は意味はある。
この可能性を忘れていた。

ただまあ、Cはやっぱりその辺のところが古くて、
現実的に構造体の値渡しなんてほぼやらないし、(つか、必要性がない)
他言語みたいに「構造体は参照渡し」で固定してよかったと思うよ。
まだ黎明期でその辺のプログラミング作法自体がなかった時代だから無理ではあるが。
771デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/08(土) 01:26:26.98ID:P0Vqm6hU0
>>770
C言語が最初の言語です

>>760
>>762
>>767
>>769
ありがとうございます
なんとなくですが解ってきたような気がします
頭悪くてすみません
教えていただいたことをよく噛み砕けるまで考えてみようと思います
2017/07/08(土) 01:30:54.87ID:gQ2FFwnX0
>>765
ポインタは一気に初期化せず、宣言と代入に分離すれば、理解の為の見通しはよくなるかもね

int a=100;
int *b;

b = &a;
*b = 200;
2017/07/08(土) 01:43:27.53ID:zuW254gH0
>>728
俺もまだ見てないのだがw
**ptrを*ptrにしてもアドレスを渡すという役目はできます。その通りです。
void *ptrでもいいです。コンパイルエラーになるのはその後なのです。

あくまで処理に必要なのは struct LIST ** なので、キャストするなどすればコンパイルは通ります。
void *ptrで受けて struct LIST **_ptr = ptr; と代入して、以降_ptrを使うという方法もあります。
2017/07/08(土) 01:57:31.44ID:t7BT1SeM0
>>756
>>765
一応それは違うというほど違わなくて、だからって共通でいいのか?とも思うが、
そこを共通にしてしまっているから宗教論争になってる。
同様なものに「配列と配列へのポインタ」がある。

俺はやっぱり、

int* b = &a; // int*型(=intへのポインタ型)の変数 b に a のアドレスを代入

の方が好きだし、実際こう書く奴の方が多い。(と俺は思っている)
ただ、Cの文法的には765の記述が正しく、*はintではなくbと結合する。
ただし解釈は異なり、それはあくまでデリファレンスであり「宣言のときだけは別」ではない。

int a = 100;
int *b = &a; // 1回デリファレンスすると int になる b という変数に a のアドレスを代入
*b = 200; // bを1回デリファレンスしたもの(つまり100)に200を上書き

K&Rには*は逆参照演算子としか書いておらず、説明文は
> int *ip;
> は記号表現として、*ipという表現がintであることを表す。
となっている。
2017/07/08(土) 06:16:14.83ID:utlt5XjQ0
>>774
自分もC言語覚えたての頃は、「int *」型という風に見ていた。
ポインタがあるんだからポインタを表す型がある方がわかりやすかった

イントロダクションとしてはポインタ型があるとみなしていいと思う。
でも言語仕様はK&Rのとおりで、初心者になる頃には正しく
理解できるほうがいい
2017/07/08(土) 07:24:02.64ID:t7BT1SeM0
>>775
確認してみたが、ほとんどのサイトは int* p; ではなく int *p; だった。
有名どころではロベールが前者だが、他はほぼ全部後者。
C#は前者に仕様変更されている。
> int* p1, p2, p3; // Ok
> int *p1, *p2, *p3; // Invalid in C#
> https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types

特にint*型という理解で苦労した覚えはないが、(int *p, *q, *r;のみ例外)
文法的にはどうしても上記が引っかかるので説明サイトはほぼ全部後者になったのかな?
で、ヘルスバーグは糞だと判断して変更したと。
2017/07/08(土) 07:33:48.69ID:BPlXEDNj0
型に*を付けるのはC++の文化じゃないかな
Cだと識別子に付けるのが一般的だと思う
2017/07/08(土) 07:46:29.64ID:t7BT1SeM0
>>777
それは言えてるかも。ロベールはC++だし。linuxカーネルは int *p;だったし。
C++はテンプレートがあるから、Array<int*>とか書かざるを得ないからね。
2017/07/08(土) 08:10:56.15ID:hvS2v9rj0
int*p;
int * q;
は少数派か
2017/07/08(土) 09:38:58.20ID:cmJEhNfHM
>>772
それそれ
俺もあとで思ったよ
なぜ最初にその書き方を使って教えてあげられなかったのかと
まずは分離ありきだよね
2017/07/08(土) 09:53:29.46ID:t7BT1SeM0
>>772
>>780
ちなみにそれは何が分かりやすくなるんだ?

というか俺にはそれでどう勘違いしている奴を正しく導けるのか分からない。
ただし以下サイトでもそう言っているから、一部の人間に効果があるのは確実だとは思うが。
> ポインタの文法を説明するときに大切なことは、変数の宣言時初期化構文を見せないことです。
> http://pg-kura.hatenablog.com/entry/20120611/1339376977
2017/07/08(土) 13:09:09.14ID:/+Nzxl5ld
右辺値、左辺値の違いの分からんやつに
ポインタの正確な理解、運用は永遠に出来んよ。
2017/07/08(土) 13:22:39.20ID:8y6q1o6T0
ポインタの話は別としても、
変数を宣言時に初期化するのは良い方法だと思うが
2017/07/08(土) 13:48:34.76ID:I4XLIasbd
int* a, b; が int *a, *b;と等価だと思ってるやつw
C++の流儀はこの誤解を助長する
2017/07/08(土) 14:16:33.13ID:POxX89aN0
*がintにかかるか、aにかかるかだね
intにかかる方がシステマティックではあるよね
2017/07/08(土) 15:27:31.00ID:vtRSgpti0
>>785
宣言時と使用時で優先度が変わるのは好ましくない
2017/07/08(土) 15:49:17.90ID:lUvEvZ3o0
別物なんだから同じにする必要はないな。
788デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/08(土) 18:26:01.68ID:znuCL+sZ0
>>697は逃げたかw

# 俺はしつこい
789デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/08(土) 18:47:08.89ID:znuCL+sZ0
>>787
わざわざ同じでなくす必要はもっとない
2017/07/08(土) 18:48:02.85ID:/o9ObF5e0
>>787
そうやって文法を増やすのは好ましくない
791デフォルトの名無しさん (ワッチョイ 97c1-1B52)
垢版 |
2017/07/08(土) 19:20:19.10ID:UbbmKSpA0
昨晩はレスありがとうございました
戴いたレスを読み直しながらいろいろ考えていたら>>738>>745>>760の意味を理解できました
void foo(struct LIST *ptr) のとき*ptrを使うのは型が違うという意味もやっと理解できました
代入するときの型が合ってないという事がちゃんと理解できてなかったと思います
丁寧に説明していただいていたのにピントのズレたこと言っててすみませんでした
重ねてありがとうございました
2017/07/08(土) 19:40:16.15ID:t7BT1SeM0
>>782
右辺値左辺値ってC++が糞な部分にパッチ当てただけで、
Cやポインタには全く関係ないだろ。
793デフォルトの名無しさん (ワッチョイ 9f8f-gRQY)
垢版 |
2017/07/08(土) 19:47:16.06ID:HDF4cM220
>>792
Cに全く関係ないってのは言いすぎだけど、ポインタには関係ないのはその通り。
794デフォルトの名無しさん (ワッチョイ 9f8f-gRQY)
垢版 |
2017/07/08(土) 19:50:13.79ID:HDF4cM220
ん?
ああ、でもコンストラクタシステムがない以上、気にするところではないのか。
失礼、Cには確かに関係ないね。
2017/07/08(土) 20:40:01.20ID:cmJEhNfHM
>>791
       |
    / ̄ ̄ ̄\
  /       .\
 .|    .∧    |
 .|  ./川\  |
  \/┏┷┓\/
     。┃お┃。
  ゙ # ゚┃め┃; 。
   ; 。 ・┃で┃・ #
  。 ;゙ #┃と┃# 。
  ゙・# : ┃う┃。 ; 。
 .;:# ゙。゚┃!┃゚ 。 #
 ; 。;; ゙.:。┗┯┛。 # : #
  ∧_∧ │
. ( ´・ω・)│
 :/   つΦ
2017/07/08(土) 21:14:44.01ID:H/yQ/C3x0
>>788
だから何?って聞いてるんだけど w
逃げてるのは君の方だろ
797デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/08(土) 21:31:33.01ID:znuCL+sZ0
>>796
おまえの定義では、どうなっていることを「組み込まれている」というんだ?
たとえば、
float a = sizeof(int);
これの動作過程の途中に生じる整数型は、コンパイラには組み込まれていないのか?
だとするならば、コンパイラは標準変換の規定に「準拠」することができないぞ

さあ答えろ
2017/07/08(土) 22:10:39.54ID:H/yQ/C3x0
>>797
> # cl.exeではsize_tがいきなり使えるが
ってどや顔して恥の上塗してた奴もいたけど? w
2017/07/09(日) 05:03:16.31ID:W7Itegl80
組み込まれていない:stddef.hで定義されてるんだから組み込み型ではない
組み込まれてる:unsigned intかunsigned longかunsigned long longか知らんけど組み込まれてるだろ
ってことかすぃら?
800デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 05:59:52.53ID:DwPx7o2S0
>>798
ああ、そこにしか答えられないわけね
立派な答えだ

799がごく当たり前の答えを代わりに書いてくれているが
それすら答えられないようなゴミはCスレに出しゃばってくんな
2017/07/09(日) 06:59:17.53ID:ouwdb2hLM
で結局 >>800 は何を言いたかったんだ?
意図不明なコードで規格ガーってどや顔してたら>>799に一蹴された
としか見えないけど w
802デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 07:40:42.30ID:DwPx7o2S0
>>801
おまえさ、コードの意味が読めませんだなんて
このスレにおいて死ぬより恥ずかしいことを
わざわざ自己紹介しなくていいよ

799に助けて貰ってもその意味すらわかんねえんだろバーカ
2017/07/09(日) 13:14:16.68ID:Uu/MlKNRM
>>802
「意味」と「意図」の区別もつかないアホ w
チョロすぎるわ
2017/07/09(日) 14:30:35.01ID:1GYqbN7ba
アホだのバカだの子供みてーなケンカすんなw
805デフォルトの名無しさん (ワッチョイ 9f6e-4BC7)
垢版 |
2017/07/09(日) 15:09:59.91ID:ZJXpL8k20
見苦しい喧嘩して何になるんだ?
2017/07/09(日) 16:46:00.20ID:Uu/MlKNRM
>>804-805
恥を上塗りまくってる >>788 に言えば? w
807デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 18:27:56.89ID:DwPx7o2S0
>>803
いーや、おまえは意味がわかってない
だから、あんな簡単な問いにぐうの音も出なかった
誰が見ても明らかだよ
2017/07/09(日) 18:49:12.76ID:bCABOrL10
>>807
>>803
809デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 19:05:13.48ID:DwPx7o2S0
>>808
>>807
810デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 19:06:47.55ID:DwPx7o2S0
俺はしつこい

おまえの定義では、どうなっていることを「組み込まれている」というんだ?
たとえば、
float a = sizeof(int);
これの動作過程の途中に生じる整数型は、コンパイラには組み込まれていないのか?
だとするならば、コンパイラは標準変換の規定に「準拠」することができないぞ
2017/07/09(日) 19:08:38.13ID:6MYOcrZ9d
他でやれ
812デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 19:09:15.82ID:DwPx7o2S0
動作の実装と識別子の導入の区別もつかないアホが
どでかいブーメランほってやがるぜw
2017/07/09(日) 19:22:24.50ID:bCABOrL10
>>799が正解 ⇒ >>695が知ったかと言うのは誰の目にも明らかだしね
814デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 19:42:37.88ID:DwPx7o2S0
>>813
いいだろう、少しだけ相手してやる
どこでもいいから>>695に突っ込めることを噛みついてみな

国会で審議妨害ばかりしているクズ野党みたいな戯れ言じゃなく
技術的に意味のある内容で来い
2017/07/09(日) 19:52:27.11ID:bCABOrL10
日本語が理解できてないんだろうな...
出してきた「意図」もわからんものにどう突っ込めと w
sizeof が size_t 型の値を返すのは当たり前で float とかワケわからんこと言われても困惑するだけ
2017/07/09(日) 20:27:57.13ID:aZRl9YVa0
仮に c++ の typeid のようなものが実装されてたら何を返すんだろう?
size_t に割あたってる整数の型であって size_t そのものは返さない気もするが
817デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/09(日) 21:16:46.06ID:DwPx7o2S0
>>815
日本語が理解できてないのはおまえ
>>695におまえが意図不明という「コード」は含まれていない

空疎な言い訳で逃げ回るザマはたっぷり見せてもらったからもういいぜ
こっちも腹筋がそろそろヤバい
2017/07/10(月) 00:20:27.86ID:LlABZZSK0
おいQZごみ回答はやめとけ
2017/07/10(月) 05:01:56.54ID:3theqA1Q0
>>817
お前の意図が不明かどうかを判断するのは俺
マジで意図の意味がわかってないって言うオチかよ w
820デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/10(月) 05:25:51.74ID:JKtUlR/N0
>>819
技術的に意味のある話ができず
空疎な言い訳に終始しかできねえのを
人のせいにしてんじゃねえよゴミクズ
2017/07/10(月) 06:04:11.75ID:1stf4kaQM
アスペ同士の会話は訳がわからんな
822デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/10(月) 08:34:02.15ID:JKtUlR/N0
>>821
おまえも同類だ
2017/07/10(月) 09:14:14.93ID:ssjcNeI9M
はぁ?お前だろ。

ってか誰だよ?


オレは誰だよ?
2017/07/10(月) 09:23:56.47ID:NWwU0Zhtd
ここはしょうがくせいのたまりば?
2017/07/10(月) 09:32:25.86ID:FFzIEFLy0
あー!授業中に2chしたらいーけないんだー!
826デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/10(月) 09:46:21.35ID:JKtUlR/N0
>>823
技術的に意味のある話ができず
空疎な言い訳に終始しかできねえ
ゴミクズのお仲間、それがおまえだ
誰であろうがその特徴に違いはない
2017/07/10(月) 10:48:23.17ID:3theqA1Q0
技術的にと言う割りには>>815の後半とか>>816にはレスしないんだな w
>>695を誤魔化すためにワケわからんこと書いてうやむやにしようとしてるのはみんなわかってるから
828デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/10(月) 11:38:17.15ID:JKtUlR/N0
>>827
おまえが>>815>>816を書いたとでも言うのか?
他人の言葉を借りていきがっても、しょせんその程度だおまえは
2017/07/10(月) 11:59:47.48ID:uinqb5xX0
底が見えてきたな
830デフォルトの名無しさん (ワッチョイ ff1c-2mCk)
垢版 |
2017/07/10(月) 12:06:39.12ID:JKtUlR/N0
国会にもよく似たゴミが来てるぞ
http://snjpn.net/archives/24782
2017/07/11(火) 18:55:41.44ID:dSS1j36W0
[][Tebla][]

}

000-"Yob*RtStrike"[%Kil\]MO,fla>%$9999VLTS

001-GYORLith"0\R"/"ESUBA"%$%

HADO-"EM","L","O","NU"###END
832デフォルトの名無しさん (ワッチョイ 2a6c-S4qQ)
垢版 |
2017/07/13(木) 11:06:39.28ID:BCHZTwvD0
Makefileで、
.PHONY: doc
doc:
  doxygen
みたいに毎回.PHONY書くのあほっぽいんだけど、1行にならん?
833デフォルトの名無しさん (ワッチョイ 4a69-1jjp)
垢版 |
2017/07/13(木) 12:01:26.06ID:LenxTGcs0
C言語でインラインアセンブラが使える文法の違いってどこかに解説ありますか?
asm{}文の表記のしかたが違う
2017/07/13(木) 13:21:33.92ID:b1PvI/zld
コンパイラの説明書!
835デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/13(木) 16:20:17.23ID:PWiSD9vP0
ISO/IEC9899:2011で、asmについて書かれているのは、全文中でたったのこれだけ
J. 5.10 The asm keyword
The asm keyword may be used to insert assembly language directly into the translator output (6.8). The most common implementation is via a statement of the form:
asm ( character-string-literal );

asmはたぶんコンパイル結果にアセンブラを生中出しするために使われる
たいていこうなっている
asm(文字列リテラル);

つまりこれ以上はGNUやM$に聞けってこと
https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
https://msdn.microsoft.com/ja-jp/library/4ks26t93.aspx
2017/07/13(木) 17:03:33.50ID:32wk5maY0
そもそもの仕様として、
構造体のメンバーの参照に '.' と '->' を
使い分ける必要性がわからないんだけど、なぜ?

間接参照だと意識しろっていう教育的な意味以外思い付かん
2017/07/13(木) 17:24:51.23ID:9amqftWh0
(*hoge).piyo
hoge->piyo

どっちでもいいけど後者の方が簡単というだけの話
838デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/13(木) 18:47:04.29ID:PWiSD9vP0
そういうことじゃなく
Javaの参照ドットみたいなことに
なぜしなかったのか、だろ

ポインタを参照だと言い張るだけでいいのにと
2017/07/13(木) 20:54:14.63ID:VVeozCkKH
構造体は全部参照だということにしたいの?
それすると、宣言するときに領域確保して、
いらなくなったらガベコレするっていう機構を組み込んどく必要があって、
Cのシンプルさにまったく合わなくなる。
2017/07/13(木) 20:55:07.17ID:lX8cJUTX0
違う意味だから違う記号
2017/07/13(木) 21:00:00.33ID:5QMVP3z90
高橋麻奈も
おばさんになったな。
2017/07/13(木) 21:29:51.07ID:e9IZxggq0
>>832
毎回の意味がわからんな。
2017/07/13(木) 22:00:17.18ID:EExJF9140
>>838
>>839
参照云々はどーでもいいんだよ
左辺がポインタなら間接参照のコード吐いて
実体ならば直接参照のコード吐けばいいってだけのこと

すでに2つの演算子ありきの話になっていると思うぞ
844デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/13(木) 22:09:19.10ID:PWiSD9vP0
>>843
ドヤ顔で話の前提になってることをデバッグ出力してんじゃねえ
バグってる可能性があるのはおまえだけだ
2017/07/13(木) 22:11:04.90ID:WI/JuPuE0
ポインタなら->の方が分かりやすいでしょ
もしかして矢印って分からない?
2017/07/13(木) 22:11:58.75ID:LTIPW4bg0
-> で書いているのを . でも許したとして、コンパイラに不都合が出てくるんだろうか?

((struct foo*)0)->member ⇒ ((struct foo*)0).member

キャストの後の括弧がなくても通すと リテラルと繋がるから面倒をおこしそうだけども
(struct foo*)0->member ⇒ (struct foo*)0.member
そういうわけでもなさそうだし
2017/07/13(木) 22:13:53.71ID:lX8cJUTX0
グローバル変数から関数の引数にしたりするときに、置換が面倒だと思うことはある
C++だと山椒があるんでそういうことも少ない
2017/07/13(木) 22:40:18.99ID:5QMVP3z90
参照はピリリと辛いのさ
2017/07/13(木) 22:48:52.06ID:ZRvPs5t50
>>846
思想としてそこまで意識して書き、ソース上にもその痕跡を残せってことでしょ。
他言語で言うプロパティの良し悪しと同じ議論だよ。
好き嫌いはあれども、正しい or 間違いの結論はでない。

コンパイラはエラーを検出できてるんだから、
その場合は . を -> と読み替えろ、というルーチンを入れれば君が欲しいものは簡単に作れる。
でも誰も用意しなかった。それが事実だね。
2017/07/13(木) 23:28:37.17ID:EExJF9140
>>844
勝手に前提にするな〜
836は俺だ

>>846
そうそう、仕様として何か不都合があるのかという話がしたかったんだ

>>849
だから836で「教育的な意味」と書いている
結局言語仕様としてこうしないと問題がある訳じゃなくて
「教育的な意味」だけのことでいいんだな

>>847
きっかけはまさにそれ
書き換えめんどくせーから始まって、
コンパイラが困るのかと
色々なパターンを考えてみたんだけど
困るパターンを見つけられなかったんで
こんな話を始めたんだよ
2017/07/14(金) 00:02:31.73ID:jsZNOhnp0
>>850
> 「教育的な意味」だけのことでいいんだな
>>839に答えは既に書いてあるだろ。アホなのか?
具体的にはスタック上に構造体を取って高速化する手法が使えなくなるんだよ。

(大抵の他言語では記述方法自体が用意されていない。
VC++/CLIではvalue型が用意されていて効果があることになっている。
が、ろくな説明が見当たらないorz)
古いが以下。
http://www.eonet.ne.jp/~maeda/cpp/value.htm
MS公式は以下。全く説明する気が無いw
https://msdn.microsoft.com/ja-jp/library/ke3a209d.aspx

というか、そこらへんが面倒だというのならJavaやC#使えって話でしかなく、
今の時代にC使うのならそこまで含めてチューニングする気で書け、でしかない。
2017/07/14(金) 00:16:04.99ID:1+0wIQjnM
839だけど >>851 は周回遅れ。
構造体へのポインタでも、構造体でも、. を使う文法にできるんじゃねっていう主張。
今のところ俺もそれへの具体的な反論を用意できていない。
「教育的」っていうのは違うと思うがな。
2017/07/14(金) 00:35:26.21ID:jsZNOhnp0
>>852
いやみりゃ分かるが 851=849で、俺もそれは否定しない。
ただ、確かに851は間違いだったわ。
確保時の文法が異なっていて、それで十分だから、その後は区別する必要はないね。

見た目、直接か間接か分かるようにしろってことだろ。
2017/07/14(金) 05:37:38.18ID:JCM3Qqhn0
ポインタなら(*foo).member と書くべきのところ->で書けるようにしたってことだけじゃないの?
糖衣構文的なオプションだろう

つうか、どちらもドット演算子に統一した場合、
ポインタなのにデリファレンスしないで値にアクセスできる仕様はCの文法としておかしくね?
2017/07/14(金) 05:52:17.16ID:JCM3Qqhn0
逆にドット演算子の意味を考えてみると、これ変数からのオフセットだろ
2017/07/14(金) 06:19:15.44ID:JCM3Qqhn0
デリファレンスしてもしなくても意味が同じという仕様にした場合、
構造体のポインタのポインタだともっとおかしなことになる
やっぱりダメなんだよw
2017/07/14(金) 06:56:35.87ID:ES2lu6HJM
その反論じゃダメージゼロだ
2017/07/14(金) 07:00:49.03ID:8xomc53MM
>>843
struct s { int *a; };
void f(struct s *sp){
int b = 1;
sp.a = &b; /* 今の文法なら sp->a = &b; */
x = sp.a;
って書かれたら x には b へのポインタが入るの?
それとも 1 が入るの?
まさか右辺の型に依存して変わるとか?
2017/07/14(金) 07:45:04.78ID:OkthEzhE0
最初Cのソース見たとき -> って記述がなんのジョークかと思ったわ。
2017/07/14(金) 07:47:03.66ID:JCM3Qqhn0
>>857
構造体Fooのポインタをメンバーに持つ構造体Fooのポインタで考えてみ
ドットでアクセスするのはどっちのメンバー?
2017/07/14(金) 07:52:21.63ID:JCM3Qqhn0
いや問題はそこじゃないな
862デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/14(金) 08:05:49.17ID:ZvHE7cBu0
>>854が最後にいいこと言った
>>856の指摘が読めてない>>857はIQで30くらい差があるんだろうな
2017/07/14(金) 08:06:19.82ID:OlhrA2fz0
(*pa).m と a->m
(*pa+i) と a[i]

お好きな方をどうぞ
2017/07/14(金) 09:01:40.73ID:i0uGqEt60
>>854
関数へのポインタは(*func)()とデリファレンスしなければいけないのに
func()と書けるようにしたのでおかしくはない
865デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/14(金) 10:09:02.17ID:ZvHE7cBu0
>>863
ミスってるぞ

>>864
sizeof func != sizeof *func
2017/07/14(金) 10:36:06.28ID:7SJq6nEP0
字下げスタイルについて質問です
現在職業訓練校で習っているのですがそこの先生が
「プロはみんなこっち(K&R)だから。最近の教科書はこういうの(オールマン)増えてるけど、初心者向けの本書いてる人はそもそもプログラマじゃないから……」と。
自分がオールマン好きなのと、本を書いてくれる人たちをばかにするような言い方でちょっとむっとしたのですが、実際にK&Rばかりなんでしょうか
2017/07/14(金) 10:58:17.61ID:XOCK9tWfH
>>866
自分一人で書くならプロだろうが何だろうが自分の好みを貫けばいい。
チームならそのチームのスタイルに合わせるのがプロ。
多数派は多分K&R。俺の好みもそう。
2017/07/14(金) 11:03:48.20ID:XOCK9tWfH
>>862
IQ180のお前さんならコード例一瞬で出せそうだからよろしく。
2017/07/14(金) 12:28:17.80ID:i0uGqEt60
>>865
コンパイラが忖度してデリファレンスしてくれるって事じゃん
2017/07/14(金) 13:06:11.17ID:XJoggiB0M
>>866
今は他言語含めてK&Rが主流。昔の初心者本にオールマンスタイルで書かれてるのがあって
自分も最初は括弧の対応が分かりやすいからそれを使ってたけど
今は使わなくなった。括弧の対応なんて見れば分かるので重要じゃなくなる
2017/07/14(金) 13:16:54.77ID:q7yAZvho0
sizeof 関数 って何ぞ?
872デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/14(金) 14:28:28.54ID:ZvHE7cBu0
>>869
void (**f)();
f(); //error
2017/07/14(金) 15:00:47.41ID:JCM3Qqhn0
>>864
C FAQ 4.12
http://www.kouno.jp/home/c_faq/c4.html#12

配列名と関数名が特殊なのは、ポインタに成り下がるからなんだそうだ
構造体はどうだろうか?
874デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/14(金) 15:04:40.25ID:ZvHE7cBu0
>>866
その「先生」もプログラマじゃなさそうに聞こえる
どこのチームに入っても「こいつのクセうぜえ」と思われたらあかん
K&Rだのオールマンだのと言うが純粋なK&Rや純粋なオールマンはむしろ少数派で
たいていなにがしか方言があり、それを無視して原理主義に走ると
標準語を使っているはずの自分のほうが訛っていることにされてしまう
保護色ができないやつがプログラマの世間を知っているのか疑わしい
もしくは、元プログラマでも引退してからずいぶん長いとかな


プログラマ以外の世間でも「前の会社では」が口癖の新入りが干されるのと同じで
狭い世界の狭い正義にとらわれたスッパマンに居場所はない
2017/07/14(金) 15:11:15.53ID:UhIUjxkr0
そこのコーディング規約に従うまで

ただ、古典だけあってK&Rスタイルに近くなると話が早くなる
2017/07/14(金) 15:54:44.39ID:TDDe5YT10
c#はオールマンだし、どっちでもいいな
2017/07/14(金) 18:24:36.67ID:TDGI45F00
え?C#はオールマンなの?
2017/07/14(金) 19:07:42.77ID:pMddghpW0
コーディングスタイルなんて、GNUスタイルとかいう汚物じゃなければ何でもいいわ
2017/07/14(金) 19:09:37.89ID:TDGI45F00
あなたの色に染まります!
2017/07/14(金) 19:46:42.57ID:g8QLqbc9M
>>877
そうらしい

C#
マイクロソフトはC# のコーディング規則を発表しており、これは、BSD/オールマンのスタイルに基づいている。
https://ja.m.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB
881デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/14(金) 21:40:14.77ID:ZvHE7cBu0
汚物は消毒だ〜!!
882デフォルトの名無しさん (エーイモ SE9e-RQIi)
垢版 |
2017/07/15(土) 15:35:51.02ID:mwrVMnVyE
clangにはソースコードを解析してコードを補完する機能がありますけど
gccにはこういう機能はないのでしょうか?
2017/07/15(土) 16:17:52.28ID:4RmHy8z30
>>858
> x には b へのポインタが入るの?
> それとも 1 が入るの?
その仕様にした場合は、 x の型によって決まる。
多分、結局のところは、float->doubleのような暗黙のキャスト、
structPtr* -> *structPtr を許すかどうかだろう。
許しても大した問題はないように思えるが。

ポインタを使える最近の言語はGoとRustか?
詳しい奴がいれば聞いてみればいいのではないかな。
C言語で問題だった点は当然改修されているだろうし。
2017/07/15(土) 16:57:34.95ID:hu77KrcYM
>>883
> その仕様にした場合は、 x の型によって決まる
struct s { size_t *a; size_t *b; };
void f(struct s *sp){
size_t c[] = {1, 2};
sp.a = &c[0];
sp.b = &c[1];
x = sp.b - sp.a;
ってされたらどうするおつもり?
デリファレンスしてもしなくても結果は size_t だよ
2017/07/15(土) 17:11:06.39ID:4RmHy8z30
>>884
だからxの宣言によって決まるだろ。
Cにはvarはないんだよアホ。
お前根本的に型を分かってないだろ。
886デフォルトの名無しさん (ワッチョイ f146-I8+U)
垢版 |
2017/07/15(土) 17:16:20.81ID:pcaRmStc0
>>881
聞いたことのあるセリフだなあ?
何だっけ?
北斗の拳?
2017/07/15(土) 17:16:23.73ID:G5lsIkPM0
これだからなスクリプタは
スクリプタがプログラマ気取るなよと
トホホ
2017/07/15(土) 17:27:16.03ID:jhhap/jh0
>>885
アホなの?
size_t x;
って宣言されててもどっちの解釈もできるだろ
って話だぞ
2017/07/15(土) 17:42:18.56ID:jg2H7hGL0
大元の話で . 演算をポインタに対して適用したら ->とみなすという仕様なら矛盾はないと思うが、
>>843で「左辺が」とか書いたんで話がおかしくなっている気がする。
2017/07/15(土) 17:57:08.70ID:4RmHy8z30
>>889
違うね。
>>888は「右辺を評価する際、 . を . とみなすか -> とみなすか区別できない。なぜならば結果が同じだからだキリッ」
という論理らしいが、そもそもそんな仕様の言語なんて無い。スクリプト言語ですらも。
そもそも着想の仕方がおかしいだろ。エアプだからだよ。

エアプはマジで死ね。
2017/07/15(土) 18:03:19.98ID:Boc3n4O+0
ドットに統一した場合、コードレビューでNULLチェックを見逃す可能性がある
こっちの問題の方が大きいかもしれんな
2017/07/15(土) 18:56:38.12ID:Ok1a2C+90
諸先輩方ご意見ありがとうございました
とりあえずその場所場所でのコーディングスタイルに合わせることが大事なのはわかりました
2017/07/15(土) 19:20:07.01ID:jhhap/jh0
>>890
> そもそもそんな仕様の言語なんて無い。
そりゃアホの子の>>843がない知恵絞って考えた言語仕様だし
今更何を言ってるんだよって話だが w
2017/07/15(土) 20:28:46.13ID:4RmHy8z30
>>891
-> を廃止して . に統一するのならその手の型チェックは緩くなる。
これは結局のところ、他言語でもなされている議論と同じで、
「静的チェックのための記述をどこまで許容するか」でしかない。
俺はCなら厳しい方が似合っていると思うが。

それはさておき、具体的にそのケースならnull許容型、って奴だろう。
他言語でも死ぬほど議論されているからググれ。
2017/07/15(土) 22:24:26.68ID:Z+b63Gri0
>>886
画像検索汁
2017/07/16(日) 00:35:41.14ID:JuGvxIE40
>>894
C言語とは水準が違いすぎる話なのでナンセンスというのが結論だろう
NULL許容で書けたところで、実行時にはNULLチェックするわけだから
2017/07/16(日) 01:49:05.19ID:AkX0kyqa0
>>896
> NULL許容で書けたところで、実行時にはNULLチェックするわけだから
いや、そうじゃない。
というかそっちの議論も多いようだから、誤解するのも分かるんだが。
以下を読むのがいいだろう。
> null許容参照型
> http://www.buildinsider.net/column/iwanaga-nobuyuki/012

Cに対して導入するとしたら以下か。
1. 「null非許容のポインタ」を文法的に用意する。
2. 「null非許容のポインタ」にはNULLは代入できない。(SyntaxError)
3. 「null非許容のポインタ」に「従来のポインタ」の値を代入するには明示的なキャストが必要。
これでヌルポを静的に検出できるようになる。
「null非許容のポインタ」に関しては実行時のNULLチェックは必要ない。

問題は3で、C++ならdynamic_castのみとして例外を投げればいいのだが、
Cの場合これは無理なので、
・リンター等でキャスト直前にNULLチェックしているかを検出する
・明示的キャストをマクロ等でNULLチェックのインライン関数等に置き換える
等の対策が必要にはなるが、
それでもNULLに対してクリーン/ダーティな区画を文法的に分離できるようになるので、
今よりはだいぶマシにはなる。

とはいえこれはbetterCとしてC++を使うのなら現行のC++でも似たようなことは十分できる。
だからわざわざ新文法が必要か?というのと、他と同様に、
静的チェック「だけ」のための新文法を導入する価値があるのか?
という話にはなる。
そして . と -> の話に戻すなら、
「『null非許容型の』struct* から *structへの暗黙的キャストを認める」
という仕様なら、そちらの危惧している部分については回避できることになる。
2017/07/16(日) 07:21:30.62ID:xeCnao79M
>>889
だから . 演算子を適用した結果がポインタならどうするんだ?
って指摘されてるだろ
ID:4RmHy8z30 はレスできなくなって
> エアプはマジで死ね。
とか恥ずかしい捨て台詞で逃げてるけど w
2017/07/16(日) 07:28:16.81ID:xeCnao79M
>>897
> 問題は3で、C++ならdynamic_castのみとして例外を投げればいいのだが、
> Cの場合これは無理なので、
> ・リンター等でキャスト直前にNULLチェックしているかを検出する
> ・明示的キャストをマクロ等でNULLチェックのインライン関数等に置き換える
> 等の対策が必要にはなるが、
そんなアホな対策は要らんわ
キャストまでしてNULL非許容の変数にNULL入れる奴はわかってやってるんだからそのまま入れてくれればいい
それに起因するエラーはプログラマの責任
C言語ってそう言う言語だろ
2017/07/16(日) 07:41:24.58ID:H6W6/XNn0
>>898
>だから . 演算子を適用した結果がポインタならどうするんだ?

. 演算の対象がポインタかそうでないかで分かれるだけで、演算の結果は
それがポインタならポインタとして扱えばいいだけだろ。何か問題あるのか?
2017/07/16(日) 08:14:36.33ID:xeCnao79M
>>900
なら>>858のケースで値が欲しいときはどうするんだい?
まあ新しい演算子を追加するのか?
2017/07/16(日) 08:28:51.97ID:MBQ46mKu0
*sp.aで取れるじゃん
2017/07/16(日) 08:32:10.19ID:H6W6/XNn0
>>858で x に入るのはbへのポインタとしか解釈しようがないと思うが、値とはどれのことを言っている?
bの値の1が欲しいなら普通に x = *sp.a; でいいだろ。
2017/07/16(日) 09:37:42.33ID:xeCnao79M
>>902-903
要するに構造体へのポインタに対する . 演算子は今の -> 演算子と見なせってことね
>>883みたいな奴がいるから念のために確認しただけ
仕様として矛盾はないと思うけど
struct s sl;
struct s *sp;
x = *sl.a;
x = *sp.a;
と統一的に書けるから便利と思うか
x = *sl.a;
x = *sp->a;
とたいして変わらんと思うかは人それぞれだと思う
2017/07/16(日) 09:51:29.40ID:H6W6/XNn0
要するにも何も、>>889でそう書いているんだが。
で、>>898が「念のために確認しただけ」なわけ?
2017/07/16(日) 09:59:26.34ID:JuGvxIE40
要するに、(*p).m を p.m と書けるということ
つまりデリファレンスの階層を一個省略しようってことで、
格段便利ってわけでもないし、かえってややこしいかもなw

これ、ポインタが何段になっても p.m って書いて整合性取れるかい?
2017/07/16(日) 10:06:14.91ID:AkX0kyqa0
>>902-903
だからエアプなんだって。話の通じなさ具合がおかしいだろ。

>>899もそうだ。
> キャストまでしてNULL非許容の変数にNULL入れる奴はわかってやってるんだからそのまま入れてくれればいい
Cの場合はmallocの失敗がNULLになるんだから、これとかありえないだろ。
Cはnullありき、キャストありきで世界が構築されているから、
ヌルポ対策を静的にやりたいのならキャストも含めないと使い物にならない。
しかしエアプだからこれが分からない。マジでウザいから死ね。

> C言語ってそう言う言語だろ
これも違う。
C言語は静的な対策を拒否してない。動的な対策は全面拒否だが。
つっても通じないとは思うが。

>>904
> struct s sl;
> x = *sl.a;
エアプマジ死ねよ

というか、エアプがここに来る意味が俺には分からないのだが。
こいつらどの種のキチガイなの?
2017/07/16(日) 10:11:57.19ID:xeCnao79M
>>905
だからアホがいるから蒸し返されないように念のための確認してるんだよ
匿名掲示板だから>>890みたいな奴すらいるんだぞ
2017/07/16(日) 10:12:48.56ID:xeCnao79M
って書いてるそばから現れたわ w
2017/07/16(日) 10:14:08.60ID:xeCnao79M
>>906
> これ、ポインタが何段になっても p.m って書いて整合性取れるかい?
それは大丈夫だと思う
2017/07/16(日) 10:21:16.17ID:JuGvxIE40
>>910
俺はまだそこがちょっとひっかかるんだよな
デリファレンスが一個ずれるだけなら意味ないと思うしね
時間ができたら検証してみるよ
2017/07/16(日) 10:33:31.23ID:AkX0kyqa0
>>906
> これ、ポインタが何段になっても p.m って書いて整合性取れるかい?
実体になるまでデリファレンスしろ、というだけだから、出来なくはないと思うが。

> 格段便利ってわけでもないし、かえってややこしいかもなw
まあCがほぼ完成しているからな。導入する価値があるか微妙というのは同意。
> Cが見事にこなしていることは、全く"出来るだけシンプルにせよ、
> しかし、それ以上シンプルにするな"をしていることだ。
> そして、そのことがCを素晴らしいものにしている。言語はパワフルでありながら、ほぼ最小である。
> by Linus Torvalds
> https://srad.jp/~taro-nishino/journal/509450/


俺が思うに、Cに必要なのは階層(≒関数内関数)だよ。一部拡張されているようではあるが。
最近別言語だがCスタイルの記述(グローバル+関数、非オブジェクト指向)を読んだことがあって、
22K行のコードだが初見で簡単に目的のコードを探し当てられて、軽く衝撃だった。
Cが読みにくいのは100-500行のファイルで細切れになっているからであって、
あれ、設計者が分かりやすい順にcatしてくれていれば衝撃的に読みやすいことに気づいた。
2017/07/16(日) 10:47:18.34ID:AkX0kyqa0
あと、前方宣言必須というのも糞だ。
というか、今だにあれを放置している理由がよく分からない。

あれが無ければトップダウンで記述できるのでさらさら読める。
あれのおかげで下から構築しないといけないので、(include等つかって擬似的に回避できるが)
詳細まで確認する必要が無いときにも読まなくてもいい関数を読まされる事になる。

元々「世界の全てを把握して、絶対神として振舞え」という言語ではあるから、
「読みたくも無い関数を読まされたくねー」オブジェクト指向感性とは合わないが、
今更全てを把握できるほど世界は小さくないし、その必要が無いことも多い。
色々手抜きできる言語があることを知ってしまってからは、もっと手抜きさせてくれよーとは思う。
2017/07/16(日) 12:56:07.96ID:G64lD0g30
>>913
前方参照は確かにどうかと思うが、前方参照の制限が解消されたからといって読みやすさが改善するとは思えないね
現状でも底から読んでいけばいいだけなのではないか?
読みやすさは…識別子を日本語で書くのがよさそうだが
2017/07/16(日) 18:30:50.90ID:dVrh8pbL0
typedet struct
{
    void ( *reset_func )( void );
    unsigned long initial_stack;
    void ( *divide_by_zero )( void );
    ・・・
}    intvec_t;

#define INTVEC  ( *( intvec_t* )0 )
916デフォルトの名無しさん (ワッチョイ f146-I8+U)
垢版 |
2017/07/16(日) 21:14:38.36ID:TI5o59vg0
> 要するに、(*p).m を p.m と書けるということ

これ、できるできない以前に、初心者にきついな。
ルールを覚えるのは楽だけれど、例外事項が増えてくると、結局暗記になっちゃうからなあ。
917デフォルトの名無しさん (ワッチョイ 7d33-RIgB)
垢版 |
2017/07/16(日) 21:46:19.69ID:aJG+vjk10
ts
2017/07/16(日) 23:15:41.79ID:kT8dsikx0
>>913
プロトタイプ宣言というのがあってだね、それを宣言すればトップダウンで書ける。
919デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/17(月) 03:39:18.28ID:woO8V6Ze0
>>918
だよな
トップダウンなだけでなく
関数の一覧ができているという点でも
>>913が書いていそうな糞コードのDBL_MAX倍マシ
2017/07/17(月) 05:22:39.76ID:6JtF0HSC0
>>918
>>913はそれを知らないで書いてたのか?とするとかなりの初心者ということになるが。
2017/07/17(月) 05:32:30.17ID:6JtF0HSC0
まあしかし俺は同じファイル内にあるにも関わらずプロトタイプ宣言入れないと
わかってくれないのが嫌で使われる個所よりも上に書いちゃうけどな。
同じファイル内なんだからわかって欲しいものではある。

そういや PASCAL なんかも前方参照しかなかったような気がするな。
あの当時の言語はこういうの当たり前だったのかな。
PASCALなんかだとわざわざそういう思想で作られたって感じもするが。
Cだと手抜いただけのように見える。w
922デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/17(月) 06:51:56.93ID:woO8V6Ze0
うん、Cのバヤイは確信的な手抜きだな
2017/07/17(月) 07:49:13.30ID:Dn7+fEGp0
ほー PASCALが前方参照しかないとか初めて聞いたわ

ID:kT8dsikx0とID:6JtF0HSC0の次の活躍に期待だな
2017/07/17(月) 07:57:41.59ID:HedtDN7o0
何時、前後を覚えるのかな?
2017/07/17(月) 08:01:01.05ID:n9t4u9yj0
>>921
Pascal は LL(1)言語としてつくってあり、ワンパスでパースできる、その意地があるんだね
2017/07/17(月) 08:11:52.63ID:PKmAGp8M0
Cもワンパスのため前方宣言必須ということのようだが、
一回舐めて拾うだけでいいんだし、今時こだわる必要も無いだろう
ヘッダに出した公開インターフェースは先、モジュール内プライベートはその下がわかりやすいよな
2017/07/17(月) 08:13:23.74ID:n9t4u9yj0
>>926
C はプリプロを除いてもワンパスにはならないと思う
2017/07/17(月) 08:53:08.22ID:U2FIHXXv0
>>918
>>913がプロトタイプ宣言知ってるかどうかは知らんけど同じ情報を二ヵ所に書かないといけないのはいかがなものかと思う
言語仕様を決めた当時はI/Oも遅いので高々数回のパースでコンパイルする必要あったからしょうがないとは思うが

>>921
Pascalは1-Passでビルドできるように言語仕様を決めていた
なので当初はモジュールみたいな概念もなかった
2017/07/17(月) 08:57:46.36ID:LYlgQVUQ0
>>920
さすがに知っているぞ。
俺は君と同様それはほぼ使わないというだけで。
というか、あの「事前に分かってないと使えない」事は正確には何と言うんだ?
「前方宣言必須」というのはどうも「前方宣言」自体が別の用語らしいのでまずかったようだ。

>>921
Cの場合、1パスコンパイルするためのものだ。
Cは紙テープ時代からある。
Wikiによると10文字/秒らしいので、1KBのファイルなら読み取りに1分40秒かかる。
これで2パスされると死ねるから、1パスでいけるように、
あらかじめ人間が順番を整えとけ(=機械に人間が合わせろ)というものだ。
どう考えても今はそんな時代じゃないだろ。
2パスに変更して「後方参照」(という用語でいいのか?)出来るようにすればいいだけだ。
紙テープの時代なら時代の要請だが、HDDの時代にこれを大事に守る理由は無い。
だから新しい全ての言語はこの制限は無い。必要ないからだ。
(ただしPythonを除く。この点だけでもPythonは糞だと断定できる)

ところがな、>>919みたいな老害は、
できる理由を見つけてきて頑なに現状維持しようとするものだ。
Cの場合は、確かに下から構築していけばプロトタイプ宣言は通常全く使わずに構築できる。
だからそれが作法になってしまってるだろ。
Pythonの場合はおそらくこれ、つまり、下からの構築を強制させるためにあえて採用してないのだと思う。

しかしな、他人のコードを一から読むとき、下から読む必要はなく、上から読んだほうが楽だ。
(正確には中レベルから。一番上のレベルも読む必要ないから)
お前らがそれに気づけてないのだとしたら、お前らはCしか読んでないからだ。
というか俺も最近までそうだったのだが。
2017/07/17(月) 08:58:08.57ID:LYlgQVUQ0
既に書いたが、Cの読みにくさは、ファイルが細切れになっていることもある。
これはOOPも別の意味で同罪で、「で、その処理は具体的にはどこに書いてあるんですかね?」は常だ。
だからそんなものだと思っているのだと思う。

ところが最近、後方参照できる言語でCスタイルで書かれているコードを読んで戦慄した。
圧倒的に読みやすいのだ。(OOPよりも)
上からスクロールしていくだけで、読み飛ばしていいか、そうでないか、はっきりと分かった。
ところが肝心のCにはこの類のソースコードは存在しないんだよ。後方参照禁止だから。

後方参照が出来るようになれば、設計者が自由に関数を配置できるようになる。
当然、一番分かりやすいように並べることになる。
今のCにはその自由度が無いんだよ。人間が機械に合わせる仕様だから。
「プロトタイプ宣言」とかいう二度手間をやらないと、最もわかりやすい順に並べられない。
だから今のCソースは基本的に「分かりにくい」。
少なくとも後方参照できればもっとわかりやすくなる方向でしかない。
だからいまだにそれを放置しているのはマジで糞だって事。
老害的には「下から構築しろ」という教育効果を主張するのだろうが、そんなのは要らない。
2017/07/17(月) 08:59:15.27ID:U2FIHXXv0
>>927
シングルパスでダメな構文あったっけ?
2017/07/17(月) 09:03:20.21ID:iqtGzeji0
ここで議論している人の 前方宣言 後方参照 の定義が一致しているのか気になる。
2017/07/17(月) 09:07:49.80ID:U2FIHXXv0
>>929
> (ただしPythonを除く。この点だけでもPythonは糞だと断定できる)
Python の def が「実行文」であることも知らんのだろうな w
2017/07/17(月) 09:11:05.59ID:LYlgQVUQ0
>>932
というか今更その辺の用語は無いんだよ。理由は他言語では必要ないから。
「後方参照」も正規表現でしか使われてないし、
しかもあれって「後方」よりも「バッファ」と言え、という類のものであるし。

とりあえず俺の定義は、
前方宣言必須:どうやらこれは俺の誤用だったすまん。「事前に宣言しておかないと使えない」の意で使ってた
後方参照:後で定義されている関数を使うこと
だね。これが適切かは分からんが、Cやってる奴ならあーはいはい程度には通じるとは思う。
2017/07/17(月) 09:14:46.40ID:LYlgQVUQ0
>>933
知らんね。
つかあれ、そうなのか。だとすると動的に構築するから致し方なし、って奴か。
JavaScriptが糞な点と同じだな。

まあどの道2パスすれば回避できるだけのことを、なぜやらん?ってのはある。
Pythonは聞けば聞くほど糞なので、俺はやってない。
2017/07/17(月) 09:19:12.83ID:PKmAGp8M0
>>927,931
たとえばgotoのラベルは下でもいいよね
たかだか関数内限定ではあるけど

>>932,934
今話してる文脈は「Cの前方宣言必須について」でいいんじゃないの?
2017/07/17(月) 09:39:52.04ID:PKmAGp8M0
引数が無い宣言のこと特別に「前方宣言」と言うのか
知らんかったわw
http://wisdom.sak ura.ne.jp/programming/c/c27.html
2017/07/17(月) 09:50:00.72ID:U2FIHXXv0
>>935
知らないなら黙ってりゃいいのに
知ったかはこれだから...
2017/07/17(月) 09:54:21.13ID:U2FIHXXv0
>>936
Pascalはラベルに数値が(と言うか数値しか)使えないこととコンパイラを単純にするためにlabel文で宣言が要るけど、コンパイラの実装としては必須じゃないでしょ
goto文の飛び先はラベル見つけた時点で入れればいいだけだし
2017/07/17(月) 10:26:39.93ID:+Y9zLnEF0
K&Rの時代じゃあるまいし、前方宣言を原型形式でない関数宣言子と捉える奴なんていねーだろ
プロトタイプ宣言とか言い出した>>918は例外として
2017/07/17(月) 10:42:28.15ID:LYlgQVUQ0
>>938
お前はPython信者なのか?ならばもう一度言ってやるよ。Pythonはそこも糞だ。

Pythonはdefで関数宣言を行い、それがそのままオブジェクトになる仕様らしい。
つまりそこで暗黙の代入があるから、後方参照できないとの理由だ。まさに糞だ。

JavaScriptの場合は、これらの宣言を分けている。つまり、
function func0(){console.log('func0');} // (A) console.logはCでいうprintf
var func1 = function(){console.log('func1');}; // (B)
ここでfunc0は後方参照できる。つまりスコープに入っていればいつでも使える。
func1は関数ポインタであり、代入以降でしか使えない。
これが妥当な仕様だ。
関数ポインタは再代入可能だから、順に処理する必要があるからだ。

Cの場合、関数ポインタへの代入は自前で行うわけだから、
コンパイラの努力だけで後方参照できないという制限を解除することが出来る。
いまだにやってないのはただの手抜きというよりも確信犯だろうが。

なおJavaScriptでもPythonと同様に関数はオブジェクトになるのだが、
要するに「スコープ内で先に処理して再代入禁止にしておくべきfunction(A)」と
「順に処理するべき関数ポインタ(B)」を明示的に分離して記述できるだけだ。
みたところPythonには(A)しかなさそうなので、技術的に出来ない理由は無い。
この点についてはCも同様に糞だが、時代の要請があったという理由はある。
Pythonは本当に何の意味も無く制限をつけている、ただの糞だ。
2017/07/17(月) 10:49:45.35ID:U2FIHXXv0
知ったかが慌ててググって的はずれの長文乙
Python 関数ポインタ
辺りでググる程度の知恵もないのが残念だが w
2017/07/17(月) 10:50:54.11ID:LYlgQVUQ0
>>937,940
俺もそれを知らんかった。
そしてそのページでそれを確認し、K&Rみたら確かに「プロトタイプ」となっている。
だからどうやら俺の誤用だった、とした。

ただまあ、その意味での「前方宣言」なんて見たことないんだけどね。
2017/07/17(月) 10:55:39.50ID:g3mBUieLd
Pythonはファイルの最後に
if __name__ == 'main':
main()

ってやる関係で、結局実行は最後になるからdefの順番とかで困ることはまずないな
せいぜい関数内関数定義で先に書くか後で書くかくらいか?
一体どんなコード書いてりゃそんなどうでもいいところで引っかかるんだ
2017/07/17(月) 10:57:04.61ID:LYlgQVUQ0
>>942
Pythonのdefは941で言う(A)なんだよ。
だから後方参照できない技術的理由は無い、という見解だ。
お前には通じないようだが。

それとは別に(B)の記述はPythonでも出来る。
というかこれが出来ない新しい言語なんて無い(ただしJavaを除く)
2017/07/17(月) 11:02:44.43ID:U2FIHXXv0
>>941
> みたところPythonには(A)しかなさそう

>>945
> それとは別に(B)の記述はPythonでも出来る。

バカの上塗り w
そもそも>>944が言うように前方参照の話ですらないのに何を必死になってるんだか
947デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/17(月) 11:55:17.77ID:woO8V6Ze0
>>929
あーそう、「ほぼ使わない」のか
チームメイトが(いれば)お気の毒だね

正規表現の「後方参照」はここでの話と全然関係ないぞ
コンパイラにとって初見の識別子があとで宣言されることを
MASMでは前方参照と言っていたが、
Cでは「undeclared identifier: 宣言されていない識別子」
となっているだけだ(もち violation of the syntax)
ちなみにISO/IEC9899には全然違う意味の
「forward declaration: 前方参照」という用語がある

老害を小馬鹿にしたいようだが、脇が甘すぎだぜおまえ
2017/07/17(月) 12:33:21.67ID:LYlgQVUQ0
>>947
脇が甘いもなんも、お前も全員が妥当だと思う用語を持って来れないだろ。
だったらお前も俺と同レベルなんだが。
913の時点で「『宣言されていない識別子』は禁止」では何を言っているのか通じないだろ。
(「前方宣言必須」は厳密には間違っているが、C使いには意図は100%通じてるだろ)

というかお前は老害ではなく若いのか?その突っかかり方はガキっぽい。
2chは言葉の定義にやたらこだわる奴が多いが、それはただのクソガキで、
仕事してりゃ分かるはずだが、実は社内方言ってのはものすごく多くて、
社外だと全く通用しないことすら自覚できてない場合が殆どだ。
だからすれ違いを感じたら>>932のように確認するのが常で、
俺はそれを受けて>>934と応じた。
ここら辺は仕事をしたことがあればよく見かける光景ではあるはず。
もちろん方言ではなく共通語を使う努力をすべきなのは言うまでもないが、
問題は方言を使っている奴は方言だと認識してないことなんだよ。

だから俺が方言を使っていれば、お前が正しい共通語を示せばいいだけの話であって、
今現在は(需要が既に無いから)共通語自体が存在しない状態だろ。
それをいちいち勝った負けたされても知らんがな。

で、まあ、話を戻すと、
(俺はPython使いではないから間違っているかもしれんが)
俺の理解では、Pythonは「プロトタイプ宣言が出来ないC」だ。
この理解が正しければ、糞だということで割と賛同を得られると思うが。
>>944は糞を量産していることに気づいてないだけだ。

ただそれとは別に、プロトタイプ宣言は無くても通常は構築可能で、
Cはそれが作法になってるだろ。
例えばファイルの先頭でファイル内全関数をプロトタイプ宣言してるソースなんて見たことないだろ。
(コーディングルールとしてこれをやっている所があってもおかしくないが、誰か知ってるか?)
ただ、Cはこの手間をかければ順序は自由にはなるが、Pythonはそれすら認めてないだろ。
この辺、Pythonは無駄に教育的で実践的ではないんだよ。
2017/07/17(月) 12:54:14.08ID:HedtDN7o0
そうそう普通PL/Mだよね
2017/07/17(月) 13:28:45.97ID:g3mBUieLd
俺が糞を量産しているというのは穏やかではないな
if __name__ == '__main__'が糞といいたいのか?
ちょっとPythonスレで議論しようよ
2017/07/17(月) 13:37:29.75ID:g+93Yjlh0
夏だな
2017/07/17(月) 14:40:04.91ID:rKRQ/JsKM
forkで子プロセスから、子プロセスを終了させたあとに親プロセスを終了させる方法無いですかね?

親プロセスはwhile(1)で回していて、子プロセスで入力を受け取るのですが、ある入力が来たときだけ、プログラムを終了(子プロセス親プロセス両方共終了)させたいです
2017/07/17(月) 14:45:33.81ID:+Y9zLnEF0
親プロセスでwaitpidして子プロセス終了してたら自分も終了すれば良いじゃん
2017/07/17(月) 14:54:49.57ID:Ns2d2+pxM
>>953
子プロセスは自動で死ぬこともあるんです
だから、子プロセスが自発的に親プロセスを終了させよつとしない限りは親プロセスは行き続けて欲しいです
2017/07/17(月) 14:58:31.67ID:+Y9zLnEF0
終了ステータス変えるとか、共有メモリで適当なフラグもっとくとか、事前に適当なシグナル送るとか、いくらでもやりようあるだろ
2017/07/17(月) 15:09:00.52ID:LYlgQVUQ0
>>950
行かんよ。俺はPythonの文法もろくに知らないし、使う気もないし。
ただ、俺の理解
> Pythonは「プロトタイプ宣言が出来ないC」だ。
が間違っているのなら、指摘してくれよ。
これが間違いでないのなら、このスレの過半数は糞認定すると思うぞ。

上記が正しいとして、君が糞を量産していることを自覚できていないのは、
C専読者と同じで、Cスタイルで「上位から」書かれているコードを見たことがないからだ。
というか俺もつい先日までそうだったんだが。

とりあえず簡単に確認する方法として、循環参照がある。
例えばCなら、以下になる。

viod say_hello(count){
if (--count<0) return;
printf("hello");
say_world(count);
}
void say_world(count){
printf(" world!\n");
say_hello(count);
}

後方参照できるJavaScriptなら、これはベタで書いてそのまま動作する。
Cだとプロトタイプ宣言が必要だが、実体は上記の通りで動作する。
Pythonは余分な方法を使わないとこれが出来ないんだろ?

これとは別に、そもそも循環参照コードなんて書くなというのはあって、
これを教条的に強制しているのがPythonだろ。
下位からの記述を強制されている場合に、上位から読みたければファイル末尾から読め、
でしかないというのも事実だから、そんなに致命的でもないんだが。
2017/07/17(月) 15:25:01.26ID:iPE66y3WM
>>956
> Pythonは余分な方法を使わないとこれが出来ないんだろ?
普通になにもしなくてもできる
必要なのは>>944のが書いてる
> Pythonはファイルの最後に
> if __name__ == 'main':
> main()
だけ
て言うかPython知らないなららPython云々で語るなよ
アホの戯れ言をいちいち訂正するのが面倒すぎる
2017/07/17(月) 15:29:13.95ID:I/V/8ZBUM
>>955
ありがとうございます
出来ました
2017/07/17(月) 15:32:56.88ID:LYlgQVUQ0
すまん、>>956は間違いのようで、Pythonでも関数間の参照自体は出来るらしい。
> 再帰関数の前方参照
> http://www.isc.meiji.ac.jp/~mizutani/python/recursive_call.html
だから関数定義を全部先にしてしまえばいいということになる。
それが見易いとは思わないが。

しかしCは関数内関数が無いのでそれ以前だ。
GCC拡張を利用するなら、
関数内関数を全部「頭」に配置しないといけないのがPython、
どこに配置しても自由に呼び出せるのがJavaScriptということになる。
GCCの場合はCと同様プロトタイプ宣言とかも関数内に使えて配置も同様、ということなのかな?

>>957
ああ悪い、こっちも確認した。上記の通り。
というかPythonの話は止めよう。俺はそっちには興味ない。


話を戻すと、俺が思うCに足りないのは「階層」と「後方参照」だ。
これら2つがあれば、今現在細切れになっているファイルを1つに束ね、
一番読みやすい順にソートできる。
お前らがピンと来ないのは、多分俺と同じで、見たことがないからだ。
後方参照できる言語でCスタイルで書かれた大規模コードを一度見れば分かると思うよ。
2017/07/17(月) 16:45:34.15ID:g3mBUieLd
俺ってばこんなこんなに何も分かってない奴に「糞コード量産してる」とか言われてたん?
失礼な奴だな本当に
2017/07/17(月) 16:53:25.99ID:OvXGqJkd0
ctagsとか、タグジャンプつかおうな?

上から下にならべてあるから読みやすいですとか、眺めてるだけですと、宣言してるようなものだ。

トレースする気がないべ?
2017/07/17(月) 17:26:09.82ID:LYlgQVUQ0
>>960
いや事実だぞ。

君は都合が悪い部分には回答しないようだが、プロトタイプ宣言が無いのは事実だろ。
それは下位関数も含めて全部上側で記述することを強制する。
C言語でプロトタイプ宣言が無い場合に似ている。
ただし関数内から別関数への参照は「動的」に行われるのでCより制約は緩くなるが、
本質的にはあまり変わらない。
そもそも、下位関数なんて名前を見たら実装なんて見ずとも結果が分かるべきものだし、
それがオブジェクト指向の思想だろ。下位関数は読む必要なんてないんだよ。

俺は「『君が無能だから』糞コードを量産している」と言っているわけではない。
Pythonの仕様が糞だから、「Pythonでは糞コードしか書けない」と俺は言っている。
そこを君は勘違いしている。

それはそうと、Pythonのスレ試しに見てみたが、相当酷いな。あれじゃマ板だよ。


>>961
IDEに使って本格的に読めばその辺も含めて改善するのだろうが、
設計者が分かりやすいようにソート済みなのと、
コンパイラに都合がいいようにソート済みなのでは、全然違うんだよ。
そしてCは「ファイル」を階層として使っているのだが、これがもう古い。
タグとか使って一発で飛べるのなら余計に1つのファイルにまとめてあったほうが好都合だろ。
(もっともタグ使えば複数ファイルでも飛べるのだとは思うが)

ただ、俺が求めている階層は関数内関数で十分で、
GCCで採用されているのでいいんだが、アレは何で標準にならないんだ?
2017/07/17(月) 17:45:56.64ID:+Y9zLnEF0
トランポリンコード必須なGCCの関数内関数が標準に入るわけないだろ
2017/07/17(月) 17:52:48.13ID:6JtF0HSC0
>>952
親プロセス while (1) で回してるって、その while (1) の中でやってる処理はなんだ?
wait() してないのか? wait() してるならそれで子プロセス側の exit() のステータス
受け取れるからそれで親側で判別すればいいんじゃない?

てか、これCはCでもUNIX系OS固有の話だよな。ここだとスレチにならんか?
2017/07/17(月) 17:54:48.33ID:6JtF0HSC0
あ、もう解決済みだったか。すまん。
2017/07/17(月) 17:54:54.48ID:+Y9zLnEF0
ならんと思うし、解決済みだぞ
2017/07/17(月) 18:06:17.25ID:6JtF0HSC0
>>959
まあそれで見やすくなるだろうから、そういうCを拡張した新しい言語作れば良い。
しかし、問題はC(あるいはそこからちょっとしか拡張されていないような言語)を
人間が直接使う機会はおそらく減り続けることにある。今でもほとんどOSや
デバイスドライバを記述するアセンブラ代わり
2017/07/17(月) 18:07:19.84ID:g3mBUieLd
>>962
お前のいうことは完全に間違い。Pythonスレでならちゃんと答えてやる
興味がないならこれ以上その浅はかな知識をひけらかすな
2017/07/17(月) 18:07:38.79ID:6JtF0HSC0
あ、ごめん。途中で送信しちゃった。
つづき。


に使われてるしね。
2017/07/17(月) 18:40:56.88ID:IbKZMmLs0
関数内関数って要するに高階関数のことだろ
関数型言語または関数型のマルチパラダイムの言語でないと無理だろ
2017/07/17(月) 18:46:26.39ID:PKmAGp8M0
Objective-Cで全部可能ではある
C言語でもclangならblocks拡張(関数オブジェクト・クロージャ)が使える
関数内関数は単純に制御構造だと捉えれば、C言語でもgoto文で可能でしょう
2017/07/17(月) 18:54:16.64ID:g3mBUieLd
Blocks拡張は有能なのは分かってるけど、Clang依存コードになるからちょいとハードル高いよなあ
973デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/17(月) 18:59:20.24ID:woO8V6Ze0
>>948
いやコンパイラにとって初見の識別子があとで宣言される
という形になっているコードについて話しているのは
みんなわかってるのに、頓珍漢な言葉遊びに持ち込もうと
している邪魔な奴がおまえだ

> Cはそれが作法になってるだろ
はあ? 聞いたこともねえぜ、寝言は寝てぬかせ
横着しねえでちゃんとプロトタイプ宣言すんだよ
正直たまにサボることがあるのを恥もせずに
それがスタンダードとか居直るおまえの態度が鼻持ちならん
2017/07/17(月) 19:03:14.17ID:30YqlFLH0
ヘッダにはプロトタイプ宣言を書くだろうに
なんでプロトタイプ宣言をなかったことにしたがるのだろうか?
2017/07/17(月) 19:03:27.54ID:PKmAGp8M0
>>972
俺も非依存性重視なので、拡張なしの標準的なCでやってるよ
プロトタイプ宣言とクロージャは諦めなきゃならないが
クロージャはコールバック関数のポインタを渡すという伝統的なやり方でできる
2017/07/17(月) 19:17:54.83ID:g3mBUieLd
>>975
諦めなきゃならんのか出来るのかどっちだよw
いやblockなしでクロージャ出来るんなら割と真面目に知りたいんだけど
2017/07/17(月) 19:25:58.36ID:PKmAGp8M0
>>976
いやコールバック関数のポインタ渡しで代替だからw 別に関数書く必要はあるよ
blocksみたいに、同じスコープにコールバックの処理も書けちゃうっていう便利さは無い

環境のキャプチャもしたければ、値のコピーをヒープに確保してコールバック側でfreeとか、
工夫すればできるでしょう
2017/07/17(月) 19:43:36.29ID:g3mBUieLd
うーむわかりた。やっぱ別に書いた関数を呼ぶのがせいぜいよなあ
せめて関数オブジェクトがあればなあとたまに思うわ
2017/07/17(月) 19:45:22.30ID:U2FIHXXv0
>>959
> というかPythonの話は止めよう。俺はそっちには興味ない。
はあ?
Python言い出したのはお前だぞ w

>>962
> Pythonの仕様が糞だから、「Pythonでは糞コードしか書けない」と俺は言っている。
だから知らないならPythonに触れるなよ
別にPythonサイコーって思ってる訳じゃないけどお前の指摘は全て的はずれすぎる
関数定義の順序に制限なんてない
あとローカル関数についてはJavascriptも似たようなもんだぞ
2017/07/17(月) 19:47:31.91ID:U2FIHXXv0
>>970
> 関数内関数って要するに高階関数のことだろ
全然違う

> 関数型言語または関数型のマルチパラダイムの言語でないと無理だろ
Pascalでも使えるのに何を知ったかしてるんだよ w

>>971
> 関数内関数は単純に制御構造だと捉えれば、C言語でもgoto文で可能でしょう
これはさすがにアホすぎる...
2017/07/17(月) 19:59:04.53ID:PKmAGp8M0
>>980
ちょっと関数内関数ってどういうものを言ってるか説明して
単純に言えば関数内で行ったり来たりするだけじゃないの?
2017/07/17(月) 20:24:44.55ID:IbKZMmLs0
関数の内部で関数を定義するようなイメージじゃないの?
C言語では不可能だけど
void functionA(void) {
 …
 void functionB(void) {
  …
  void functionC(void) {
   …
  }
 }
}
2017/07/17(月) 20:31:06.71ID:U2FIHXXv0
>>981
スコープが違うだけで普通の関数と同じだぞ
普通の関数をgotoだけで実装してみてよ
2017/07/17(月) 21:01:30.74ID:LYlgQVUQ0
>>963
> トランポリンコード
なんだそりゃ?と思ったらこれか。
http://d.hatena.ne.jp/yupo5656/20040602/p1

なるほどGCCのは単なる階層ではなく、プチグローバル付きか。
この仕様なら上位階層(ファイル)を記述変更無しで取り込めるが、
これは確かに標準化には微妙だな。俺はGCCの仕様を詳しく知らんかった。すまんね。
しかしこれ、C++のメンバ関数ポインタみたいに、
普通の関数ポインタと相互運用することは諦めてしまっても良かった気もするが、
それだとレガシーとは相性が悪い。微妙なところだね。
2017/07/17(月) 21:03:30.21ID:PKmAGp8M0
>>983
俺が言ってるのは、Cでは同じようには書けないが同じ処理はできるってことだよ
986デフォルトの名無しさん (ワッチョイ ce6f-9g51)
垢版 |
2017/07/17(月) 21:07:34.37ID:J4JGo3XO0


C言語なら俺に聞け 141
http://mevius.2ch.net/test/read.cgi/tech/1500293207/
2017/07/17(月) 21:16:05.25ID:dzhRVtEN0
おっつおっつ
2017/07/17(月) 21:20:55.01ID:LYlgQVUQ0
>>967,969
チョイ拡張言語ってのはエコシステムが付いてこず勝手に死ぬ。
Dもだし、Objective-CはAppleに拾ってもらえたけど、もう確実に死ぬ運命だよね。
(あれらはチョイ拡張でもないが)
チョイ拡張だとわざわざCから移行する意味が無いんだよ。
理想的にはやっぱ標準に入ってくれないと辛いわ。

Cが死に行く、って指摘については、俺もそう思っていたのだが、
何度も言っているが最近Cスタイルの他言語コードを見てちょっと考えを改めつつある。
OOPのコードは結構真面目に追いかけないと辛くて、読みやすくはない。
これはCも同様だと思っていたのだが、実はCの読みにくさは「階層」と「後方参照」がないだけで、
(つまりファイルがバラバラで、しかもグダグダな順に書かれているからであって《=プチ難読化済》)
構造的に問題があるわけではなく、それなりに読みやすいことに気づいた。
だからこれらがある言語(Python以外の新しい言語全部)でCスタイル(手続き型)で書かれたコードは
実はかなり読みやすいのだと思う。
(問題は、そういうのにあまり遭遇しないことだが)

だからC自体は廃れるかもしれないけど、Cスタイルは多分廃れない。
そして今のところ手続き型万歳的な言語はCだけだ。
となると、Cに足りない上記、「階層」「後方参照」が入ればCってもう一回来るかも?とも思う。
(つか、namespaceすら入れないって何よ?とは思うよマジで)

>>986
2017/07/17(月) 21:22:41.43ID:n17oqQVv0
Pythonがプロトタイプ宣言の必要のないC言語と言ってるバカがいるのはこのスレですか?
2017/07/17(月) 21:30:16.49ID:LYlgQVUQ0
>>973
全部書くのがお前のジャスティスならそうすりゃいいし、
実際そっちが主流かもしれん。

しかしヘッダファイルを用意するなんて完全に二度手間だし、
コンパイラが自動的にやれよマジで、と思ったことは無いのか?
コンパイル時間が気になるのなら、ヘッダファイルを用意しろ、
面倒ならなしでよし、その場合はコンパイラが勝手に探してくる、
その分コンパイル時間はかかるが手間が省ける、って仕様で何も問題ないだろ。
てか他言語は全部そうだし。(Python除く)

俺はあの仕様がいまだに残っており、
また、お前みたいに疑問を持ってない奴がいることがよく分からん。
2017/07/17(月) 21:39:14.19ID:LYlgQVUQ0
>>989
× Pythonがプロトタイプ宣言の必要のない
○ Pythonはプロトタイプ宣言が出来ない
○ JavaScriptはプロトタイプ宣言が必要ない

何度も言っているがこれだけでPythonは糞だと断定できる。
一番わかりやすい順に記述出来ない時点で糞。
ただしPythonってのは元々そういう言語。ユーザの自由を認めていない。

で、俺はマジでPythonに関わるつもり無いからもう止めて。
Python信者が発狂しているし。俺自身Python知らんし。
2017/07/17(月) 21:41:38.75ID:nYhUL1Kkd
最強はアセンブリ言語
2017/07/17(月) 21:43:34.50ID:iqtGzeji0
一元管理と二重チェック、共存はできないが一概にどちらが優れていると決めつけられるものでもないなぁ。
2017/07/17(月) 21:45:43.44ID:U2FIHXXv0
>>985
だからgotoでどうやってやるんだよ
戻り番地の意味わかる?
2017/07/17(月) 21:46:23.02ID:/QULOYxMa
>>990
いや、何も無理してC使う必要はないんだよ。なんだったら新言語作ればいい。
bison, flex (yacc, lex) があるわけだし。

で、比較的楽に言語を作る方法は、C言語へのコンバータにしてしまうことだ。
そうするとかなり多くの環境で動くものがいきなりできる。
C++も最初の頃はそうだった。
2017/07/17(月) 21:49:21.75ID:U2FIHXXv0
>>991
知らないのに糞とかアホすぎる w
2017/07/17(月) 21:49:44.33ID:U2FIHXXv0
うめ
2017/07/17(月) 21:50:16.71ID:U2FIHXXv0
うめ
2017/07/17(月) 21:51:40.93ID:qENq84dkM
>>991
バカは何度指摘してもバカのままなんだな
2017/07/17(月) 21:51:49.33ID:n17oqQVv0
>>990
1ソースコードファイル1オブジェクトファイルだからそういう仕様なんだよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 66日 23時間 31分 46秒
10021002
垢版 |
Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況