トップページ⇒tech
1001コメント282KB

C言語なら俺に聞け(入門編)Part 96

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/02/04(土) 03:01:40.24
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 95
http://toro.2ch.net/test/read.cgi/tech/1326459906/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 156代目
http://toro.2ch.net/test/read.cgi/tech/1328276597/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
0237デフォルトの名無しさん2012/02/08(水) 00:45:03.52
またヘボがわけのわからんもの出してきたな…
0238デフォルトの名無しさん2012/02/08(水) 00:46:48.19
>>237
えっ?おまえが書いたんじゃなかったの?w >>236
0239デフォルトの名無しさん2012/02/08(水) 00:50:26.07
なんだ、英文のがよっぽどまともじゃないか。
http://en.wikipedia.org/wiki/High-level_programming_language
0240デフォルトの名無しさん2012/02/08(水) 00:51:27.59
低級高級なんて感覚的なもんにちゃんとした定義があると思ってるのか
ハードウェアよりであれば低級
Cが高級だったのは昔の話
0241デフォルトの名無しさん2012/02/08(水) 00:54:45.23
Low-level programming languageのwikiには、一般には機械語かアセンブラ言語を指すって
書いてあるけどね。。

In computer science, a low-level programming language is a programming language that provides little or no abstraction from a computer's instruction set architecture. Generally this refers to either machine code or assembly language.
0242デフォルトの名無しさん2012/02/08(水) 00:55:04.67
>>239
翻訳してるだけじゃねーか
しかもTalkで議論されてるw
0243デフォルトの名無しさん2012/02/08(水) 00:56:59.15
激しく
ど う で も い い
0244デフォルトの名無しさん2012/02/08(水) 00:57:06.02
>>242
いやいや、翻訳しただけだよもちろん、そう書いてあるよってだけだからw
0245デフォルトの名無しさん2012/02/08(水) 00:58:13.06
あ、>>242が>>241に対して言ってるのかと思った
>>244は無視して
0246デフォルトの名無しさん2012/02/08(水) 00:59:55.63
>>243
乙
一般に低水準(低級)言語と言った場合は機械語かアセンブリ言語を指す
0247デフォルトの名無しさん2012/02/08(水) 01:16:48.07
>>240
0248デフォルトの名無しさん2012/02/08(水) 01:21:06.85
www
0249デフォルトの名無しさん2012/02/08(水) 01:27:33.93
変数が多く、重い様に感じます
どのようにすれば軽くなりますか?
また、ifよりswitchを使用したほうが重くなるのでしょうか?

http://codepad.org/KPVko90j
0250デフォルトの名無しさん2012/02/08(水) 01:29:36.88
>>249
うっせーバカ
0251デフォルトの名無しさん2012/02/08(水) 01:31:49.96
>>249
最適化オプションいれてみた?
-Osとか-O3とか
0252デフォルトの名無しさん2012/02/08(水) 01:34:03.04
だから厳密な定義なんてないっての
http://stackoverflow.com/questions/5020246/how-low-does-c-go-as-a-low-level-language
こんだけ盛り上がる話題だぞ
0253デフォルトの名無しさん2012/02/08(水) 01:36:05.84
つまりOOP未満は低級だと言いたいやつが多いと言うことだな
0254デフォルトの名無しさん2012/02/08(水) 01:36:53.53
だったらこんな古典言語スレに来なきゃいいのに
0255デフォルトの名無しさん2012/02/08(水) 01:50:47.06
>>251
-Osや-O3とは何でしょうか?
特に最適化オプションは行っていません
0256デフォルトの名無しさん2012/02/08(水) 01:53:34.37
>>255
簡単に行ってしまえば、多少下手な書き方しても、コンパイラが
その処理の意味を理解して、一番無駄のないマシン語に書き換えて
くれるようにするオプションです

