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
0184デフォルトの名無しさん (アウアウカー Sa55-EKU2)
垢版 |
2018/01/11(木) 11:04:46.69ID:oCnGxyW+a
>>183
非効率だよな
0185デフォルトの名無しさん
垢版 |
2018/01/11(木) 12:08:37.79
自分でコード書かないと npm left-pad みたいな問題が起きる

ブラックボックス的に使う部分と内製化する部分はきっちり区別して
内製部分はすべてのコードを完璧に把握しておくべきだ
0186デフォルトの名無しさん (アウアウカー Sa55-EKU2)
垢版 |
2018/01/11(木) 14:34:55.01ID:xUZeJB/aa
>>185
そりゃコードは把握すべきだよ
けど基本全部他かりゃ引っ張ってくりゃ解決するんだよなプログラムなんざ
プログラマーを神格化する風潮やめようぜ
0193デフォルトの名無しさん (ワッチョイ c576-01qY)
垢版 |
2018/01/11(木) 23:02:15.41ID:/sH2FBYP0
いやしかし、ひどい質問だなw
プログラムどころかアルゴリズムの時点で特許がどうの騒ぐ時代なのに、プログラムを全世界で共有とか頭悪すぎる。
0194デフォルトの名無しさん (ワッチョイ 6d9f-QpsD)
垢版 |
2018/01/12(金) 03:12:29.92ID:a7+Gi3xg0
部分的にはライブラリの配布みたいな感じで出来てはいるけどな。
0195デフォルトの名無しさん (ワッチョイ 11d0-rzLw)
垢版 |
2018/01/12(金) 03:27:24.54ID:2CbWWRaV0
正直車輪の再開発なんていってたら商売成り立たないよな
ほかの人に見せて第三者がそのコード使ったら普通に嫌だと思うんだけどコードの共有化とか利益と競争を考えてない綺麗事じゃないか?
コード使い回しなんて実際問題、会社内ぐらいでしかやらんだろ
0197デフォルトの名無しさん
垢版 |
2018/01/12(金) 11:55:16.87
GNU汚染問題もあるし出所の怪しいコードをやたらとホイホイ取り込めないよな
0199デフォルトの名無しさん (アウアウカー Sa55-f6zg)
垢版 |
2018/01/12(金) 17:10:11.05ID:L71nmxDMa
何も見ないで独自に作ってもある日サブマリン特許にやられたりする
0201デフォルトの名無しさん (ワッチョイ a58a-oih1)
垢版 |
2018/01/12(金) 17:19:40.33ID:oHmTflkZ0
ソフト特許権絡みの問題なんて余程優れたアルゴリズムを実現でもしない限り発生しないだろ
少なくとも車輪の再発明レベルでは問題が起きようがない
ライセンス関係の問題の殆どは著作権絡みであって特許権の問題ではない
0202デフォルトの名無しさん (ワッチョイ 59f4-UJUP)
垢版 |
2018/01/12(金) 18:00:17.09ID:NPCVz5+f0
卑怯なことは一切せずに作ったオリジナルなものを
突然パクり呼ばわりされるんだぜ?
開発者としてこれ以上の侮辱があるかよ
いつそうなるかの予測もほぼ不可能だし
それで金よこせってまるで強盗かヤクザの集金だろうが
0206デフォルトの名無しさん (ワッチョイ 3d93-j9tc)
垢版 |
2018/01/12(金) 19:19:49.18ID:dSWv3bkd0
自分で発明したものを後から特許とられて…って話でなければ
先に出願しとけってのは無茶、というか超時空理論だわな。

