X



C言語なら俺に聞け 144
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 838a-3nWA)
垢版 |
2017/12/23(土) 19:33:43.89ID:dghfoRy20
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://mevius.5ch.net/test/read.cgi/tech/1509107288/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0518デフォルトの名無しさん (ワッチョイ b375-lqEN)
垢版 |
2018/01/27(土) 12:03:56.86ID:rGBD/78P0
>>517
ゼロで埋める
0520デフォルトの名無しさん (ワッチョイ b375-lqEN)
垢版 |
2018/01/27(土) 12:14:23.87ID:rGBD/78P0
どっちもだな
0526デフォルトの名無しさん (ワッチョイ e39f-SpET)
垢版 |
2018/01/27(土) 15:57:17.68ID:ibqNKJrC0
>>514
おだいじに。
0527デフォルトの名無しさん (ワッチョイ c78a-5dAg)
垢版 |
2018/01/27(土) 16:24:23.51ID:7WxnX7MJ0
>>524
純粋なC言語が使われているのは、リソースが厳しい組み込み分野と、他にはプログラミングの教育や学習の分野がほとんど全て
実用的にはC++への通過点といった感じで考えておいた方が無難
CとC++の使い分けは結構曖昧で緩い感じだけど意識しておいた方が良い
両者をまとめた適用分野で言えば>>525あたり
0528デフォルトの名無しさん (ワッチョイ e39f-SpET)
垢版 |
2018/01/27(土) 16:44:34.14ID:ibqNKJrC0
しかしなんというか、C++は発展させすぎて難しくなった感があるな。
C++ってWindowsネイティブアプリ以外で使われてるのあまり見ないような気がするんだけど。
Windows用で使われる理由は歴史的な理由で、もしこれがなければC++って廃れてないか?
0529デフォルトの名無しさん (ワッチョイ 539f-fPTX)
垢版 |
2018/01/27(土) 16:55:56.69ID:InjcCDJK0
>>527
> 実用的にはC++への通過点といった感じで考えておいた方が無難
ダウト。
というか個人的には俺もそう思っていたが、どうも実際はそうじゃない。
https://www.tiobe.com/tiobe-index/
https://techacademy.jp/magazine/8735
あまり毛嫌いする必要もないはずなのだが、C++に乗り換えてない奴らも相当数いる。
理由は>>528の言うとおりで、C++は若干暴走気味だよ。
Linusの言う「無駄に抽象化しすぎて話を余計にややこしくする馬鹿が多すぎる」というのも当たってる。

とはいえクラス構文すら入れないCのかたくなな姿勢はどうなのよ?とも思うが。
0530デフォルトの名無しさん (ワッチョイ 9e23-Pdni)
垢版 |
2018/01/27(土) 17:14:52.43ID:BOWgYHll0
「なんとなくアセンブラコードが想像できるところまで」
というのがC言語で実装する機能の上限だと思う。

まあ実態とだいぶ乖離しているが、最適化を切ったとかの前提でひとつ
0531デフォルトの名無しさん (ワッチョイ c78a-Jirz)
垢版 |
2018/01/27(土) 17:15:48.70ID:7WxnX7MJ0
個人的にはクラス云々よりもC言語では関数のオーバーロードやデフォルト引数あたりが使えないのがもやもやする
というかあまり詳しく調べてないけど、最近のC言語の仕様改定で標準化とかされてなかったよね?
大抵はC++の処理系を利用しているから有耶無耶で利用している人も多いと思うけど
0532デフォルトの名無しさん (アウウィフ FF77-oJ1J)
垢版 |
2018/01/27(土) 17:38:54.08ID:WgYcU0PsF
stdarg (... とか va_list) とマクロで出来んか
0534デフォルトの名無しさん (ワッチョイ 539f-fPTX)
垢版 |
2018/01/27(土) 18:39:07.65ID:InjcCDJK0
個人的には評価が確定した物は入れればいいと思ってる。
クラス(またはプロトタイプ)が使えない実用言語なんてほぼ無いわけでさ。
ただ、
> 「なんとなくアセンブラコードが想像できるところまで」 (>>530)
が標準化委員会の指針なら、今の姿勢も分からんでもないが。

>>531
> 関数のオーバーロードやデフォルト引数あたり
実はここは評価が確定してない。
というか、どっちかがあれば大体解決する。
VC++/CLIではデフォルト引数は禁止でオーバーロードのみ。
JavaScriptはオーバーロード無しでデフォルト引数は常にundefinedのみ。
いずれも大した問題はない。