>>249程度のソースなら、最適化オプションを入れれば、
ifやswitchなどほぼ関係なくなります
0257デフォルトの名無しさん2012/02/08(水) 01:54:13.89
>>249
http://codepad.org/lFsULIT3
0258デフォルトの名無しさん2012/02/08(水) 01:54:58.63
>>256
了解しました
有難う御座います
0259デフォルトの名無しさん2012/02/08(水) 01:55:43.81
出たwww
もうインデントとかしないで、1行にズラーと並べちゃえよw
0260デフォルトの名無しさん2012/02/08(水) 01:56:17.42
>>257
貴重なサンプル有難う御座います
0261デフォルトの名無しさん2012/02/08(水) 01:56:29.95
>249
まともなコンパイラーで最適化オプション指定すれば条件分岐は全く使われないから
読みやすいコードを書くことに専念するべき。
switch分を使いたいのは、その条件文でフラグビット立ててジャンプテーブルを自作するのだろうか
可読性が損なわれるので現在のコンパイラーではやるべきでは無い。

0262デフォルトの名無しさん2012/02/08(水) 01:58:33.22
>>259
ヘボな上にセンスもないんだな。
0263デフォルトの名無しさん2012/02/08(水) 01:59:26.98
このスレは、簡単なCの宿題を、極力少ない行数で書いて
「おれってすげぇだろ」ってスレだったのかw

理解したwww

(このレスに対して返されるであろうレス)
 この程度で凄いとか言ってるおまえは相当な低能だなwww
0264デフォルトの名無しさん2012/02/08(水) 02:00:29.75
>>262
センスもくそも、そんなfor内につっこむソース書くほうがセンスなしw
0265デフォルトの名無しさん2012/02/08(水) 02:00:31.81
>>249
重さうんぬんはプログラムを完成させてプロファイル取ってから考えればいい。
もちろん、あらかじめ何が問題になるか予想できる場合は対策はすべきだけどね。
0266デフォルトの名無しさん2012/02/08(水) 02:02:33.21
>>264
理解できないからってファビョるなよ。
0267デフォルトの名無しさん2012/02/08(水) 02:03:49.47
>>261
わかりました
読みやすさを優先させた方が良いですね
有難う御座います
0268デフォルトの名無しさん2012/02/08(水) 02:06:14.90
>>265
了解しました
有難う御座います
0269デフォルトの名無しさん2012/02/08(水) 02:06:38.98
>>261
> まともなコンパイラーで最適化オプション指定すれば条件分岐は全く使われない
なんてありえるのか?
0270デフォルトの名無しさん2012/02/08(水) 02:07:05.67
>>266
この程度が理解できないようじゃ話にならんだろw
そんなこと言うくらいだから高度な書き方だとでも
思ってるのか?もしかしてw
仕事ではやんなよ、読みにくいだけだからw
0271デフォルトの名無しさん2012/02/08(水) 02:08:28.11
じゃぁファビョるなよ。
0272デフォルトの名無しさん2012/02/08(水) 02:10:28.53
乙
0273デフォルトの名無しさん2012/02/08(水) 02:11:49.29
わざわざ糞コードに書き直してる時点で性格悪いだろ
0274デフォルトの名無しさん2012/02/08(水) 02:14:30.17
口だけ出すヘボよりマシなんじゃなイカ?
0275デフォルトの名無しさん2012/02/08(水) 02:14:45.36
ん?わざわざprintf開いて三項演算で書いてる糞ソースのこと?
0276デフォルトの名無しさん2012/02/08(水) 02:17:51.03
横からでアレだが、
>>275
お前もヘボいことばっか言ってないでちょっとは貢献したらどうだ?
0277デフォルトの名無しさん2012/02/08(水) 02:20:40.69
>>257
少なくともこれは貢献でも何でもない
ただの自己満ソース
自分で書いて一人でニヤニヤしてればいいのに
わざわざ晒して恥ずかしい
0278デフォルトの名無しさん2012/02/08(水) 02:21:31.01
だからそんなこと言うならお前が何か貢献しろよ。
日本語も読めないのか?
0279デフォルトの名無しさん2012/02/08(水) 02:21:42.18
三項演算子のネストにカンマ演算子多用とか普通に糞コードですから、
そういうのは一人でLispとかでやっててください
0280デフォルトの名無しさん2012/02/08(水) 02:24:36.72
>>257
こんな書き方もできるんだぁ
すごーい
勉強になるわぁ


これでいいかな。。
0281デフォルトの名無しさん2012/02/08(水) 02:27:40.62
>269