「サブマリン特許で攻められるのが嫌なら
何か作る前に全ての特許を調べておけ」という主張には、
「皆がそんな調査をする必要がある社会では何も生み出せないだろう」
という意見を出したいね。
0207デフォルトの名無しさん (ワッチョイ a58a-8O9q)
垢版 |
2018/01/12(金) 19:35:56.68ID:oHmTflkZ0
いやいや製品開発では商品企画段階で先行技術調査はやってて当たり前のことだぞ
後で他社から特許侵害の訴えを受けると面倒くさいことになる
というか大手メーカの組み込みソフト技術者は、技術レポート作成や特許出願の年間ノルマが課せられることも多い
例え特許として特許庁に認められなくても出願したという実績さえあれば先行技術として認められる
サブマリン特許といえども既に世の中に公知されている先行技術のあるものに対して実施料を請求することは出来ない
米国はサブマリン特許に見られるように特許を攻撃戦略をとすることが多いが、日本企業の場合は防衛が特許戦略の中心とする傾向が強い
0208デフォルトの名無しさん (ワッチョイ a58a-8O9q)
垢版 |
2018/01/12(金) 19:57:45.41ID:oHmTflkZ0
話が脱線気味だけど、特にソフトウェアに限って言えば余程のことがない限りコードの中身そのものが問題になることは少ない
ただし製品の制御方法についてはソフトが問題になることはある
例えば、炊飯器のご飯の炊き方や洗濯機の攪拌方法やエアコンの運転方法など、これらは特許(パテント)の出来損ないのペテントで
そのノウハウはがっちり固められてるし、下手すりゃ権利の侵害問題に発展することもある
ただし繰り返しになるけど、純粋なコードの権利については特許というよりは著作権の方が問題になることが多い
0210デフォルトの名無しさん (アウアウカー Sa55-EKU2)
垢版 |
2018/01/12(金) 20:20:38.77ID:AcL8GFCQa
プログラミングあんま知らんけどコードって著作権あるの?
俺普通に本とかの模写しまくってるんだけど...
もちろん勉学目的で商用してるわけじゃないけど大丈夫だよな...?
0211デフォルトの名無しさん (ワッチョイ a58a-8O9q)
垢版 |
2018/01/12(金) 20:23:47.74ID:oHmTflkZ0
特許に必要なのは、新規性と独創性と再現性
技術的に高度でも既に知られているものは特許にはならない
技術的にたいしたものでなくても今まで誰も考えつかなかったものは特許になる
ソフトウェアでも既に知られているアルゴリズムでは特許にならない
全く新しい理論に基づくアルゴリズムを実現すれば特許になる
0222デフォルトの名無しさん (ワッチョイ 6a12-0PCX)
垢版 |
2018/01/12(金) 23:05:54.72ID:t7pO81Ne0
既にある連結リストにはqsortは使えない(これは常人でも考えれば分かる)
後からどうしてもソートしたいならマージソートを使う(これは常人がすぐに思い付くモンじゃないので知らないと出来ない、つまりは考えても無駄)
0223デフォルトの名無しさん (ブーイモ MMc9-sUJ4)
垢版 |
2018/01/12(金) 23:14:51.66ID:b7j7QzhUM
>>210,212
著作権は商用かどうかは無関係。
個人で楽しむなどの目的で例外的に複製が認められるだけ。
もちろん勉強用なら複製は構わない。
それ以上の利用は本に明示してあることもある。
0226デフォルトの名無しさん
垢版 |
2018/01/12(金) 23:30:11.38
>>219
「以下のプログラムの (1) (2) の部分を作成し」の「(1) (2) の部分」が見つからない
0231デフォルトの名無しさん (ワッチョイ 6d9f-7doJ)
垢版 |
2018/01/13(土) 13:00:13.08ID:ZTdbWh7g0
だいたいの人は既に頭の中で解けている
0232デフォルトの名無しさん
垢版 |
2018/01/13(土) 13:27:35.73
>>219見てちょっと考えてみたけど、
初回だけ(topが未設定の場合だけ)場合分けで例外的な処理がいるの?
あと、大小で判定して挿入するとき、先頭もしくは末尾だけは例外的な処理がいるの?
かっこよくスマートに書けるやりかた教えて!
0235デフォルトの名無しさん
垢版 |
2018/01/13(土) 15:48:08.00
>>234
なんも見ずに書いてみたけど(コンパイルもしてないけど)
片方向リストにしたらこんな感じかなあ
見た感じスマートじゃないからたぶん無駄なことしてるんだろうけど