C++は壮大な実験場と化しているから、
Cはありがたくその結果だけを受け取って緩やかに発展させればいいと思うのだが。
0537デフォルトの名無しさん (ワッチョイ c78a-Jirz)
垢版 |
2018/01/27(土) 19:10:00.20ID:7WxnX7MJ0
>>534
>実はここは評価が確定してない。

そんなに揉めるような機能か、これ?
特にオーバーロードなどは今すぐにでも導入されれば、似たような関数名であれこれいらんこと考えずに済むのでメリットしか考えられないんだが
デフォルト引数もあっても悪いものではないだろう
クラスの導入のように現行のC言語の規格を大きく変更(デメリットも含めて)することなく、簡単に言語の使い勝手を向上させるお手軽な改善だと思っていたんだが違うのか
0538デフォルトの名無しさん (ワッチョイ 539f-fPTX)
垢版 |
2018/01/27(土) 19:57:46.36ID:InjcCDJK0
>>537
> ●java
> デフォルト引数なし.オーバーロードはあり.
> ●python
> デフォルト引数はあるが,オーバーロードはなし.
> https://plaza.rakuten.co.jp/redbeeshrimp/diary/201112240001/

理由についてグダグダ言っている奴は他にもいたはずだが、例えば以下。
http://ufcpp.net/study/csharp/sp4_optional.html
> 余談: なんでいまさら?
以降を読んでみればいい。

型あり言語は型違いで無駄に同じ趣旨の関数が氾濫することになるから、
オーバーロード/テンプレート/ジェネリクスのどれかはあった方がソースは綺麗になる。
だから型無し言語(JavaScript/Python)はオーバーロード無しでデフォルト引数だけ、というのもまあ妥当な線だろう。
ならば、テンプレートを持っているC++は、
オーバーロード無しで、デフォルト引数+テンプレートだけで綺麗に書けるか、という話になる。
多分これもやれば出来るんだよ。
勿論そこに出ている「名前付き引数+テンプレート」でも綺麗に書ける。
どれを言語に取り込むべきか、ということに関して、C++は「全部入れちゃえ」というノリだからいいとして、
Cみたいにミニマムで美しく、というノリで「どれかにしろ」と言われたらちょっと迷うだろ。

Linusは多分オーバーロードすら要らん、という立場だぞ。
ちょっとググってもすぐには出てこなかったが、
「Cはこれについて馬鹿みたいに単純な方法(別の名前を付けること)で対応している。
実際、これはgrep出来るしメンテしやすい」
と言っていたはず。
まあ分からんでもないだろ。オーバーロードすら無しならgrepした関数に確実にそのまま当たる。
ソースを追うという意味ではこちらの方が当たってる。
オブジェクト指向の継承が良くない点の一つは、ぱっと見、どの関数が実行されるか分かりづらい点であってさ。
勿論、「分からなくていいし、分かる必要がない」というのがオブジェクト指向のノリだとしてもね。
0539デフォルトの名無しさん
垢版 |
2018/01/27(土) 20:51:31.73
あまりにミニマムすぎるとみんなが好き勝手なマクロを作って「僕が考えたエレガントなコーディング」を始めるから少しは高級な記法を用意しといてくれや
0540デフォルトの名無しさん (アウアウカー Sa33-bnsf)
垢版 |
2018/01/27(土) 20:56:30.77ID:0ISwxtuYa
うーん。Cはアセンブラ代わりの単純な言語にしておいてそれ以上の事は別の言語でやればいいような気がするが。

丁度よい言語が見つからないなら作れば良い。自分で作れなくても仕様を公開して作ってくれる人を募集すればその内誰か作ってくれることだろう。
0541 ◆QZaw55cn4c (ワッチョイ da60-L5Bk)
垢版 |
2018/01/27(土) 21:31:52.27ID:S+YQeyK20
>>537
関数のオーバーロードは、リンク時の対応にアセンブラ互換性がとれなくなるので、お手軽ではないと思う
extern "C" を追加するか?え、C に extern "C" って意味わかんない…
0545デフォルトの名無しさん (ブーイモ MMda-EQ2j)
垢版 |
2018/01/27(土) 22:50:15.16ID:l2t/3O07M
CはUNIX思想の根源みたいなもんだし、十徳ナイフみたいな機能はいらんでしょ
どうしてもって人はC++使えばいいだろ
そのためにできたようなもんだし
0546デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/28(日) 14:26:11.42ID:Ixu0c+cx0
質問答えてくれたら嬉しいです
配列の中身をfprintfでエクセルに書き込む方法を教えてください