index = w;

index << 3;

index &= z

index *= ofset-of-functions

jmp [base-address + index]
0282デフォルトの名無しさん2012/02/08(水) 02:41:52.07
間違えた
×index &= z
○index |= z
0283デフォルトの名無しさん2012/02/08(水) 02:43:56.43
そんなコンパイラはないだろ。
あるんだったらなんてのか教えてくれ。
0284デフォルトの名無しさん2012/02/08(水) 02:51:00.90
こうだな
index = w;

index << 3;

index |= z

address = addres_table[index];

jmp address;
0285デフォルトの名無しさん2012/02/08(水) 03:57:03.99
>>249
標準関数の呼び出しはコンパイラーの最適化オプションで一回の呼び出しにまとめられないので
出力文字列はバッファーに貯めて、最後に一度だけprintfを呼ぶべき
それによってコンパイラーが出来る最適化の範囲が大きくなる

速度にクリティカルなプログラムを書くなら、ifかswitchなどにこだわるより、
メモリーアライメントなどをよく勉強して効率のよいデーター構造は何かなどを
意識した方が良い。
0286デフォルトの名無しさん2012/02/08(水) 06:22:05.47
printf()が問題になるようならそもそもの設計が間違ってるけどな。
0287デフォルトの名無しさん2012/02/08(水) 06:41:44.73
>>249の無駄な判定には誰も突っ込まないところが凄いw
0288デフォルトの名無しさん2012/02/08(水) 06:47:20.88
それはprintf()にくらべたら無視できる。
0289デフォルトの名無しさん2012/02/08(水) 06:49:27.90
それにロジックは>>257で解決してんじゃねーか?
0290デフォルトの名無しさん2012/02/08(水) 07:00:04.96
>>257も>>249よりマシだけど無駄判定じゃねーかw
0291デフォルトの名無しさん2012/02/08(水) 07:15:31.95
じゃぁprintf()1回で模範回等頼んだ>>290
0292デフォルトの名無しさん2012/02/08(水) 07:23:29.97
printf("%d%s\n", i, m3 == 3 ? (m3 = 0, m5 == 5) ? m5 = 0, "FizzBuzz" : "Fizz" : m5 == 5 ? m5 = 0, "Buzz" : "");
0293デフォルトの名無しさん2012/02/08(水) 07:34:32.99
これでどや。
http://codepad.org/yNjC44pw
0294デフォルトの名無しさん2012/02/08(水) 08:07:27.08
ロジック以前に、無理矢理な三項演算とカンマつなぎをどうにかしろw
0295デフォルトの名無しさん2012/02/08(水) 08:10:31.56
【韓国ブログ】台湾にあふれる日本文化…ここは一体どこの国?
【社会ニュース】 2012/02/07(火) 12:08
http://news.searchina.ne.jp/disp.cgi?y=2012&d=0207&f=national_0207_100.shtml

  ワーキングホリデーで台湾に滞在する韓国人ブロガーの「JK」さんは、
現在生活している所が日本なのか台湾なのか分からなくなるほど、台湾には日本文化が浸透していると語った。


  「ときどき台湾が日本なのか台湾なのか分からなくなる時がある。
なぜなら台湾には日本企業があふれているからだ」と述べ、台湾はどこに行っても日本のフランチャイズ店ばかりが目に入ると語った。
ブログには、台湾の繁華街に日本文化が浸透していること伝えるため、「和民」「ユニクロ」「三越」「ダイソー」など日本企業の看板が並ぶ台湾の街の写真を掲載した。

  台湾が日本のように感じる要因として、多くの台湾人女性が日本のファッションや日本のヘアスタイルを取り入れていることや、
日本人観光客が多く日本語が飛び交っていること、漢字文化圏のため看板には漢字が使われていることなどを挙げた。

  日本文化が定着するあまり、JKさんが日本人客に間違われるケースもあったという。「店員に英語で話しかけると、日本語で応対しようとしていた。
私がアジア人だから日本人だと錯覚したのだろう」とエピソードを紹介した。

  台湾に進出する日本企業の中でも、JKさんが特に気に入っているのは必要なものがすべて揃う「ダイソー」だそうで、売られている多くの商品に日本語の説明書きがあるため、
