X



C言語なら俺に聞け 143
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ b375-rVGZ)
垢版 |
2017/10/27(金) 21:28:08.20ID:pAogLeJi0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

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

前スレ
C言語なら俺に聞け 142
http://mevius.2ch.net/test/read.cgi/tech/1502364083/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0069デフォルトの名無しさん (ワッチョイ 7102-rVGZ)
垢版 |
2017/10/30(月) 19:47:29.26ID:4jg/LOEr0
>>68
ストリームを作ってるのがカーネルだからだろ。
0076デフォルトの名無しさん (ワッチョイ 497f-20SA)
垢版 |
2017/10/30(月) 20:16:20.68ID:6zI0CLS+0
>>70
なんでC言語の話でlibstdc++が出てくるの?

fopenやらのストリームなんて、setvbufの説明読めばバッファリングしてるだけって理解できるだろ
カーネルやらlibcのソースなんて読む必要性なんてねーよ
0077デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/30(月) 20:33:32.20ID:LaVtZ0d2p
ストリームなんて、なんでもかんでも先頭から順番に処理するってだけの概念だけどな。
ランダムアクセスメモリーも読み飛ばしと巻き戻し駆使してアクセスするのさ。
0078デフォルトの名無しさん (ワッチョイ 719f-Akqv)
垢版 |
2017/10/30(月) 23:47:44.78ID:nQXUW6Dj0
>>49
マシン語には何でもできるねw
0082デフォルトの名無しさん (ワッチョイ 1387-jmG0)
垢版 |
2017/10/31(火) 08:48:27.57ID:sbQ4uuQC0
>>79
それって、htons()のあるライブラリ間違えたら全く意味が無いマクロだよね?
0087デフォルトの名無しさん (ワッチョイ 719f-Akqv)
垢版 |
2017/10/31(火) 23:37:41.07ID:TMBeGW2t0
>>82
ライブラリというか、ヘッダだな。#include <arpa/inet.h> とか。

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

それと一応 POSIX.1‐2008 のようなので使えるコンパイラは多いんじゃないかな。
0088デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/11/01(水) 02:46:02.61ID:TUg4iVeD0
今ってC言語でwin32とかで作るアプリに基本構造とかなしで作る感じなの?
0090デフォルトの名無しさん (ワッチョイ 1387-jmG0)
垢版 |
2017/11/01(水) 09:27:14.69ID:AnlYMxNy0
イベントを拾って条件分岐みたいな部分は全部関数内に隠蔽された。
今は決まった名前のコールバック関数を埋めるだけのお仕事。
0093デフォルトの名無しさん (ワッチョイ 7181-/MqV)
垢版 |
2017/11/01(水) 14:12:00.47ID:0yoHAkyy0
実行時に必要なメモリーサイズが決まるようなプログラムだと必要。
最初から大きなメモリーを確保しても無駄になるかもしれないし、
当初想定したサイズでは足りなくなるかもしれない。
そういうときに使う。
0094デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/11/01(水) 14:12:15.55ID:Dwgab4vip
組み込みでは1度大きく確保したら後は自前で中身やり繰りするから、あんまり使わない。
0098デフォルトの名無しさん (ワッチョイ 1387-jmG0)
垢版 |
2017/11/01(水) 23:00:55.45ID:AnlYMxNy0
Linuxだからって、メモリーリークが無くなるワケじゃ無いからなぁ〜。
0101デフォルトの名無しさん (ワッチョイ edb6-zM96)
垢版 |
2017/11/02(木) 05:57:23.41ID:0ZjxmEGf0
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
http://labaq.com/archives/51880196.html
日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには?
https://bodoge.hoobby.net/columns/00013
はじめてボードゲームを作ってはじめてゲームマーケットに出店した ので、ひとり反省会をしてみる。
http://datecocco.hatenablog.com/entry/2015/11/26/000000
はじめて作ったボードゲームを売った話
http://nrmgoraku.hateblo.jp/entry/2017/05/17/210000
ボードゲームイベント「ゲームマーケット」から業界が見えた!
https://entertainmentstation.jp/61107
ボードゲームはどう作るのか、自分なりに考えた
http://roy.hatenablog.com/entry/2014/07/09/124824
オトナも遊べるボードゲーム!自作するといくらになるのか
http://www.d-laboweb.jp/special/sp312/
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
https://bodoge.hoobby.net/columns/00001
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
http://gigazine.net/news/20150820-board-game-crowdfunding/
0102デフォルトの名無しさん (ドコグロ MM61-r/51)
垢版 |
2017/11/02(木) 08:04:37.86ID:BfnVxeM2M
組み込みって言ってもピンキリだからなぁ
車のエンジン制御とかなら>>100が言うような感じだけど>>97が言うようなLinuxが載ってる機器のGUI回りとかだとその辺かなりアバウト
テレビみたいにインターネットブラウザとか載せてるとそもそも必要量を見積もれないし
0103デフォルトの名無しさん (スップ Sdc2-98vg)
垢版 |
2017/11/02(木) 17:15:09.25ID:UMCJ4RbSd
https://ideone.com/lGSKsq
漸化式を使って組合せnCmの値を表示するプログラムです
数字を大きくすると正しい結果が出ないので困っています(例えば45C11
修正箇所教えてほしいです
0105デフォルトの名無しさん (スップ Sd62-98vg)
垢版 |
2017/11/02(木) 18:20:01.37ID:aAcU+3M+d
>>104
入力はそこまで大きい値を入れるつもりはないのでintにしました
0107デフォルトの名無しさん (スップ Sd62-98vg)
垢版 |
2017/11/02(木) 18:39:45.95ID:aAcU+3M+d
>>106
gはnとmの最大公約数
あとnCmは必ず整数になるのでn-1Cm-1/Bの部分も小数にならず割り切れて整数になると思うんです
n=Ag m=Bg (A.Bは互いに素)として
n/m*n-1Cm-1
=A/B*n-1Cm-1 (※A/Bは小数になる)
= A*(n-1Cm-1/B)
=(n/g)*(n-1Cm-1/(m/g))
として計算すればうまく小数になるのを避けられるのではないかと考えました

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

ということは右辺が整数になるときn-1Cm-1/Bが整数です
B=m/gなのでつまり(n-1)C(m-1)/(m/g)は整数ではないでしょうか
0110片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ 99b3-iQJQ)
垢版 |
2017/11/02(木) 19:55:21.08ID:JDKI/Gfo0
nCmが整数なので、A*((n-1)C(m-1)/B)も整数であろう。
しかし、((n-1)C(m-1)/B)が整数と判断するのは論理の飛躍だ。