fprintf(fp,"%3d , %3dn",0,value)
のように一変数を書きこむ方法は分かるのですが配列のすべての要素を書き込みたいです
0547デフォルトの名無しさん
垢版 |
2018/01/28(日) 14:36:25.54
>>546
Excelじゃないとだめなの?
CSVファイルとかじゃあかんの?
0551デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/28(日) 15:17:40.71ID:Ixu0c+cx0
>>547
csvファイルですね
0552デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/28(日) 15:21:08.26ID:Ixu0c+cx0
なんの考えもなしに愚直に書くとこういうことがやりたいです

long value[100],k;

for(k=0;k<100;k++){
value[k]=500;
}

fprintf(fp,"%3d,%3d,%3d,%3d,%3d・・・,%3d\n",0,value[1],value[2],・・・value[100]);
0555デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/28(日) 15:34:24.62ID:Ixu0c+cx0
>>553
ありがとうございます!

fprintf(fp, "%3d", 0);
for (k = 0; k < 100; k++) {
  putc(',');
 fprintf(fp, "%3d", value[k]);
}
putc('\n');

であってますか?
0557デフォルトの名無しさん
垢版 |
2018/01/28(日) 16:16:34.41
でも1バイトずつ出力なんて普通はしないで
行くらいはまとめて出力するやろ?

char buf[405]; /* 3桁数字×101個 + カンマ100個 + 改行 + 「¥0」でMAXサイズ決め打ち */
size_t pos;

/* 1行処理開始 */
pos = 0;
sprintf(&buf[pos], "%3d", 0); pos += 3;
for (k = 0; k < 100; k++) {
 sprintf(&buf[pos], “,%3d", value[k]); pos += 4;
}
sprintf(&buf[pos], “¥n”); pos++; /* buf[pos++] = ‘¥n’; buf[pos++] = ‘¥0’; でもいいけど */
fwrite(&buf[0], 1, pos, fp);
/* 1行処理終了 */
0558デフォルトの名無しさん (アウアウウー Sa77-rgA5)
垢版 |
2018/01/28(日) 20:06:56.21ID:4RSN9gyea
惜しいな。

>>555
putc() または fputc() の引数は文字コードと出力先FILE*の2つだ。

>>557
fprintf()のようなFILE*経由の出力はライブラリの中でバッファリングされるように
なっているので(自分でそのバッファの大きさをいじるのでない限りは)まとめて
出そうとかは考える必要がない。考えた方が良いのは write() で直接出力する
場合だ。
0559デフォルトの名無しさん
垢版 |
2018/01/28(日) 21:56:59.74
>>558
ロックのコストがかかるだろ
0561愛知人
垢版 |
2018/01/29(月) 01:00:38.69ID:pcTu+bOr
画像の順番ミスりました。
0562デフォルトの名無しさん (ワッチョイ e39f-SpET)
垢版 |
2018/01/29(月) 01:22:55.81ID:CxmMjiyr0
>>559
どのレベルでのロック?
0563愛知人
垢版 |
2018/01/29(月) 01:45:54.32ID:pcTu+bOr
あ、原因わかりました
0564デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/29(月) 13:52:22.33ID:FA24LoNZ0
>>558
ありがとうございます
0565デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/29(月) 15:32:09.28ID:FA24LoNZ0
もう一つ質問させてください
long型の配列に空白を入れることは可能でしょうか?

>>556
ありがとうございます
0567片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdda-iVxB)
垢版 |
2018/01/29(月) 15:55:33.60ID:MMFEPnwQd
配列に空白を入れるというのは、配列のどこかに、空白文字の文字コードを表す整数値を入れるという意味になる。
文字コードは、文字リテラルか整数リテラルで指定できる。
0568デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/29(月) 16:26:29.34ID:FA24LoNZ0
>>566
ご返事ありがとうございます
0575愛知人
垢版 |
2018/01/30(火) 01:24:21.22ID:nQQmpnBb
空白=32=空白
0577デフォルトの名無しさん (ワッチョイ e39f-SpET)
垢版 |
2018/01/30(火) 04:18:14.15ID:9ZRSIjLC0
今話題のEBCDICだと違うかも
0581愛知人
垢版 |
2018/01/30(火) 15:46:46.33
0582デフォルトの名無しさん (ワッチョイ aeea-MCTD)
垢版 |
2018/01/30(火) 15:51:17.34ID:yCe36s9T0
(アスキーコードを使ってる仮定で) SPC文字 と 整数32 は等価
より大きいサイズへの整数への格上げも素直に行われるだろう
long a = ' ';
long b = 32;
// a と b は等しい