やはり自分が日本にいるような錯覚に陥るのだと述べた。(編集担当:新川悠)
0296デフォルトの名無しさん2012/02/08(水) 08:36:01.09
三項演算子とカンマ演算子に狂ったように固執してるやつが
初心者に糞ソースを常駐解答するスレです
0297デフォルトの名無しさん2012/02/08(水) 08:52:27.65
日本は近い将来放射能と首都崩壊で消えてなくなるから
いまのうちにもっとたくさん台湾に日本の文化を継承してもらいたいね
0298デフォルトの名無しさん2012/02/08(水) 10:25:43.54
>>293
http://codepad.org/JQxv8o1s
0299デフォルトの名無しさん2012/02/08(水) 10:51:06.34
#include <stdio.h>

int main(){
int i;
char *s = "Fizz¥0Buzz";

for (i = 1; i <= 100; i++) {
if (i % 3 == 0)
printf(s);
if (i % 5 == 0)
printf(s + 5);
if (i % 3 && i % 5)
printf("%d", i);
putchar(' ');
}

return 0;
}
0300デフォルトの名無しさん2012/02/08(水) 10:57:18.21
速度を気にする時に%なんて使うもんじゃないよね。
0301デフォルトの名無しさん2012/02/08(水) 10:59:52.60
%やめて速度を気にするのなら、条件判定についてもちゃんと考えるべきだよねw
0302デフォルトの名無しさん2012/02/08(水) 11:30:26.34
>>299
printfに奇数アドレス指定すんなスットコドッコイ
0303デフォルトの名無しさん2012/02/08(水) 11:44:50.19
>>302
char *にそんな制限ないよ。
0304デフォルトの名無しさん2012/02/08(水) 13:38:48.75
>>302
printfにそんなしばりねーわ、このタコ。
お前1回休みな。
0305デフォルトの名無しさん2012/02/08(水) 13:56:39.73
特殊な環境なのかね?
奇数アドレスの参照発生で例外投げるとか、ペナルティで遅くなるとか
0306デフォルトの名無しさん2012/02/08(水) 13:58:47.54
奇数アドレスからのワードアクセスかなんかと勘違いしてるんだろ。
今時奇数アドレスって言うのもアレだけどな。
0307デフォルトの名無しさん2012/02/08(水) 14:15:22.32
いやいや、速度の話してるんだから
関数に渡すポインターのアドレスはCPUのメモリーアクセスアライメントに合わせろよ(w
memcpyのasmソースよく見ろって
0308デフォルトの名無しさん2012/02/08(水) 14:26:49.84
意味無し。
0309デフォルトの名無しさん2012/02/08(水) 14:31:05.98
>>307
なんでmemcpyが出てくるんだよ。
どうせならprintf()のソースを見ろよ。
0310デフォルトの名無しさん2012/02/08(水) 14:34:20.51
開始アドレスを整列させても、どうせ全部スキャンするんだから、
影響なんてあるわけがない。
0311デフォルトの名無しさん2012/02/08(水) 14:36:37.54
アライメントとかそのへんの単語を最近覚えて使いたくてしょうがなかったんだろ
駆け出しの頃にはよくある病気だから暖かく見守ってやりなよ
0312デフォルトの名無しさん2012/02/08(水) 14:37:54.61
memcpy は block move で済むからアドレッシングによる差が出るだろうけど

printf は format 文字列のパースや引数列の文字列化作業なんで
1文字ずつ逐次やる(=1バイト単位で捜査する)しかないんじゃないの?
その捜査の過程でペナルティ発生させるような気配がするけど
0313デフォルトの名無しさん2012/02/08(水) 14:45:29.76
覚えたてのお経をとなえてみたのか。本当に>>50はダメな奴だな。
0314デフォルトの名無しさん2012/02/08(水) 15:10:17.42
>312

どう考えてもビットマスクするだろ

このスレは実務経験の無いアホばっかりだな
0315デフォルトの名無しさん2012/02/08(水) 15:13:22.87
ビ ッ ト マ ス ク ? ? ?
0316デフォルトの名無しさん2012/02/08(水) 15:14:07.41
>>314
で、printf()のソースは確認したのか?
0317デフォルトの名無しさん2012/02/08(水) 15:18:11.04
>>314
SSE/MMX 使った画像処理とかで、境界とそれ以外に場合分けして処理するぐらいなら実装したことあるけど
printf の実装をしたことがないのでなんとも
0318デフォルトの名無しさん2012/02/08(水) 15:19:40.56
極限まで好意的に考えてRISC系のみでx86でプログラミングしたことないのかな。
0319デフォルトの名無しさん2012/02/08(水) 15:26:14.91
>>318
RISC系だって実際の作業効率考えたらコンパイラに最適化を任せた方がいい。
たぶんSC/MPレベルのコントローラチップを想定してるんだろう。
0320デフォルトの名無しさん2012/02/08(水) 16:18:42.84
class A
{

private m(){}

private b(){}


}

これをC言語で似たようにして書く方法はありませんか?
0321デフォルトの名無しさん2012/02/08(水) 16:23:05.97
1つのファイルに入れてstaticつければいい。
0322デフォルトの名無しさん2012/02/08(水) 17:05:19.14
http://codepad.org/eXgCPWT1

ダイクストラ法で最短経路を
求めるプログラムを拾って改変したのですがエラーが出てしまいました
これの原因は何でしょうか?
0323デフォルトの名無しさん2012/02/08(水) 17:07:44.00
>>322
エラー行が赤くなってるんだから丹念に見ろよ
一つ目は18と21の間がカンマじゃなくてスペースになってるぞ

0324デフォルトの名無しさん2012/02/08(水) 17:09:16.85
>>323
自分がアホすぎて悲しい
ありがとうございました
0325デフォルトの名無しさん2012/02/08(水) 17:09:44.08
>320
typedef struct {
struct MyVtbl *vtbl;
} MyClass *pMyClass;
typedef struct MyClass MyClass;
struct MyVtbl{
void (*m)(pMyClass);
void (*b)(pMyClass);
};

static MyVtbl myVtbl;

pMyClass MyClassConstructor(){
myVtbl.m = func_m;
myVtbl.b = func_b;
MyClass *pClass = malloc(sizeof(MyClass));
pClass->vtbl = &myVtbl;
return pClass;
}

void m(pMyClass this){}
void b(pMyClass this){}
0326デフォルトの名無しさん2012/02/08(水) 17:11:12.60
>>322
, が足りない
0327デフォルトの名無しさん2012/02/08(水) 20:02:44.62
128ビット16進数の乱数をつくるにはどうすればいいですか?
0328 ◆QZaw55cn4c 2012/02/08(水) 20:21:27.74
>>327
32bit 乱数を出力してくれる系ならそれを 4つ組み合わせればよい。
それでだめな乱数もあるが、メルセンヌツイスタならほぼOKだ。

ggr メルセンヌツイスタ
0329デフォルトの名無しさん2012/02/08(水) 20:23:31.78
ほぼだってw
0330デフォルトの名無しさん2012/02/08(水) 21:36:00.84
最近ようやくメルセンヌツイスタって言葉を知ったので使いたくてしょうがなかったんだな
0331デフォルトの名無しさん2012/02/08(水) 21:55:45.18
最近は、ハード的に物理乱数生成するマイコン(SoC)あるから
それ使えるならそれがベストだ
0332デフォルトの名無しさん2012/02/08(水) 21:56:41.37
ベストじゃねーよカス
0333デフォルトの名無しさん2012/02/08(水) 21:57:03.64
あ、しまったここPC板だったw
ついつい組み込みの考えでレスを。。
0334デフォルトの名無しさん2012/02/09(木) 00:30:19.61
もう、ivy bridge専用でいいよ。
0335デフォルトの名無しさん2012/02/09(木) 03:00:15.30
最近知ったんだねっていうと昔から知ってますっていうからやめといたほうがいい
0336デフォルトの名無しさん2012/02/09(木) 03:06:16.66
お互い顔見えないからハゲとノノシるとフサフサですと言い返すみたいなもんだな
■ このスレッドは過去ログ倉庫に格納されています