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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/12/09(日) 23:18:13.67
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 110
http://toro.2ch.net/test/read.cgi/tech/1353148538/
★過去スレ
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++の宿題片付けます 161代目
http://toro.2ch.net/test/read.cgi/tech/1354070278/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0153デフォルトの名無しさん2012/12/14(金) 11:54:57.04
>>150
.soの方は位置独立コードが要求されるから、大抵のOSではコンパイルし直さないと無理。
0154デフォルトの名無しさん2012/12/14(金) 11:59:26.74
すいません教えて下さい。
外部参照について調べていたのですが
例 extern int func( char* );
char*の*はポインタ変数名を続けて書く意味でしょうか?
0155デフォルトの名無しさん2012/12/14(金) 12:02:53.90
>>150
.soは.oをリンクしちゃった結果で、
元のファイル名が失なわれてるから無理。
.aから.soはlinuxならできるような気がするけど、
-fPICじゃないので実行開始時のリンクが遅いかも。
0156デフォルトの名無しさん2012/12/14(金) 12:06:09.23
>>154
外部参照とは関係ないけど、そうだね。
関数プロトタイプでは、仮引数名を省略して型だけ書いてもいいので、
extern int func( char *p );
の意味。
0157デフォルトの名無しさん2012/12/14(金) 12:09:13.54
>>152
こいつみたいな炎上学習法を実践するクズが多くてウザい。
その筆頭がコテハンだから始末が悪い。
0158デフォルトの名無しさん2012/12/14(金) 12:30:59.03
>>156
即答ありがとうございます。m(_ _)m
0159デフォルトの名無しさん2012/12/14(金) 12:44:36.22
変換仕様%sでscanfを使うときカンマの後に&を付けないのはなんでですか?
付けても変わらないように思えるのですが
0160デフォルトの名無しさん2012/12/14(金) 12:45:07.03
すいませんageてしまいました
0161デフォルトの名無しさん2012/12/14(金) 12:49:13.55
>>159
char array[100];
char *p = array;
とすると、array も &array も同じ値になっちゃうので、
付けてもいいように見えてしまう。
だけど、&p と p は違うので、動作しない。
0162デフォルトの名無しさん2012/12/14(金) 12:50:04.43
char buff[256];
int data;

scanf("%s", buff);
scanf("%s", &buff[0]);
scanf("%d", &data);
0163デフォルトの名無しさん2012/12/14(金) 12:52:58.66
>>159
char s[10];
scanf("%s",&s[5]); //(「・ω・)「
scanf("%s",s[5]); //\(^o^)/
0164デフォルトの名無しさん2012/12/14(金) 13:20:59.80
>>157
顔真っ赤だな
死ねよゴミ
0165デフォルトの名無しさん2012/12/14(金) 14:06:54.49
>>164
ポインタ理解してないチンカスになに言われても全然答えないわけだが。
悔しかったらポインタ理解してから出直すことだ。w
0166デフォルトの名無しさん2012/12/14(金) 14:52:01.12
荒らしに構う奴は荒らし
0167デフォルトの名無しさん2012/12/14(金) 19:56:54.95
性的リンクって///
0168デフォルトの名無しさん2012/12/15(土) 00:37:58.89
恥ずかしながら初心者でDXライブラリ使ってるんですが
円と四角が同時に動くみたいな事をこのライブラリを使えばCでも書けるんですが
これって暗にDXライブラリの関数がスレッドの機能があるってことでしょうか?
0169デフォルトの名無しさん2012/12/15(土) 00:45:35.61
スレッドなくとも交互に描けば可能。ソースコード確かめろ。
0170デフォルトの名無しさん2012/12/15(土) 16:26:48.25
Linuxとかで uint32_t みたいな型を使ってるプログラムがあるんだけど
これを使うと「絶対的に」32ビットの大きさが確保されるの?
0171デフォルトの名無しさん2012/12/15(土) 16:33:42.23
それはtypedefの内容による。
0172デフォルトの名無しさん2012/12/15(土) 16:37:23.53
名前からしてどんな環境でも32bit unsignedであることを期待しているとは思う
0173デフォルトの名無しさん2012/12/15(土) 16:40:17.69
いまどきstdint.hなしの環境使ってるのか?
0174デフォルトの名無しさん2012/12/15(土) 17:21:25.76
stdint.h 見たら
typedef unsigned intuint32_t;
と書いてあった。
intって64bit環境だと64bitじゃないの?
0175デフォルトの名無しさん2012/12/15(土) 17:25:05.38
違うよ
0176デフォルトの名無しさん2012/12/15(土) 18:00:02.58
intは環境によってサイズが違うしlongも違う場合がある。
0177デフォルトの名無しさん2012/12/15(土) 18:03:07.80
一言で64ビット環境と言ってもたくさんある。