元質問 >>565
「long型の配列に空白を入れることは可能でしょうか?」における
空白とはなんぞや?が ' ' でいいのかどうかは知らん
0584 ◆QZaw55cn4c (ワッチョイ da60-L5Bk)
垢版 |
2018/01/30(火) 15:58:10.94ID:fLRARGcM0
>>579
min という変数がポインタだとして、min の指し示すところに 100 を代入する、という意味になる
部分だけではよくわからない場合もあるので、可能ならば全体を https://ideone.com に張ってもらえると、もっと解説できるかもしれない
0585愛知人
垢版 |
2018/01/30(火) 16:00:11.58
ロング型に文字入れてもprintfできないのに何の意味があるのか分からん
0588デフォルトの名無しさん (スプッッ Sd7a-pvFI)
垢版 |
2018/01/30(火) 16:28:20.57ID:jZaFosZad
#include <stdio.h>
void maxmin(int array[],int max,int min); int main(void)
{
int i = 0,array[10],max,min;
do
{
printf("%d 番目の数:",i + 1); scanf("%d",&array[i]); i++;
} while (array[i - 1] != -1);

maxmin(array,&max,&min);

printf("最大値 %d : 最小%d\n",max,min);

return 0;
}

void maxmin(int array[],int max,int min)
{
int i = 0;
*max = 0;
*min = 100;
while (array[i] != -1)
{
if (array[i] > max) max = array[i];
if (array[i] < min) min = array[i];
i++;
}
}
0590愛知人
垢版 |
2018/01/30(火) 16:35:56.43
int max, minが宣言されてなくね?
0591愛知人
垢版 |
2018/01/30(火) 16:37:38.36
int *max, *min
0592デフォルトの名無しさん (ワッチョイ aeea-MCTD)
垢版 |
2018/01/30(火) 16:42:57.56ID:yCe36s9T0
× void maxmin(int array[],int max,int min)
○ void maxmin(int array[],int *max,int *min)

× if (array[i] > max) max = array[i];
○ if (array[i] > *max) *max = array[i];

× if (array[i] < min) min = array[i];
○ if (array[i] < *min) *min = array[i];

ポインタ使わずに記述してて、呼び出し元に結果かえってないじゃーん
から、慌ててポインタに変えた感じかな?
0594愛知人
垢版 |
2018/01/30(火) 17:19:04.96
下の関数はmain関数と思い込んでだけどよく見たら引数あるのか
0596デフォルトの名無しさん (アウアウエー Saf2-oJ1J)
垢版 |
2018/01/30(火) 17:24:42.43ID:61BNvo+Ja
>>593
2-1の
関数の中身は間違い
ansの前に*が必要
0598デフォルトの名無しさん (アウアウエー Saf2-qxBm)
垢版 |
2018/01/30(火) 18:07:51.62ID:zy+7iaPqa
これはひどい
0603デフォルトの名無しさん (オッペケ Srab-9Pjq)
垢版 |
2018/01/30(火) 21:14:33.45ID:YzkDukp0r
これは苦しいwwwww
0607デフォルトの名無しさん (オッペケ Srab-9Pjq)
垢版 |
2018/01/31(水) 07:53:31.27ID:OVj1tDHAr
>苦しんで覚えるC言語(苦C)は、初心者を対象としたC言語入門サイトです。
>C言語の基本機能を体系立てて解説しており、市販書籍と同等以上の完成度です。

去年サイトリニューアルするまでは、項目はあるのにページが無いのとか結構あったし、完成してないのにこれで市販書籍以上の完成度とかよく書けるなw
0608デフォルトの名無しさん
垢版 |
2018/01/31(水) 08:25:41.29
>>607
運営者本人が初学者だから苦しんでるんだろうなw
0612デフォルトの名無しさん (アウアウカー Sa33-bnsf)
垢版 |
2018/01/31(水) 10:23:38.93ID:H6iQ2Lk/a
体で覚えるしかないな

なんて、コンパイラにバグがあって変な風に覚えちゃったりしてw
0614デフォルトの名無しさん (ワッチョイ 5323-oJ1J)
垢版 |
2018/01/31(水) 11:31:00.48ID:S61vzQOK0
最近の書籍はあてにならない
著者も編集もレベル落ちてる
0615デフォルトの名無しさん (アウアウカー Sa33-bnsf)
垢版 |
2018/01/31(水) 12:50:06.35ID:lHClPcOQa
gccには騙されっぱなしです。
0616デフォルトの名無しさん (アウアウカー Sa33-bnsf)
垢版 |
2018/01/31(水) 12:52:56.34ID:lHClPcOQa
void * の変数に1を足しているのを見た時は驚きました。
■ このスレッドは過去ログ倉庫に格納されています

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