n=2, m=2, g=1と仮定すると、A=n/g=2/1=1, B=m/g=2/1=2.
すると、((n-1)C(m-1)/B)=(1C1)/2となって整数ではない。
0111デフォルトの名無しさん (スップ Sd62-98vg)
垢版 |
2017/11/02(木) 19:59:15.85ID:aAcU+3M+d
>>110
この漸化式は0<m<nという条件のもとなのでn=mの可能性はないです
0114デフォルトの名無しさん (スップ Sd62-98vg)
垢版 |
2017/11/02(木) 20:17:29.03ID:aAcU+3M+d
>>113
うーんやっぱりそうですか
ありがとうございます
0115デフォルトの名無しさん (スップ Sd62-98vg)
垢版 |
2017/11/02(木) 20:22:30.92ID:aAcU+3M+d
(n*n-1Cm-1)/m
と計算せず
(n/g)*(n-1Cm-1/(m/g))
と遠回りして計算したのは掛け算より前に割り算をして桁あふれを防止するためだったのですが、これだけではまだ読みが甘いみたいですね
0120デフォルトの名無しさん (ササクッテロラ Spf1-XwAf)
垢版 |
2017/11/02(木) 21:33:15.98ID:YtLG92Gup
πの計算みたいに配列でやればいいんだよ。
0124デフォルトの名無しさん (ワッチョイ 4287-XwAf)
垢版 |
2017/11/03(金) 01:25:33.04ID:exxwx2Ub0
配列の四則計算かw
とりま、1桁辺り1バイトからやって行くと良い。
アルゴリズムは手計算方式で。
0128デフォルトの名無しさん (ワッチョイ 4287-XwAf)
垢版 |
2017/11/03(金) 11:50:36.80ID:exxwx2Ub0
そーゆーのって、C言語じゃなくて、ライブラリの仕様なんで、環境わからないと誰も答えられないよな。
0129デフォルトの名無しさん (ワッチョイ 319f-1mNv)
垢版 |
2017/11/03(金) 12:27:14.54ID:1lWviljw0
プログラム中で扱う時はiconv()で変換しちゃうと楽だな。Windowsは知らんがOSが変換やってくれなかったっけ?忘れた。
0130デフォルトの名無しさん (ワッチョイ 99b3-KOaZ)
垢版 |
2017/11/03(金) 16:53:04.29ID:kt+ZN5MJ0
#include <stdio.h>

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

return 0;

}