LPI64: long, pointer, intが64ビット
LP64: long, pointerが64ビット
LLP64: long long, pointerが64ビット

uint32_tはそれぞれの環境で32ビットになるようtypedefされている。
0178デフォルトの名無しさん2012/12/15(土) 18:12:15.63
> uint32_tはそれぞれの環境で32ビットになるようtypedefされている。

なるほど。ありがとうございます。
0179デフォルトの名無しさん2012/12/15(土) 18:24:39.86
いえいえ
0180デフォルトの名無しさん2012/12/16(日) 01:06:19.61
c言語ってコンパイルせずにインタプリタで実行して何か問題あるの?
basicと同じ順次実行言語だし何か困るの?って疑問に思いました。
0181デフォルトの名無しさん2012/12/16(日) 01:08:06.30
>>180
無いよ
インタプリタで実行も出来るよ
0182デフォルトの名無しさん2012/12/16(日) 01:11:33.85
>>181
インタプリタは何言語で作ったら一番良いですか?
やっぱり文字列とかの機能が多いperlとか?
0183デフォルトの名無しさん2012/12/16(日) 01:13:19.03
コンパイル、リンクは1回でいいよ
何回も実行する
0184デフォルトの名無しさん2012/12/16(日) 01:14:39.20
>>182
せっかくだからCで作れやw
0185デフォルトの名無しさん2012/12/16(日) 01:15:11.84
>>182
Rubyは、Cでかかれているそうです。黒魔術もつかわれてる(つかわれてた?)
black art
0186デフォルトの名無しさん2012/12/16(日) 01:18:52.01
C言語で標準正規分布の累積分布関数やその逆関数を計算することは可能でしょうか
エクセルでnormsdist関数やnormsinv関数を使用したファイルを作成したのですが
計算する数値の量が多すぎて1回の再計算で数十秒近く時間がかかってしまうため
直接C言語で計算するプログラムを作ればこの時間を減らせるのかなと考えています
プログラムに関する知識は現時点でゼロです
長くなりましたが、
1.C言語でプログラムを作ることでエクセルによる計算より時間を短縮することは可能か
2.可能だとして、全くの初心者がそのプログラムを作る難易度はどのくらいになるか
 (1日3時間勉強にあてることができるとして、何日かかるかを目安で)
この2点について、どうぞよろしくお願いします
0187デフォルトの名無しさん2012/12/16(日) 01:37:41.73
数値計算ライブラリを使えば速く動いて早く使える。
ゼロから自作するのは手間かかる。
0188デフォルトの名無しさん2012/12/16(日) 01:42:26.89
>>186
まずは計算量を減らす工夫できないか考えるのが先だろう。
アルゴリズムがクソだと言語とかライブラリ変えてもどうにもならない。
0189デフォルトの名無しさん2012/12/16(日) 01:46:33.97
速いかは知らんがこのソフトには累積分布関数の演算できるようだ。CやエクセルからもDLLとして使えると思う。未確認。

GNU Octave 2.1.x 日本語マニュアル
http://ja.wikibooks.org/wiki/GNU_Octave_2.1.x_%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB/%E7%B5%B1%E8%A8%88
0190デフォルトの名無しさん2012/12/16(日) 01:54:12.78
>>187>>188>>189
早速のご回答ありがとうございます
それぞれ試行してみたいと思います
本当にありがとうございました
0191デフォルトの名無しさん2012/12/16(日) 02:28:24.48
正規分布くらい自分で実装しても大したことないよ。
0192 ◆QZaw55cn4c 2012/12/16(日) 02:48:28.71
ボックスミューラー法とか
0193 忍法帖【Lv=3,xxxP】(1+0:5) 2012/12/16(日) 05:59:51.72
Cってさ、クラス使えないんだよ
知ってた?
0194デフォルトの名無しさん2012/12/16(日) 08:51:39.72
またチンカスがトンチンカンな事ほざいてるのか。
チンカスは最強のめるせんぬついすたーをとなえた。えぃっ。wwwww

