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

■ このスレッドは過去ログ倉庫に格納されています
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/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をやった方がコンピュータの理解にはいいけど。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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