素数判定用のやつ作ったんだが動かない
問題点教えてください
0131デフォルトの名無しさん (ワッチョイ 4287-XwAf)
垢版 |
2017/11/03(金) 16:58:25.19ID:exxwx2Ub0
さすがにネタだよな?
0135デフォルトの名無しさん (ワッチョイ 4287-XwAf)
垢版 |
2017/11/03(金) 23:33:54.94ID:exxwx2Ub0
ネタじゃ無かったんかいw
0137デフォルトの名無しさん (ワッチョイ e175-e3AS)
垢版 |
2017/11/04(土) 03:05:14.26ID:bSw/g7Kd0
おまえらバカにすることしか頭に無いのか
初心者ならこういうこともあるだろうに
0140デフォルトの名無しさん (ワイモマー MMa5-puHV)
垢版 |
2017/11/04(土) 10:16:02.36ID:t9DikZnoM
古代においては、(1 == y)としておけば、間違って(1 = y)とした時にコンパイルエラーで発覚する、という言い伝えが有った。
>
>#include <stdio.h>
>
>int main(void) {
> int x, y;
> scanf("%d", &x);
> y = x;
> while (x % (y -= 1))
> ;
> if (1 == y) {
> printf("入力値は素数です¥n");
> } else {
> printf("入力値は素数ではありません¥n");
> }
>
> return 0;
>}
>
0141デフォルトの名無しさん (ワッチョイ 319f-1mNv)
垢版 |
2017/11/04(土) 13:31:32.96ID:3FaXzC+X0
>>140
あーそうだな。今でもたまにそう書いてあるソースを見かける。
いつも自分ではやってないので違和感があるw
まあでもCみたいな言語だと本当はそう書いておいた方が良いんだろうけどね。

そう言えばこの頃のコンパイラはifで代入だけしてるようなのは見つけて警告出してくれるな。
0147デフォルトの名無しさん (ワッチョイ 2e80-frTj)
垢版 |
2017/11/04(土) 15:27:20.00ID:FdHKGPou0
リテラルには代入できないから、リテラルを左側へ書いておく

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

でも、トヨタのように、5/100 しか取れない企業もある。
95も違反してるw
0148デフォルトの名無しさん (ワッチョイ 4193-ZDq4)
垢版 |
2017/11/04(土) 16:10:54.87ID:XesRBOxx0
>>140 の話は >>1 の参考サイトにも出てる話だね。
C FAQ 日本語訳 ttp://www.kouno.jp/home/c_faq/
17.4 に載ってる。

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

コンパイラがオプションを備えてるなら警告を出させるのが良いわな。
0150デフォルトの名無しさん (ワッチョイ e175-e3AS)
垢版 |
2017/11/04(土) 20:33:34.59ID:bSw/g7Kd0
トヨタ社員乙
0152デフォルトの名無しさん (ワッチョイ 6e3e-cSXK)
垢版 |
2017/11/05(日) 16:44:19.44ID:rSDVGL6P0
全員が同じレベルで言語の仕様や処理系の実装を理解しているわけじゃないからなあ。
最底辺のレベルを合わせる為にMISRAのような約束事が有用であろう事は想像できるんだが…

俺、車業界のソフト屋じゃなくて良かったと思うわ。
いや、むしろ、いっその事、強制された方が楽か?
0154デフォルトの名無しさん (ワッチョイ 62ee-S32u)
垢版 |
2017/11/05(日) 20:23:18.52ID:AvV+p+8R0
COBOLの二の舞
0155デフォルトの名無しさん (ワッチョイ 4150-lboT)
垢版 |
2017/11/05(日) 20:37:42.87ID:Dhy1E5e10
初心者です。
C言語には標準出力関数がいくつかあって気になったのですが、

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

などと書くのと、

printf(
  "文字列\n"
  "文字列\n"
  "文字列\n
);
のように書くので結果は同じようになると思うのですが、速度やリソースの消費に違いはあるのでしょうか?
どちらが速いとかメモリ消費が少ないとかあれば教えていただきたいです。
0158デフォルトの名無しさん (ワッチョイ e18a-Dqmo)
垢版 |
2017/11/05(日) 21:09:58.63ID:oA1U3DCD0
putsだと自動的に改行されんのか
0160デフォルトの名無しさん (ワッチョイ 9d7f-lboT)
垢版 |
2017/11/05(日) 21:19:49.85ID:Z/yFjIMy0
>>157
stdoutがline bufferedなら、どっちもwriteが3回呼ばれる

言語規格的には解析処理のあるprintfのほうが遅そうだけど
これぐらい単純なprintfだと、gcc/clang辺りでコンパイルするとputsに最適化される
副作用諸々でputs自体の呼び出し回数を減らすことはないから、puts1回の呼び出しで済むprintfのほうが早い
0161デフォルトの名無しさん (ワッチョイ e175-e3AS)
垢版 |
2017/11/05(日) 21:26:10.62ID:pE+6s3oz0
すっげー
物知りだなぁ
0162 ◆QZaw55cn4c (ワッチョイ 2260-xBM6)
垢版 |
2017/11/05(日) 21:29:46.85ID:cePuEsTc0
>>160
それはさすがになさそうだ…
printf()/vfprint() のCのコードを#include しているわけではなく、単にリンカがランタイムのコードをリンクしているだけなのでは?
いいかえると、printf() がCで書かれており、printf() もコンパイルするのなら最適化がかかるだろうが、さすがにそうじゃないだろう?
0163デフォルトの名無しさん (ワッチョイ e175-e3AS)
垢版 |
2017/11/05(日) 21:31:03.45ID:pE+6s3oz0
もうさぁ実測でいいよね
■ このスレッドは過去ログ倉庫に格納されています

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