>>186
excelが遅いんじゃなくて、多分キミのExcelシートの作り方が悪い。
normsdistは標準正規分布表引くだけ、normsinvは逆引きだけの処理なので、非常に高速。
normsdistやnormsinv使わないで値そのままにしても同じくらい時間かかるんじゃないか。
= normsdist(A1)
のセルを
= A1
に変更して時間計ってみろ。
0195デフォルトの名無しさん2012/12/16(日) 09:06:40.14
オレはお前がそんなにCを使いこなせていないことを知ってるぞ
0196デフォルトの名無しさん2012/12/16(日) 09:10:58.95
キサマなぜそれを
0197デフォルトの名無しさん2012/12/17(月) 16:24:12.08
C言語で音(音楽)を出力させるにはどうしたらよいのでしょうか??
0198デフォルトの名無しさん2012/12/17(月) 16:31:42.95
>>197
ハードウェア依存。言語の問題ではない。
0199デフォルトの名無しさん2012/12/17(月) 17:08:33.08
音源チップを直接扱うような低水準なことから
DirectXあたりを使った高水準なモノまで
いろいろできる

音源チップ用のコントローラとかなると
そりゃもうデバイスドライバあたりの面倒くささになる
0200デフォルトの名無しさん2012/12/17(月) 17:12:11.39
いろいろあるね
0201デフォルトの名無しさん2012/12/17(月) 17:31:50.54
Windowsなら
system("start music.mp3");
0202デフォルトの名無しさん2012/12/17(月) 17:35:47.80
>>201
最小化した状態で起動するなら
system("start /min music.mp3");
0203デフォルトの名無しさん2012/12/17(月) 17:36:05.55
自己解決しました
0204デフォルトの名無しさん2012/12/17(月) 20:01:46.44
ベル文字ってあるでしょ
音でないけど…
0205デフォルトの名無しさん2012/12/17(月) 20:03:57.70
うちは出るよ。
でも実際に音をならすのは端末の機能。
0206デフォルトの名無しさん2012/12/17(月) 20:05:19.32
環境依存?
0207デフォルトの名無しさん2012/12/17(月) 20:17:44.73
#include <stdio.h>

int main(void)
{
  int i;
  int N = 10;

  for(i = 0; i < N; i++) {
    printf("\007");
  }

  return 0;
}
0208デフォルトの名無しさん2012/12/17(月) 20:34:22.05
>>206
うん
0209デフォルトの名無しさん2012/12/18(火) 14:44:07.60
>>202
消防以下のレベルに善く答えてあげたな。
0210デフォルトの名無しさん2012/12/18(火) 15:44:41.85
関数の引数なしを

void test(){}

と()内にvoidと書かなくても大丈夫?
0211デフォルトの名無しさん2012/12/18(火) 15:49:22.94
昔はそう書いた
今ならvoidつけた方がよい
0212デフォルトの名無しさん2012/12/18(火) 15:59:02.16
>>211
なんで?
0213デフォルトの名無しさん2012/12/18(火) 16:06:52.58
そのまま関数宣言に使ったときにも、引数がないことが明確になるから。
0214デフォルトの名無しさん2012/12/18(火) 16:10:18.25
最近はハードの性能も上がり、色々こねくり回すよりも可読性を重視したコーディングが求められるだろうから、
やろうとしていることはなるべく明示した方が良い。

バグ潰しの効率もずいぶん変わるし、何より考えすぎたコードは次の日自分でも何やってんだか分からなくなったり。
0215デフォルトの名無しさん2012/12/18(火) 16:34:01.01
>>213
>そのまま関数宣言に使ったときにも、引数がないことが明確になるから。