// 打席数、安打数は省略
typedef struct PLAYER_tag PLAYER;
struct PLAYER_tag {
char name[20];
PLAYER *next;
};
int main() {
PLAYER *top; // 先頭の要素
PLAYER *p; // 追加する要素
PLAYER *q; // 現在の要素
PLAYER *z; // 一つ前の要素
(省略)
top = NULL;
while (EOFでない) {
 // 1行読み込んで名前(name)、打席数、安打数を取得
 (省略)
 malloc(p, sizeof(struct PLAYER));
 memset(p, 0, sizeof(struct PLAYER));
 strcpy(p->name, name);
 
 // topが未設定の場合だけは例外的な処理
 if(top == NULL) {
  // 先頭に挿入
  top = p;
 } else {
  q = top;
  z = NULL;
  // リストの先頭から順に走査
  while (q != NULL) {
   // アルファベット順が大きい要素の直前に挿入
   if (strcmp(p->name, q->name) < 0) {
    if (z != NULL) z->next = p;
    p->next = q;
    break;
   }
   z = q;
   q = q->next;
  }
  // 末尾に挿入するときだけは例外処理
  if ((p->next == NULL) && (z != NULL)) z->next = p;
(省略)
0236デフォルトの名無しさん
垢版 |
2018/01/13(土) 15:52:19.19
>>235
先頭に挿入した場合の例外的な処理も必要だった

if (z != NULL) z->next = p;

if (z != NULL) {
z->next = p;
} else {
top = p;
}
0237デフォルトの名無しさん
垢版 |
2018/01/13(土) 16:02:34.49
>>235
>struct PLAYER
PLAYER
の誤りだった
0239デフォルトの名無しさん (ワッチョイ 11d0-EKU2)
垢版 |
2018/01/13(土) 16:27:20.61ID:dAIHjdGT0
割とマジでvolatileって何に使うんだ。。。?
0242デフォルトの名無しさん (ワッチョイ 6d9f-QpsD)
垢版 |
2018/01/13(土) 17:17:58.88ID:ZTdbWh7g0
>>239
volatile は揮発性のものってことで、読んだ次の瞬間に値が変わっている可能性がある変数に付けとくやつだ。
その変数は実際にはハードウェアによって変化するものに結びついているかも知れないし、他のプロセスや
スレッドによって書き換えられるものかも知れない。とにかくそのプログラムのメインの流れとは無関係に
変化する可能性があるということ。だから読む場合は必ずその変数の内容が読まれるようにコンパイルされる
必要がある。最適化してさっきから変更してないからレジスタに入ってる内容で代用しようみたいなコードに
なってはいけないわけだ。volatile を付けておくとそういう最適化をしなくなる。
0243デフォルトの名無しさん
垢版 |
2018/01/13(土) 17:32:56.34
>>239
知らないほうが幸せだよ
本当に必要なプロジェクトなら、過去に誰かがよく分からん不具合に何日・何週間も悩まされた末にコーディングルールに追加されてるから
0246デフォルトの名無しさん (ワッチョイ 6d9f-QpsD)
垢版 |
2018/01/13(土) 17:54:43.58ID:ZTdbWh7g0
setjmp(), longjmp() 使う時も volatile 使わねばならない時がある。
https://www.jpcert.or.jp/sc-rules/c-msc22-c.html

ま、longjmp() 使うこと自体が稀だろうとは思うが。
0248デフォルトの名無しさん (ワッチョイ 11d0-EKU2)
垢版 |
2018/01/13(土) 18:11:34.78ID:dAIHjdGT0
>>247
volatileは?
0249デフォルトの名無しさん (ワッチョイ 6d9f-QpsD)
垢版 |
2018/01/13(土) 19:14:06.13ID:ZTdbWh7g0
そういや上でスレッドとは書いたが、スレッド間の同期に volatile は使わない方がいい。

なぜスレッド間の同期にvolatileを使ってはいけない?
https://ja.stackoverflow.com/questions/1538/%E3%81%AA%E3%81%9C%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E9%96%93%E3%81%AE%E5%90%8C%E6%9C%9F%E3%81%ABvolatile%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84
0254デフォルトの名無しさん (ワッチョイ 6d9f-7doJ)
垢版 |
2018/01/13(土) 20:16:39.27ID:ZTdbWh7g0
>>253
そうそう。それでいい。
0255デフォルトの名無しさん (ワッチョイ 3d9f-0PCX)
垢版 |
2018/01/13(土) 20:30:50.57ID:bxTj5irD0
>>249
そのサンプルコード、ハンドシェークしてるんだが、そもそも普通これしないよな?

並列させたいだけなら、普通はシグナル(sleep/wake up)で同期させる。それの方が軽いはずだし。
スピンロックでハンドシェークって、完全非同期で独立動作してるときだが、
あまり用途は無いと思うんだが。
0259デフォルトの名無しさん (ワッチョイ 6a9b-p8jN)
垢版 |
2018/01/14(日) 00:51:15.96ID:+jsAfOue0
vbaを扱えるようになったんで次にC言語触ってみようと思うんですが、どう勉強してったらいいですか?これ作ればあらかた基礎コードや仕組みが学べるものってあります?
やることによるんだろうけど、例えばテトリス作れば基礎が固まるとか。ネット検索しても今一ピンとこなくて。
おすすめの参考書とかもあれば教えてください。
0261デフォルトの名無しさん (ワッチョイ ad7e-UJUP)
垢版 |
2018/01/14(日) 07:03:14.93ID:N+BeAo4b0
>>259
せっかくvba憶えたんならマシン語から入ってみては?
https://pf-j.桜.ne.jp/program/tips/vbasm.htm

ちな俺はBASIC->マシン語->Cで憶えたクチで
マシン語が透けて見えるCの特徴をありありと感じながら使えて
多重レベルポインタの**を全く悩まずにすんなり習得できた
0262デフォルトの名無しさん (ワイモマー MM21-62yH)
垢版 |
2018/01/14(日) 08:31:23.76ID:Ef+VW+YvM
>>259
コマンドラインで使えるミニツール(dirなど)を真似て作ってみたら?
標準入出力、ファイルアクセス、データ編集の基礎が身につくと思う。
0266デフォルトの名無しさん (ワッチョイ b5b3-aDaF)
垢版 |
2018/01/14(日) 11:22:32.01ID:D7wQbzM+0
>>259
Small-Cっていう C言語のサブセットがあって、
そのコンパイラを作るって本があったよ。
オレはこれで C言語の基礎を勉強した。
30年くらい前かな?
たぶん絶版で入手困難だと思う。

あと、アンドリュータネンバウム先生のMINIXオペレーティングシステムも勉強になる。
Linuxを作ったリーナストーバルズもアンドリュータネンバウム先生の教え子だったはず。
0268デフォルトの名無しさん
垢版 |
2018/01/14(日) 11:47:19.55
初心者は結城浩先生の
 新版C言語プログラミングレッスン-入門編-
あたりで学習しときなyo!
0271デフォルトの名無しさん (ワッチョイ 11d0-EKU2)
垢版 |
2018/01/14(日) 17:24:36.08ID:X58RAQQJ0
プログラミング初心者なんだけどコマンドプロンプトとかの知識って必要なん?
一応簡単なバッチファイル作れるレベルまでは来たんだけど
0274デフォルトの名無しさん (アウアウカー Sa55-f6zg)
垢版 |
2018/01/14(日) 17:51:22.52ID:q1SBtCCQa
>>271
君にとって必要かどうかは君がこれから何をするかによって変わる。
0275デフォルトの名無しさん (ワッチョイ 5e7f-o2Il)
垢版 |
2018/01/14(日) 22:04:36.32ID:t1pyzP2Y0
ファイルのIOの部分難解すぎて意味がわからない。
・文字列を処理したいのにchar型とかint型とか byte型とか
 出て来るしtry catchとかIOExceptionとか何なのかがよくわからない。
・なんとかOutputStreamとか なんとかReader Writerが
 おおすぎてどれを使っていいかわからない。
・オブジェクトを生成して別のコンストラクタの引数に渡している部分が
 何をしているのかさっぱりわからない。
・BufferedReader / Writerとかを使う必要があるのかないのかよくわからない。
・結局文字列を読み書きするのとバイトを読み書きするのが何が違いがあるの?
・for(item : list){}文は使えないの?
0276デフォルトの名無しさん (ワッチョイ 5e7f-o2Il)
垢版 |
2018/01/14(日) 22:05:03.57ID:t1pyzP2Y0
すみません、Javaのスレに書こうとして間違えました
0280デフォルトの名無しさん (ワッチョイ ea6e-EKU2)
垢版 |
2018/01/15(月) 19:03:01.00ID:WG2cD3TY0
プログラミング全く関係ねぇんだけど
組み込み系のプログラマーって電子制御とか電子回路、機械工学の知識必要ないん?
これ絶対プログラミングだけの知識で食っていける分野じゃねぇだろ
0281デフォルトの名無しさん (オッペケ Srbd-01qY)
垢版 |
2018/01/15(月) 19:07:26.61ID:nis3xk1Qr
必要ないわけ無いじゃんw
何でそんな勘違いにたどり着いたしw
■ このスレッドは過去ログ倉庫に格納されています

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