それ、チェック機能の弱い、古いコンパイラ時代の常識。
0216デフォルトの名無しさん2012/12/18(火) 16:36:09.14
Cだと書いた方がいいね
他の言語(C#とか)だと書かないと自動的に引数なし扱いになるけど
0217デフォルトの名無しさん2012/12/18(火) 17:03:29.86
なるけどね
0218デフォルトの名無しさん2012/12/18(火) 17:41:21.75
まぁ一応書いておくだろ
0219デフォルトの名無しさん2012/12/18(火) 18:28:18.40
宣言なら書かないといけないけれど、定義ならどっちでもいいよ。Cは。
0220デフォルトの名無しさん2012/12/18(火) 19:07:08.53
定義をコピペして関数プロトタイプ宣言にするから自分は書くけどね
0221デフォルトの名無しさん2012/12/18(火) 19:46:48.09
どっちでもいいならすこす長くてもわかりいいほうにしとけってばっちゃが
0222デフォルトの名無しさん2012/12/18(火) 20:11:10.05
ありがとうCではちゃんと記述する
それ以外は略してもいいという認識で行く
0223デフォルトの名無しさん2012/12/18(火) 21:00:22.85
Cなら略してもいいのだ。他の言語では、voidの意味になってしまう
0224デフォルトの名無しさん2012/12/18(火) 21:35:50.50
C#ってvoid書くとコンパイルエラーになるよね
0225デフォルトの名無しさん2012/12/18(火) 22:56:50.25
なるよね
0226デフォルトの名無しさん2012/12/18(火) 23:05:38.14
ネー
0227デフォルトの名無しさん2012/12/18(火) 23:10:46.83
unionとstructってどう違うんですか?

struct{int a, double b, char c,char d[10][10]}←できる
union{int a, double b, char c, char d[10][10]}←できる
0228デフォルトの名無しさん2012/12/18(火) 23:14:38.62
たしか、unionとstructってメモリに展開した時に違いが発生するんだよね?
unionは1つの連続した領域として取られるハズ
0229デフォルトの名無しさん2012/12/18(火) 23:14:49.55
unionは、どれか1つのメンバしかメモリに載らない
0230デフォルトの名無しさん2012/12/18(火) 23:16:10.57
1つの代入した、もう1つのメモリ上の領域は破壊(塗り潰す)される
0231デフォルトの名無しさん2012/12/18(火) 23:16:15.65
>>228
あやふやなら回答しない方がいい
0232デフォルトの名無しさん2012/12/18(火) 23:16:52.60
確実な回答おがないしましゅ
0233デフォルトの名無しさん2012/12/18(火) 23:17:39.48
確実な回答が欲しいなら、自分で仕様書なり調べろ
0234デフォルトの名無しさん2012/12/18(火) 23:19:03.78
それならそうと一番最初に家よks
0235デフォルトの名無しさん2012/12/18(火) 23:26:51.91
unionはメンバ中で一番に大きいメモリサイズで領域を確保する
d[10][10]の領域の中に、int a, double b, char cの先頭を指してる
だから、どれか代入すると他のメンバ変数はメモリ上に載せることが出来ない
0236デフォルトの名無しさん2012/12/18(火) 23:31:36.87
>>235
最小のプログラムでunionの場合structと比べてこれができないっていう
例を教えて下さい。
0237デフォルトの名無しさん2012/12/18(火) 23:34:55.94
できる
struct Foo a;
a.a = 10;
a.b = 0.1;
できない
union Bar b;
b.a = 10;
b.b = 0.1;

printfでconsoleにでも出力汁
0238デフォルトの名無しさん2012/12/18(火) 23:36:51.35
自己解決しました。
0239デフォルトの名無しさん2012/12/18(火) 23:38:26.58
1つだけ、今後のアドバイスすると、プログラマにはならない方がいいよ
君には向いてないから
0240デフォルトの名無しさん2012/12/18(火) 23:38:41.91
>>237
ランタイムエラーだったけどありがとうございます。
さすればunionって欠陥品ということでしょうか?
0241デフォルトの名無しさん2012/12/18(火) 23:41:06.74
うn
0242デフォルトの名無しさん2012/12/18(火) 23:41:42.63
省メモリで組む必要がある組込み用途で必要
0243デフォルトの名無しさん2012/12/18(火) 23:46:24.41
sizeof演算子で、structとunionの大きさ確認しろ
0244デフォルトの名無しさん2012/12/18(火) 23:59:23.38
struct アレやコレを一緒にまとめて入れておく。
union ひとつの場所に、ある時はアレ、またある時はコレと使い分ける。
0245デフォルトの名無しさん2012/12/19(水) 00:06:59.28
入門での中途半端な文法レベルなら、rogueなり、
tux racerなり落としてきて使い方眺めた方が早い
飯食うなら、枕元にBSDのコード置くぐらいのことした方が良い
0246デフォルトの名無しさん2012/12/19(水) 07:47:18.99
良いね
0247デフォルトの名無しさん2012/12/19(水) 10:53:20.83
もっとも、c++,javaでヤドカリ本の暗記した方が潰しがきくけどね
0248デフォルトの名無しさん2012/12/19(水) 11:24:42.62
スレタイ読めないヴァカがいるぞ
0249デフォルトの名無しさん2012/12/19(水) 14:57:04.28
>>248
お前だ
0250デフォルトの名無しさん2012/12/19(水) 21:34:21.71
cで何かするならgtkあたりがベター
cの入門なら、gnome付属のゲームでも読めば?

大学講座の単位なんて飾りですw
入門者には、それが分からんのですw
0251デフォルトの名無しさん2012/12/19(水) 21:55:21.74
何か今日あった?
入門スレでしか暴れられない方々が多いな。
0252デフォルトの名無しさん2012/12/19(水) 22:49:52.00
多いね
■ このスレッドは過去ログ倉庫に格納されています