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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 86
http://hibari.2ch.net/test/read.cgi/tech/1309089793/
★過去スレ
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++の宿題片付けます 150代目
http://hibari.2ch.net/test/read.cgi/tech/1308749241/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
2デフォルトの名無しさん:2011/07/19(火) 09:29:21.28
>>1
テンプレに過去スレなんて貼る意味あるの?
見てるやつなんていないだろ。
3デフォルトの名無しさん:2011/07/19(火) 10:35:33.50
>>2
おまえは口を閉じてろ
4デフォルトの名無しさん:2011/07/19(火) 11:20:12.30
リソースファイルが読み込まない、何故でしょうか?
検索しても原因が分からなくて、Cとはちょっと違いますが分かりますか?
【Resource.rc】
#include "Resource.h"
//------------------------------------------------------------------------//
// [Menu]
//------------------------------------------------------------------------//
MY_MENU MENU DISCARDABLE
BEGIN
POPUP "設定", ID_SETTING
BEGIN
MENUITEM "タイトルに戻る", ID_TITLE
MENUITEM "ゲーム終了" ID_EXIT
END
POPUP "ヘルプ", ID_HELP
BEGIN
MENUITEM "バージョン情報", ID_VERSION
END
END


【Resource.h】

#define ID_SETTING 0
#define ID_TITLE 1
#define ID_EXIT 2
#define ID_HELP 3
#define ID_VERSION 4
\Resource.rc(9) : error RC2121 : BEGIN expected in menu
\Resource.rc(10) : error RC2122 : unknown menu subtype
5デフォルトの名無しさん:2011/07/19(火) 11:25:18.83
windows.hはincludeしてる?
6デフォルトの名無しさん:2011/07/19(火) 11:26:11.29
includeしてないから、ちょっとしてみます
7デフォルトの名無しさん:2011/07/19(火) 11:27:07.95
MY_MENUが定義されてないのが原因じゃないの。
8デフォルトの名無しさん:2011/07/19(火) 11:28:17.49
先ほどのResource.hに#include "Inc.h"を読み込ませた結果
【Inc.h】

#include <stdio.h>
#include <windows.h>
#include <tchar.h>

#define __DEBUG__

1>.\Inc.h(5) : fatal error RC1004: unexpected end of file found
同じようなエラーが出てしまいました
エラー場所は#define __DEBUG__なんですが、おかしいですよね?
9リソースが読み込めない人:2011/07/19(火) 11:31:42.34
>>7
MY_MENU MENU DISCARDABLEでMY_MENUを定義してるんじゃないですか?
勘違いで書いていたら、すいません
10デフォルトの名無しさん:2011/07/19(火) 11:32:05.76
rcに余計なもの読ますな
11リソースが読み込めない人:2011/07/19(火) 11:35:32.21
>>10
rcには、Resource.hしか読み込ませてないのですが
それとも、Resource,hにはwindows.hだけ読み込ませた方がいいのでしょうか?
12デフォルトの名無しさん:2011/07/19(火) 11:39:40.38
>>9
Resource.hに
#define MY_MENU 100
とかいるんじゃないの?
13リソースが読み込めない人:2011/07/19(火) 11:45:43.70
>>12
調べてたら、必要なようでした
1>.\Resource.rc(9) : error RC2121 : BEGIN expected in menu
1>.\Resource.rc(10) : error RC2122 : unknown menu subtype
でも、エラーは消えません…

コードは>>4の.rc
エラー場所
POPUP "設定", ID_SETTING
1>.\Resource.rc(9) : error RC2121 : BEGIN expected in menu

BEGIN
1>.\Resource.rc(10) : error RC2122 : unknown menu subtype

Resourerc.hは改善しました
#include <windows.h>

#define MY_MENU 100
#define ID_SETTING 101
#define ID_TITLE 102
#define ID_EXIT 103
#define ID_HELP 104
#define ID_VERSION 105
14リソースが読み込めない人:2011/07/19(火) 11:53:00.26
すいません、解決しました。
POPUPにdefine定義したのを設定してたのが、ダメでした
15デフォルトの名無しさん:2011/07/19(火) 12:32:21.78
>>14
5W1H、何をいつどこで。英語だけど日本語でも基本中の基本だから
16デフォルトの名無しさん:2011/07/19(火) 12:53:11.12
>>15
英語でも日本語でもそれを省略するのが粋なんだよ
17デフォルトの名無しさん:2011/07/19(火) 12:55:41.18
>>16
粋な技術解説や仕様書なんて見たくない
18デフォルトの名無しさん:2011/07/19(火) 13:00:19.87
>>16
そんなもんHMMMML2でやれ
19デフォルトの名無しさん:2011/07/19(火) 15:12:18.21
「粋」ってもともと「やせ我慢してるオレCool!」って意味だろ
20デフォルトの名無しさん:2011/07/19(火) 20:15:21.86
わ・・枠・・・
21前スレ920:2011/07/19(火) 21:46:42.63
ReadFileとfreadの速度を比べた結果を報告します。

処理内容 : 2Byte×約9000点の読み出しと、各要素をエンディアン反転
計測区間 : メッセージループの隙間を使って繰り返し処理したときの周期

・freadで一個ずつ : 1.25ms
・freadでまとめて : 0.37ms
・ReadFileで一個ずつ : 8.50ms
・ReadFileでまとめて : 0.38ms

一個(2Byte)ずつ読む場合は、freadのほうが遥かに速かったです。
まとめて読むぶんにはあまり差はありませんでした。
1ファイルが大容量で、freadで読みきれないことがあるので、ReadFileでいきます。

ありがとうございましたm(_ _)m
22デフォルトの名無しさん:2011/07/19(火) 21:58:10.38
ビットの並び順のことを「エンディアン」と呼ぶのはどうかと思うが。
23デフォルトの名無しさん:2011/07/19(火) 23:27:06.71
msbファースト
lsbファースト
とかいっても、わからんだろうな?
24 忍法帖【Lv=29,xxxPT】 :2011/07/19(火) 23:33:04.40
>>21
>1ファイルが大容量で、freadで読みきれないことがあるので、ReadFileでいきます。
fread()で読み切れないって、2GB超ってこと?
25デフォルトの名無しさん:2011/07/19(火) 23:38:58.03
>>21
いまどきの開発環境なら fpos_t は64bit対応してると思うぞ
コンパイルオプションが必要になるかもしれないけど
26前スレ920:2011/07/19(火) 23:47:11.08
>>24
そうです。

>>25
それは知りませんでした。
検討してみます。
27デフォルトの名無しさん:2011/07/20(水) 00:49:42.96
@Googleマップを開いてください
Aルート・乗換案内のAに群馬、Bに台湾と入力してください
Bルートの42番を読んでください
C笑った人は他のスレで紹介してください。
28デフォルトの名無しさん:2011/07/20(水) 01:47:50.69
>>27
何と書いてあるんだよ?
29デフォルトの名無しさん:2011/07/20(水) 04:36:31.33
ジェットスキーで 782km
30デフォルトの名無しさん:2011/07/20(水) 17:37:31.76
>>23
MSBとLSBはどっちがどっちかいつもわからなくなる。
31デフォルトの名無しさん:2011/07/20(水) 17:41:24.42
LSB が下位側 って覚えてたが…

原文はこうなのね Least/Most Significant Bit
32デフォルトの名無しさん:2011/07/20(水) 17:41:43.08
よく出てくるほうが MSB
反対側をときどき LSB ということがある
33デフォルトの名無しさん:2011/07/20(水) 19:25:46.21
パンティを片手で引っ張り上げてマンコに食い込ませるポーズって何て言うんですかね
検索しようにもうまいキーワードが思いつかないんですが
34デフォルトの名無しさん:2011/07/20(水) 19:28:37.92
ならばお前が名付けろ。
そこが始まりになるのだ。
35デフォルトの名無しさん:2011/07/20(水) 19:48:36.51
>>33
それ検索できない人がいるから、検索すれば分かりそうな質問多いんだろうな。
キーワードも思いつかないような問題でも、無理やりひねり出してトライを
繰り返せばけっこうキーワードがでてくる。
36デフォルトの名無しさん:2011/07/20(水) 20:06:24.69
fgetsで読み込んだ文字列が ”ほにゃらら   ほにゃ      ほほほ   ふへへ” だったとします。
これをスペースで区切った4つの文字列として格納してくれるような関数はあるでしょうか?
ないとすればfor文で回して地道に分けるしかないのでしょうか?
37デフォルトの名無しさん:2011/07/20(水) 20:10:43.66
strtok
どのみちforは居るが
38デフォルトの名無しさん:2011/07/20(水) 20:14:44.16
必ず4つと分かってるなら sscanf で
何個になるか分からないけど、1つづつ切り出したいのなら strtok か for 回し
(strtok は連続したスペースを1区切りにしないので 意図とはちょっと違うかもだ
39デフォルトの名無しさん:2011/07/20(水) 20:27:08.78
ごめん 嘘書いた
strtok はトークンが連続してても、それで1区切りだ

逆のスペース1つで1区切りで連続した場合に相応の空文字列に切り出すのができないんだったか
"A[SPC][SPC]B" の場合 "A", "", "", "B" の順に切りだしたい って話
40デフォルトの名無しさん:2011/07/20(水) 21:52:00.11
へえー
41デフォルトの名無しさん:2011/07/20(水) 22:00:58.31
文字列読み出しは未だに新しい発見があって楽しいw
42デフォルトの名無しさん:2011/07/20(水) 23:01:44.18
ライブラリに振り回されているってことだな、しかもコンパイラに同梱という狭い範囲で

C は言語そのもには神を感じる(K&R C でさえ)が、ライブラリは玉石混淆なので
憶えるだけでなく自分の分野においての実用性を論評できるようになるのが急務となる
43デフォルトの名無しさん:2011/07/20(水) 23:03:02.13
Cってアレだよね
鍛えれば最強の武器になる初期武器って感じ。
44デフォルトの名無しさん:2011/07/20(水) 23:19:45.84
|´・ω・`)y-~~
45名無しさん@12周年:2011/07/21(木) 08:30:33.65
>>43
初期? 基本武器じゃね?
***->的なポインタープログラムを書けるようになると ラムタ式も無名関数も仮想関数テーブル管理もできるようになるよ!
ワンチップ組込みの世界では 胸張って生きれるよ w
46デフォルトの名無しさん:2011/07/21(木) 08:39:04.78
そういえば関数ポインタって実際どんな場面で使うの?
とくにメリットを感じないんだが・・・
47デフォルトの名無しさん:2011/07/21(木) 08:43:00.25
関数を引数にとる関数(高階関数)を書くときに使う
48デフォルトの名無しさん:2011/07/21(木) 08:44:23.53
あぁなるほど
49デフォルトの名無しさん:2011/07/21(木) 08:53:48.96
アセンブラを学ぶと、Cでどう書いたら実行速度の速いコードになるかが推測でき、
Cを学ぶと、スクリプト系言語がどう処理してるかが推測できる?
50デフォルトの名無しさん:2011/07/21(木) 08:58:21.29
>>49
そんな質問してるやつがそんな理由で初めても下手の横好きになるだけだよ
ちょろっとやっただけじゃあんまり意味はない
アセンブラは高級言語と同じことやるのにやたらめんどくさい、Cはスクリプトに比べてメモリ確保とかやたらめんどくさいぐらいの印象できっと終わる
51デフォルトの名無しさん:2011/07/21(木) 09:12:30.02
atexit()
52デフォルトの名無しさん:2011/07/21(木) 09:47:00.19
.NETやりたいんですが
C++をつかう.netの入門サイトまったくありません

C#ならあるんですが、素直にC#やったほうがいいんでしょうか?
まったく持って意味わかりません、おしえてください
53デフォルトの名無しさん:2011/07/21(木) 09:49:53.10
>>52
解説がさっぱりないのは死ぬほど評判悪いから
C++/CLIはやめといたほうがいい

C#使っとけ
54デフォルトの名無しさん:2011/07/21(木) 09:50:18.07
CPUの単一スレッドあたりの性能向上が5年ほど前から鈍化してて、現在は事実上ストップしてると考えても過言ではないと思う。
この状況で、インテルなどのメーカーは、今後はSIMDと多コアの方向でCPU性能を稼ごうとしてるように見える。

今後CPUは、多コアとSIMD方面の性能のみが向上してく状態になると思う。
(将来的にはCPUのSIMDが、GPU並の超並列同時演算ユニットへと進化してくと思う)
55デフォルトの名無しさん:2011/07/21(木) 09:51:57.21
UnrealEngine3を使う段階の前にGUIプログラミングやりたいんですが
C++でできるGUI開発できるやつは
その評判の悪いC++の.NET以外なにがありますか?
教えてください

C++でできる資料の多いGUIプログラミング教ええてください
56デフォルトの名無しさん:2011/07/21(木) 09:52:38.64
新しいAVX命令セットは256ビットのレジスターで、float型8個を1命令で演算できる。と思う。(できるはず)
1命令でfloat型8個を読み、1命令でfloat型8個を別の8個と乗算し、1命令でfloat型8個をメモリーに書きだす。
たったの3命令。

これと同じ処理を従来のx86の命令のみで行えば、
float8個の読み込みに8命令、float8個の乗算に8命令、float8個の書き出しに8命令で、
合計24命令。

圧倒的じゃないか。
57デフォルトの名無しさん:2011/07/21(木) 09:53:49.03
会話が成り立ってねーぞ
58デフォルトの名無しさん:2011/07/21(木) 09:55:40.10
UnrealEngine3を使う段階の前にGUIプログラミングやりたいんですが
C++でできるGUI開発できるやつは
その評判の悪いC++の.NET以外なにがありますか?
教えてください

C++でできる資料の多いGUIプログラミング教ええてください
59デフォルトの名無しさん:2011/07/21(木) 09:58:44.28
>>58
MFCってのがあるよ!
60デフォルトの名無しさん:2011/07/21(木) 09:59:28.14
さらにGPUの進化はもっと苛烈で、昨今の最新GPUから見ると、AVXのfloat8個同時すらショボく感じる。
最新のGPUだと1024個の演算を同時に演算してしまうらしい。
(CUDAはまったく触ったことないので詳細は知らないが)

最新のGPUは1命令で1024個のfloatを同時に演算できるようなもの?と思ってる。
(多コアの並列動作なので、AVXのSIMDとはニュアンスが違うけど、結果として)

圧倒的すぎる。



というわけで、GPUの演算ユニットを直接使ってみたいのだけど、どうやればいいのかわかりません。
GPUの機械語に対応してるアセンブラが無いので、専用のバイナリーのライブラリーをリンクして使う…的なことなのでしょうか?
そうではなく、直接GPUに命令を出せる機械語を知りたいです。 どこかにいい文献があったら教えてほしいです。
61デフォルトの名無しさん:2011/07/21(木) 10:01:44.62
前置きなげーよ
62デフォルトの名無しさん:2011/07/21(木) 10:03:44.83
>>58
それ有料っていっただろこら
早くおしえろてください
63デフォルトの名無しさん:2011/07/21(木) 10:05:50.24
英語がぼちぼちできるんならQtをすすめるんだがきっとできないんだろうな・・・・・・・
64デフォルトの名無しさん:2011/07/21(木) 10:08:56.43
void InitializeComponent(void)
{
this->SuspendLayout();
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(284, 262);
this->Name = L"Form1";
this->Text = L"Form1";
this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
this->ResumeLayout(false);

}

このthisって何を指してるの?教えてください
65デフォルトの名無しさん:2011/07/21(木) 10:11:26.98
どいつこいつもC++, C++, C++ !!!!!!!
66デフォルトの名無しさん:2011/07/21(木) 10:11:39.54
>>64
死ね
67デフォルトの名無しさん:2011/07/21(木) 10:12:06.19
>>60
死ね
68デフォルトの名無しさん:2011/07/21(木) 10:13:33.51
CALってなんすかぁ
69デフォルトの名無しさん:2011/07/21(木) 10:17:24.62
void InitializeComponent(void)
{
this->SuspendLayout();
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(284, 262);
this->Name = L"Form1";
this->Text = L"Form1";
this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
this->ResumeLayout(false);

}

このthisって何を指してるの?教えてください
70デフォルトの名無しさん:2011/07/21(木) 10:19:15.22
InitializeComponentって関数なのに
thisってなにをさしてる?
オブジェクトさすんじゃないの?

どこにあるのそのthisのもと
71デフォルトの名無しさん:2011/07/21(木) 10:20:05.72
まず人に聞くまえに、入門書の最初の章くらい読めよ・・・
72デフォルトの名無しさん:2011/07/21(木) 10:22:44.26
>>69
それってCの話でしょ?
なんらかのグローバル変数 this があるんじゃね?
73デフォルトの名無しさん:2011/07/21(木) 10:25:17.08
http://codepad.org/hsOQvF6K
これ

thisってどれ?
InitializeComponent();ってつかってるみたいだけど


Obj.InitializeComponent();なら
objがthisってわかるけど

InitializeComponent();のままつかってるし意味不明です教えてください
74デフォルトの名無しさん:2011/07/21(木) 10:26:42.54
マジレスすると
thisっていう構造体ポインタなんじゃね?
75デフォルトの名無しさん:2011/07/21(木) 10:27:01.81
C++はスレ違いですよ
C++はスレ違いですよ

大事な事なので2回言いました
76デフォルトの名無しさん:2011/07/21(木) 10:30:48.55
this->ClientSize = System::Drawing::Size(284, 262);
ってやってるから

ClientSizeで検索したら System::Windows::Formsって書いてあるからここにあるのかな
代入してるし
System::Windows::Forms::Form->clientsizeでいいの?

public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクター コードを追加します
//
}

ってあるけど
Form1( System::Windows::Forms::Form)が thisになるわけ?教えてください

77デフォルトの名無しさん:2011/07/21(木) 10:37:13.88
>>76
死ね
78デフォルトの名無しさん:2011/07/21(木) 10:42:30.62
C++はスレ違いです
C++はスレ違いです
79デフォルトの名無しさん:2011/07/21(木) 12:39:06.79
float 型と double 型の違いについて教えてください。
#include <stdio.h>

typedef double T;
typedef float T;
/* witch is better? */

int main() {
  T sum = 0, max = 0, min = 10000, val;
  int num = 0;

  while (scanf(" %f", &val) == 1 && val > 0) {
    if (max < val)
      max = val;
    if (min > val)
      min = val;
    sum += val;
    num++;
  }
  printf("入力人数: %d\n", num);
  if (num > 0) {
    printf("最大値: %f\n", max);
    printf("最小値: %f\n", min);
    printf("平均値: %f\n", sum / num);
  }
  return 0;
}
という内容で変数の型を float か double かで悩んでいます。数値演算のプロの方からアドバイスをいただきたいです。よろしくお願いいたします。
80デフォルトの名無しさん:2011/07/21(木) 12:41:04.72
プロじゃないけど常にdouble使ってればいい
81デフォルトの名無しさん:2011/07/21(木) 12:49:00.64
メモリの節約や高速化(floatが高速になる環境なら)を考慮しないならdoubleでいいと思うけど
82デフォルトの名無しさん:2011/07/21(木) 12:57:11.89
スレチぎみ
printf のフォーマット文字列はそれで良いけど
scanf のそれは float / double で変えないと危ないぜ
83デフォルトの名無しさん:2011/07/21(木) 14:09:15.04
>>68
バーディソフトのゲーム。
84デフォルトの名無しさん:2011/07/21(木) 14:36:35.38
>>79
使用許諾条件を守りなさい。

http://hibari.2ch.net/test/read.cgi/tech/1308749241/909

>>904
>>905,906を使うための条件

1 このスレ(または次スレ)に↓を書き込むこと。
QZ死ね。てめーのうんこコードなんか単位落とすことになったって使わねー。

2 次回の質問の時は↓これを制限とすること。
[5] その他の制限: QZは邪魔だから回答しない事
85デフォルトの名無しさん:2011/07/21(木) 14:58:57.04
ふっほっはっ
86デフォルトの名無しさん:2011/07/21(木) 16:57:17.44
double型に数字入れさせたいのですが、エラー処理として文字列入った場合、ifとかdo whileで弾きたいのですが、
scanfでdoubleに文字または文字列入れた場合、どのような値が入ってくるのでしょうか?
テストパターンとして、main()
{
double a,b;
scanf("%lf%lf",&a,&b);
printf("%lf\n%lf",a,b);
}
というプログラムを用いて、最初の入力で"a"を入力したところ、
a
0.000000
0.000000
となりました。bの入力がすっ飛ばされているのも何故だか教えて下さい。

以上です。もしよろしければご回答下さい。よろしくお願いします
87デフォルトの名無しさん:2011/07/21(木) 17:04:05.88
>>86
エラーで読み込めないと"a"がストリームに取り残されるから、&bでも
また"a"を読み込もうとして失敗する。

エラーチェックとかやりたいならfgets(…,….stdin)で行単位で読み込んで
sscanf()とかstrtod()みたいので変換するのが楽。
88デフォルトの名無しさん:2011/07/21(木) 17:07:40.42
>>87
なるほど!速攻で回答帰ってきて驚いています。ありがとう
一度読みこんでから、再度doubleの中に突っ込むということですね、盲点でした。やってみます
お世話になりました
89デフォルトの名無しさん:2011/07/21(木) 17:29:07.05
関数についてで、戻り値、引数無しの関数を作りたいのですが中々上手く行きません・・・
例として、

#include<stdio.h>

/*プロトタイプ宣言*/
void func1(void)

void main (void)
{

      ・
      ・
  void func1(void);
}

/*関数の定義*/
void func1(void)
{
printf("。。。");
}

自分の記憶を頼りに、こんな感じでプログラム作ってるのですが、
多分間違えてると思います。良ければ回答お願いします
90デフォルトの名無しさん:2011/07/21(木) 17:30:58.97
#include<stdio.h>

/*プロトタイプ宣言*/
void func1(void)

void main (void)
{

      ・
      ・
  func1(void);
}

/*関数の定義*/
void func1(void)
{
printf("。。。");
}
91デフォルトの名無しさん:2011/07/21(木) 17:35:04.58
>>89,90
;がない
死ね
92デフォルトの名無しさん:2011/07/21(木) 17:39:46.76
>>91
見落とした
追加で。
93デフォルトの名無しさん:2011/07/21(木) 17:43:18.70
>>91
全角空白も使ってるんだから、細かい事いうなよ。

#include<stdio.h>

/*プロトタイプ宣言*/
void func1(void);

void main (void)
{

      ・
      ・
  func1();
}

/*関数の定義*/
void func1(void)
{
printf("。。。");
}
94デフォルトの名無しさん:2011/07/21(木) 17:51:12.39
>>93
なるほど。呼び出しの所が違いましたか・・・。
ありがとうございますー!
95 忍法帖【Lv=30,xxxPT】 :2011/07/21(木) 17:59:00.47
敢えて言おう。int main()とすべきであると。
96デフォルトの名無しさん:2011/07/21(木) 18:20:26.62
むしろ記憶で書くなといいたい。
97デフォルトの名無しさん:2011/07/21(木) 18:32:57.12
ゼロ記憶だと書けないぞ。
98デフォルトの名無しさん:2011/07/21(木) 18:34:09.59
こーゆーレベルの質問に答えるんだ・・・。
99デフォルトの名無しさん:2011/07/21(木) 18:37:07.29
答えて早々に追っ払った方が吉。下手に弄って粘着されると面倒。
100デフォルトの名無しさん:2011/07/21(木) 19:06:30.18
下忍よ、そんなことより深刻な問題に気付いているか?
101デフォルトの名無しさん:2011/07/21(木) 19:25:42.83
入門者向けのスレなのに
一体どんなレベルの質問期待してるんすか
102Perl忍者:2011/07/21(木) 20:26:14.75
C++ってRADの開発向いてますか?
そういうIDEと飼ってありますか? 教えてください
.NETみてみたんですが

.NET C++とか検索してもなんか 入門サイトとか全然のってなくてよくわかりません
.NET 入門とか調べると C#がでてくるんですが C#がむいてるんですか?
C#は.NETがむいてるんですか???わかりません教えてください


C++でできるGUIアプリ開発とかやりたいですがなにがむいてますか?
Xcodeみたいにウインドウとかボタンとか自由に配置してやりたいんですが
WIN32みたいに変な全部ウインドーコードかいたり リソースエディタとかめんどくさいのやりたくないです

C++をやる理由なんですが UnrealEngine3っていうやつC++つかうみたいなんで
教えてください

C++でできるXcodeみたいなやつ
C++だと.NETはむずかしい  C#使えっていわれたんですがホンとですか??
C++でできるGUIのIDEとかそういうのあったら教えてくださいまってます
103 忍法帖【Lv=30,xxxPT】 :2011/07/21(木) 20:42:35.80
>>102
死ね
104デフォルトの名無しさん:2011/07/21(木) 20:43:07.69
はらたいらに3000点
105デフォルトの名無しさん:2011/07/21(木) 20:48:24.91
106デフォルトの名無しさん:2011/07/21(木) 22:27:09.79
while文を使ってファイルを読みこんで処理を行ってるんですが、
その時どの程度まで処理が終了したかを表示させるようにしようと思ってます。

こんな感じです。

                100%
|||||||||||||||


ところがwhile文の中に居る時は何も表示されなくて処理が終わる(≒while文を抜ける)と
いきなり100%のところまで表示されます。

while文中でprintfの出力がリアルタイムでされてなくて抜けるとまとめて出てくるようです。
何かいい対策はないでしょうか?
107デフォルトの名無しさん:2011/07/21(木) 22:27:59.85
fflush()
108デフォルトの名無しさん:2011/07/21(木) 22:41:15.98
>>106
一瞬で終わっているだけでは?
109デフォルトの名無しさん:2011/07/21(木) 22:46:09.38
>>107
来週ためしてみます。
>>108
1分ぐらいは処理やってます。表示は最後に更新されてる感じです。
110デフォルトの名無しさん:2011/07/21(木) 23:02:12.24
改行入れないと内部のバッファに溜まるだけで実際に出力されない場合がある
内部のバッファ分を出力して空にするのがfflush
111デフォルトの名無しさん:2011/07/22(金) 06:16:56.09
setvbufとかは使える?
112 忍法帖【Lv=30,xxxPT】 :2011/07/22(金) 09:43:33.42
>>111
使えるけど、フラッシュで済ませるべき。
113デフォルトの名無しさん:2011/07/22(金) 11:43:34.04
windows7ってクリップボードを管理するソフトって標準でなかったっけ?
コピペが面倒でたまらん
114デフォルトの名無しさん:2011/07/22(金) 12:50:12.86
>>113
clipbrd は xp までで vista 以後にはない
115デフォルトの名無しさん:2011/07/22(金) 13:51:41.50
>>113
何語かは知らんけど外国産のを入れてる
116デフォルトの名無しさん:2011/07/22(金) 14:53:21.41
>>115
大丈夫なのかそれw
ためしにフリーの入れてみたが意外と捗らんな
これも慣れか・・・
117デフォルトの名無しさん:2011/07/22(金) 18:21:37.21
テキストエディタ用のフォントを探してるんですが
おすすめあれば教えてください
とりあえずゼロに斜線が入っていればOKです
118デフォルトの名無しさん:2011/07/22(金) 18:48:32.55
osaka
119デフォルトの名無しさん:2011/07/22(金) 20:02:47.01
はたらいたら3000円
120 忍法帖【Lv=37,xxxPT】 :2011/07/22(金) 22:15:13.91
>>117

かなり個性的だが、ゆたぽんを使っている。

コーディング用を謳っていて
O,0, 1, l, i, ; : .
などがえらく主張しています。

手書き風なので、ダメな人は全くでしょうけど、
ハマれば見やすいですよ。
121デフォルトの名無しさん:2011/07/22(金) 23:10:20.02
動かすとSegmentationfaultになって落ちちゃうんですが
デバッグしようと所々にいろんな変数をprintfで表示させるようにするとちゃんと処理が終わるんです。
こういう現象ってよくあるんでしょうか?入出力関連でエラーが起きててSeg〜になるんでしょうか?
122デフォルトの名無しさん:2011/07/22(金) 23:11:10.27
>>117
無難にConsolas+メイリオ
123デフォルトの名無しさん:2011/07/22(金) 23:29:37.19
>>121
珍しくないね。
特にポインタが変な場所を指している場合は、printfを入れることで
スタックの状態が変わると、症状が出たり出なかったりする。

とりあえずデバッガ使用をおすすめするが、↑のような場合
デバッグモードだと再現しないことも珍しくない。
124デフォルトの名無しさん:2011/07/22(金) 23:34:30.76
valgrindのようなメモリデバッグツールを使うのもひとつの方法
125デフォルトの名無しさん:2011/07/23(土) 05:13:18.11
>>117
monaco
126デフォルトの名無しさん:2011/07/23(土) 06:11:22.81
>>116
これを入れた。
plだからポーランド語なんかな?

http://www.przeklej.pl/plik/clipbrd-exe-0027s73vo4re3sp
127デフォルトの名無しさん:2011/07/23(土) 07:46:36.35
>>121
よくある。キミの質問のレベルから超推理すると、初期化されていない
変数を使っている可能性が高そうだ。
コンパイラの警告レベルを最大にして警告メッセージを全部取り除く。

これと併せて、他の人も言ってるけど、デバッガを使ってみると良い。
128デフォルトの名無しさん:2011/07/23(土) 07:51:47.26
>>121
printf がダメなら、ulimit とかでコアを吐かせる設定をして、コアを調べてみると良いですよ
129デフォルトの名無しさん:2011/07/23(土) 07:56:56.93
適当にブレークポイント入れるだけでもかなりのヒントになると思うんだがそういう事はしないんだろうか
130デフォルトの名無しさん:2011/07/23(土) 08:05:15.30
>>121
良くあるよ
printfは破壊検査だと思ったほうが良い
まともにデバッグしたいなら
非破壊検査が出来るデバッガを使え
131デフォルトの名無しさん:2011/07/23(土) 08:30:56.73
Perlで
for ($i=0; $i<10; $i++) {
for ($k=0; $k<10; $k++) {
$str .= sprintf("%d %d\n",i,k);
}}
という処理をCで書くとどのようになりますか?
132デフォルトの名無しさん:2011/07/23(土) 08:54:46.33
>>131
int i,k;
for (i=0; i<10; i++) {
for (k=0; k<10; k++) {
ここは最終的な$strの最大長を決め打ち出来るか否かで大分変る。
}}
133デフォルトの名無しさん:2011/07/23(土) 09:18:24.41
>>132
$strの最大長は分からないですが要素の数は固定長です
char*の配列をまとめて標準出力に送ってくれる関数があるといいなあ
134デフォルトの名無しさん:2011/07/23(土) 09:44:59.46
>>133
> char*の配列をまとめて標準出力に送ってくれる関数があるといいなあ
C++ならある。Cならこんな感じ

// エラー処理は省略
int i,k;
size_t alloced = 0, size = 0, c;
char *p = NULL;

for (i=0; i<10; i++) {
for (k=0; k<10; k++) {
if (alloced < size + 32) {
alloced += 1024;
p = realloc(p, alloced);
}
c = sprintf(p + size, "%d %d\n", i, k);
size += c;
}}
135 ◆QZaw55cn4c :2011/07/23(土) 10:05:51.76
>>121
お手軽にデバッグしたいなら codeguard を試してみては?私も最近評価版を入手して重宝している。
https://downloads.embarcadero.com/free/c_builder から入手。
コマンドラインから bcc32 -vG -v target.c でコンパイル。
できた実行ファイルを実行して問題があると .cgl ファイルに警告内容が出力される。
136デフォルトの名無しさん:2011/07/23(土) 11:30:41.99
>>135
死ね
137デフォルトの名無しさん:2011/07/23(土) 11:42:56.00
>>134
reallocなんていう便利なものがあったんですね
コードまでつけていただいてありがとうございます
138デフォルトの名無しさん:2011/07/23(土) 12:21:41.50
>>131
$str .= sprintf("%d %d\n",i,k);

これエラーにならないか?
139デフォルトの名無しさん:2011/07/23(土) 12:25:46.21
なんで?
140デフォルトの名無しさん:2011/07/23(土) 12:58:00.29
それは国家安全保障上の理由で言えない。
141デフォルトの名無しさん:2011/07/23(土) 13:00:28.61
>>138
$くらい補完してやれよ。
142デフォルトの名無しさん:2011/07/23(土) 13:38:54.93
デフォルト危機だからな。
143デフォルトの名無しさん:2011/07/23(土) 20:51:24.64
C言語初心者です。
Javaで作った課題をC言語に打ち変えろという課題が出たのですが
Public static〜.やRandom randなどは何に置き換えたらいいのでしょうか?
144デフォルトの名無しさん:2011/07/23(土) 20:53:57.40
>>143
グローバル変数とランダム関数
145デフォルトの名無しさん:2011/07/23(土) 20:55:07.72
>>144
それはどんなのでしょうか…
本当に初心者で右も左もわかりません…
146デフォルトの名無しさん:2011/07/23(土) 21:05:15.21
とりあえず流し読みしとけ。
ttp://homepage2.nifty.com/c_lang/
147デフォルトの名無しさん:2011/07/23(土) 22:11:45.71
初歩的な質問ですいません。
本に載っていたコードをそのまま書きました。
http://codepad.org/D12a7OzX

コンパイルすると
Declaration is not allowed here in function main
Declaration syntax error in function main
Declaration missing ; in function main
Compound statement missing } in function main

とエラーが表示されてしまい
何度も見直したのですが、どう直せばいいのかわからずお手上げです。

コンパイラはBorland C++ 5.5.1使ってます。
148デフォルトの名無しさん:2011/07/23(土) 22:13:03.08
int hoge
149デフォルトの名無しさん:2011/07/23(土) 22:15:31.76
>>147
main関数が閉じてないぞ
150デフォルトの名無しさん:2011/07/23(土) 22:24:25.12
英語読めないならVC++にしとけ
151143:2011/07/23(土) 22:57:27.94
>>146さんありがとうございました。
一応教科書と照らし合わせて読んでみました。
先ほどざっとソースを書いたのですが普段はC言語の初歩を打つだけだったので
JAVA→C言語がやっぱりどう置き換えていいかわかりません…
時間が無くひとまずざっと打ってみただけなので相当問題点があると思いますが
教えていただけると幸いです…

http://codepad.org/L2uwO9sC
152デフォルトの名無しさん:2011/07/23(土) 23:04:48.76
>>151
java->c/c++ はつらいと思う‥‥‥。
見た目は似ているけれども、説明するには「余白が足りない。」
153143:2011/07/23(土) 23:07:11.80
>>152
やっぱりそうなんですか…JAVAの学習自体あまりやってなかったもので
どう手をつけていいのか、教科書を読んでも何を書いてあるのか、まるでさっぱりです。
だからその貼り付けたコードもところどころ
JAVAからのデータをそのまま登用してあったりするんですよね…
154デフォルトの名無しさん:2011/07/23(土) 23:34:47.08
>>143
基本的に this とは何かがわかっていれば、あとはひたすら作業ゲーのくだらん問いだ
おまけで関数ポインタや malloc が出てくるくらい

「this とは何か?」という1つの問いに必要以上の負担をかけているパワハラに後で腹が立つはず
155デフォルトの名無しさん:2011/07/23(土) 23:44:50.76
配列もわかってないようだから、
public staticはどうしますか?とか以前に
C言語の基礎ぐらい勉強してから来るべき
156デフォルトの名無しさん:2011/07/23(土) 23:59:13.47
ブロックせずに、入力が無ければすぐ次の処理に入るようなgetchってありますか?
もしくは自分で実装可能でしょうか?実装可能であれば、どんな流れの関数になるでしょうか?
157デフォルトの名無しさん:2011/07/24(日) 00:01:33.84
>>156
if(kbhit()) getch();
158デフォルトの名無しさん:2011/07/24(日) 00:12:34.89
>>157
ありがとうございます!
windows用のようですが、手がかりにして調べられそうです
159デフォルトの名無しさん:2011/07/24(日) 00:22:22.99
http://freedeai.jpn.org/up/src/up4497.png
画像編集のプログラムを作りました。ppmファイルを編集するものです
回転処理を行った時、左下の隅に黒い線が入り、一番下の配列にいたっては途中まで黒い線が入るような状況です
これについて考えられる原因を教えていただけませんか。よろしくお願いします
160デフォルトの名無しさん:2011/07/24(日) 00:26:47.11
>>159
Alt+PrtSc
を覚えよう
161デフォルトの名無しさん:2011/07/24(日) 00:29:44.36
>>159
行を見ていくループの変数の初期値もしくはソース側の初期値がおかしいんでしょ
162デフォルトの名無しさん:2011/07/24(日) 00:31:11.75
>>161
なるほど初期値ですか。見てみますありがとう
でも途中までおかしいのに途中から正しくなるのが何故かわからないのですが
163デフォルトの名無しさん:2011/07/24(日) 00:31:16.37
それは SysReq だ。
164デフォルトの名無しさん:2011/07/24(日) 00:32:04.77
165デフォルトの名無しさん:2011/07/24(日) 01:19:51.75
>>159
ソース曝すのが一番手っ取り早いよ。
166デフォルトの名無しさん:2011/07/24(日) 10:15:32.26
167デフォルトの名無しさん:2011/07/24(日) 10:44:41.59
普通に「Tフロント 食い込み」だろ。
168デフォルトの名無しさん:2011/07/24(日) 12:04:08.25
今オレの右手に自分のうんこが付いてしまっているんだけど
どうしたらいいですか?
169デフォルトの名無しさん:2011/07/24(日) 12:07:40.32
食え
170デフォルトの名無しさん:2011/07/24(日) 12:10:21.62
>>169
激しく同意
171デフォルトの名無しさん:2011/07/24(日) 14:00:24.63
日付の計算ってどうやればいいですか?
何分何秒まで正確にだしたいです
172デフォルトの名無しさん:2011/07/24(日) 14:03:27.45
時計見ろよwwwwwwwwwww
幼稚園児かよwwwwwwwwwww
173デフォルトの名無しさん:2011/07/24(日) 14:16:09.13
>>171
標準ライブラリにあるようなのそのまんま聞かれてもなぁ
少しは調べろよゴミ野郎
174デフォルトの名無しさん:2011/07/24(日) 14:46:16.97
fscanfで読み取った値に+10したのを代入したいけどどうしたらいいの?
175デフォルトの名無しさん:2011/07/24(日) 14:50:19.55
>>174
質問の日本語がちょっと変。その部分のソースを晒せ
176デフォルトの名無しさん:2011/07/24(日) 14:53:05.37
>>175
fscanf(data,"%d",val);
val+=10;
177デフォルトの名無しさん:2011/07/24(日) 15:02:17.19
>>176
落第。おそらくSEGV
178デフォルトの名無しさん:2011/07/24(日) 15:14:41.62
int val;
なら
fscanf(data,"%d",&val);

int *val
なら
fscanf(data,"%d",val);

こう?
179デフォルトの名無しさん:2011/07/24(日) 15:20:23.85
>>176
適当に書いてる
#include <stdio.h>
int main(){
FILE *data;
int val;
data= fopen("data.txt", "r+");
if (data == NULL) {
fprintf(stderr,"Can't open\n");
return 0;
}
fscanf(data,"%d",&val);
printf("1:[%d]\n",val);
val+=10;
rewind(data);
fprintf(data,"%d",val);
rewind(data);
fscanf(data,"%d",&val);
printf("2:[%d]\n",val);
fclose(data);
return 0;
}
180デフォルトの名無しさん:2011/07/24(日) 15:31:46.47
>>178
付録(val+=10;)があることを誤魔化さないように。
181デフォルトの名無しさん:2011/07/24(日) 18:07:14.29
>>178
落第。おそらくコンパイルエラー
182デフォルトの名無しさん:2011/07/24(日) 20:21:45.98
別フォルダからヘッダーファイルをインクルードしたい場合
毎回フルパス記述しないと駄目なの?
183デフォルトの名無しさん:2011/07/24(日) 20:27:37.67
>>182
コンパイラのオプションでヘッダファイルの置いてある場所を指定出来るよ

gcc だったら -I とか
184デフォルトの名無しさん:2011/07/24(日) 20:53:57.08
相対パスでいいよ。
185デフォルトの名無しさん:2011/07/24(日) 22:05:37.53
指定した行をfscanfで読み取るにはどうしたらいいですか
186デフォルトの名無しさん:2011/07/24(日) 22:06:29.13
その行まで読み飛ばす。
187デフォルトの名無しさん:2011/07/24(日) 23:27:56.92
fseekで飛ぶ
188デフォルトの名無しさん:2011/07/24(日) 23:47:28.62
ファイルの中身がどうなってるかわかってる?
189デフォルトの名無しさん:2011/07/25(月) 00:42:34.74
win32apiのタイマ処理で質問があるんだけど
WM_TIMERで処理量を多くして発生間隔を短くした場合
WM_TIMER処理中にWM_TIMERが再度呼ばれてしまって
ループするとかあったりする?
190デフォルトの名無しさん:2011/07/25(月) 00:48:10.97
ないよ
逆にタイマが遅れて処理されるよ
191デフォルトの名無しさん:2011/07/25(月) 00:48:50.24
>>189
メッセージを処理し終わるまで、ほかのメッセージはメッセージキューにたまってるんじゃないの?
192デフォルトの名無しさん:2011/07/25(月) 00:56:14.83
割り込みの発生間隔よりも
割り込みの処理時間がかかるのは
遠かれ近かれいずれ破綻する兆候

ハンドラでしか絶対に無理な処理と
ハンドラやらなくても main のコンテキストに委譲できる処理が
うまく切り分けられていないとそうなる
193デフォルトの名無しさん:2011/07/25(月) 01:12:03.32
なるほどサンクス
ひたすらメッセージがキューにたまっていくだけで
多重割り込みにはならないんだね
194デフォルトの名無しさん:2011/07/25(月) 01:39:41.84
#include <stdio.h>

typedef struct tagDATA_ST
{
char cData[4];
unsigned int iData;
unsigned short sData0;
short sData1;
} DATA_ST;

int main( void )
{
DATA_ST data;
int* pPtr = ( int* )&data;
}

質問があります。
上記みたいに、構造体のアドレスをint型のポインタにキャストした場合
pPtrはどこの領域を指し示すのでしょうか?
195デフォルトの名無しさん:2011/07/25(月) 01:42:28.55
普通にキャストしてるだけなんだから、
data.cData[0]
だろ?
196デフォルトの名無しさん:2011/07/25(月) 01:54:04.92
>>194
位置は、ポインタに代入されたアドレス。
位置をいじるとき(ポインタ演算)、キャストした型のサイズが影響。

struct D {char c[256];}
D d;みたいなとき、
char *p = (char *)&d; // p[0]→d.c[0], p[1] = d.c[1]
int *q = (int *)&d; // q[0]→d.c[0], q[1] = d.c[4]

間違ってたらごめんw
197デフォルトの名無しさん:2011/07/25(月) 02:11:08.90
>>195-196
ありがとうございます!

>位置をいじるとき(ポインタ演算)、キャストした型のサイズが影響。
始めて知りました。勉強になります!
198デフォルトの名無しさん:2011/07/25(月) 11:32:37.54
>int *q = (int *)&d; // q[0]→d.c[0], q[1] = d.c[4]
「16bit環境だと(ry」と重箱の隅を(ry
199デフォルトの名無しさん:2011/07/25(月) 14:19:05.16
× タイマ
○ タイマー
200デフォルトの名無しさん:2011/07/25(月) 14:50:26.16
そう考えていた時期が俺にもありました
201デフォルトの名無しさん:2011/07/25(月) 19:06:54.19
複数のファイル読み込む場合
ファイルポインタの宣言はひとつで
fopenを何度も使えばいいの?
202デフォルトの名無しさん:2011/07/25(月) 19:13:20.93
>>201
fclose しないと同時に fopen できる数の限界突破して fopen に失敗するようになるかも
203デフォルトの名無しさん:2011/07/25(月) 19:17:06.58
>>202
わかりました
204デフォルトの名無しさん:2011/07/25(月) 20:13:04.89
いいってことよ。
205デフォルトの名無しさん:2011/07/25(月) 20:46:35.37
サーティファイのC言語能力検定の難易度と社会での認知度ってどんなもんなの?
206デフォルトの名無しさん:2011/07/25(月) 20:49:57.45
引きこもりだからワカンネ
207デフォルトの名無しさん:2011/07/25(月) 20:51:21.88
漢字検定の法がマシなレベル
208デフォルトの名無しさん:2011/07/25(月) 20:55:37.51
モンテカルロ法を使って円周率を求めるものなんですが指定されたプログラム(下に載せました)に
(1)全試行回数と結果を表示する間隔をscanf()で読みそれにしたがって処理が進むようにする。
(2)各途中経過で求めたπの近似値のうち最もπの真値(=3.14159)に近い値とその時の試行回数を最後に表示させる。
という2つの点を加えて改良しなければならないのですがどなたか教えていただけませんか?
209デフォルトの名無しさん:2011/07/25(月) 20:59:37.14
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,CircleCount=0;
float x,y;
for(i=1;i<=100000;i++){
x=(double)rand()/(double)0x7fff;
y=(double)rand()/(double)0x7fff;
if(x*x+y*y<=1.0)
CircleCount++;
if(i%10000==0)
printf(“%7d回 n=%f\n”,i,4.0*CircleCount/(float)i);
}
return(0);
}
210デフォルトの名無しさん:2011/07/25(月) 21:01:30.75
>>209
仕様を満たしてないって怒られたいの?
211デフォルトの名無しさん:2011/07/25(月) 21:04:34.16
RAND_MAXが0x7fffじゃなかったらどうすんだよw
212デフォルトの名無しさん:2011/07/25(月) 21:10:41.02
すみません。
載せたプログラムは先生の方から送られてきたものを
丸写ししたもので初心者なんで
どこがおかしいとか言われても分からない点が多いです。
213デフォルトの名無しさん:2011/07/25(月) 21:12:23.52
ああこれから変更しろってことね
214デフォルトの名無しさん:2011/07/25(月) 21:21:00.15
すみません。
言葉が足りていませんでした。

上の2点を加えて改良しなさい
という課題でした。
215デフォルトの名無しさん:2011/07/25(月) 21:24:00.94
つか、モンテカルロ法とかいうけど、そんなん関係ないじゃん・・・
216デフォルトの名無しさん:2011/07/25(月) 21:25:28.15
乱数使って計算するのがモンテカルロ法だろ
217デフォルトの名無しさん:2011/07/25(月) 21:27:19.28
>>214
まず100000のところを変数にかえて
その変数はscanfで
218デフォルトの名無しさん:2011/07/25(月) 21:46:24.14
>>214
>>215
c言語得意な友人も同じ事ようなことを言ってましたが
先生いわく
「授業でやった範囲内で」
との事らしいです。
その友達もかなり苦労してるみたいです。
219デフォルトの名無しさん:2011/07/25(月) 21:50:08.90
>>218
宿題スレで聞いたら?

http://hibari.2ch.net/test/read.cgi/tech/1311089619/
C/C++の宿題片付けます 151代目
220デフォルトの名無しさん:2011/07/25(月) 21:57:01.88
>>218
10000のところ変数にかえて
その変数はscanfで
>>217とあわせて(1)終わり
221デフォルトの名無しさん:2011/07/25(月) 21:59:27.44
scanfはあかんで。getc使えや。
222デフォルトの名無しさん:2011/07/25(月) 22:41:56.75
(1)はできました!
(2)はどうすればいいのでしょうか

223デフォルトの名無しさん:2011/07/25(月) 22:44:41.03
(2)も頑張ってみる
224デフォルトの名無しさん:2011/07/25(月) 22:49:05.94
πとの差の絶対値を取って比較して小さいほうを残す
225デフォルトの名無しさん:2011/07/25(月) 22:53:34.01
ホントに初心者なので
アドバイス、というよりもソースプログラムを
書いていただけると助かります。
質問スレのほうでは
長すぎるのでリンクを使って貼ろうとしたら 
なぜかリンク先に飛ぼうとするとエラーになってしまってちゃんと質問できません。
ヨロシクお願いします。
226デフォルトの名無しさん:2011/07/25(月) 22:53:47.62
中学生みたいなこと言っていい?
227デフォルトの名無しさん:2011/07/25(月) 23:06:14.89
やりてーって?
228デフォルトの名無しさん:2011/07/25(月) 23:12:12.26
まじきしょいし笑
229デフォルトの名無しさん:2011/07/25(月) 23:21:34.57
この前C++入門書買って来て、プログラミングに挑戦しました。
出てくる文字列が、記号と、数字と、アルファベットだけなので、想像していた以上に簡単でした。
自分で書いたソースコードをコンパイルして、実行形式のアプリにするって面白いですね。
簡単なゲームソフトぐらいは作れるレベルになりたいと思う。
230デフォルトの名無しさん:2011/07/25(月) 23:57:17.20
すみません以下のコードの40〜46行目の部分を
日本語でどういう状態なのか説明していただけないでしょうか。
横に書いてはあるのですが、いまいち意味を理解できません。
http://ideone.com/Vglan
231デフォルトの名無しさん:2011/07/25(月) 23:59:50.64
>>230
主にifの中身の意味が理解できていません。
>if(fu>=1 && jimen[fu-1]>=4){
もしも踏んだ数が1より大きいまたは等しく、
かつ、配列のうちの1つ踏んだ部分を消して、それが小さければ4?と
段々意味が解らなくなってきてしまいます、どなたかお願いします…
232デフォルトの名無しさん:2011/07/26(火) 00:05:39.14
linuxのカーネルソースを読んでたら
change_huge_pmd() のような、ありがちな名前の関数が、staticも付けずに宣言されてたりする。

static を付けずに関数を宣言したら、
以後、どんなことをしても、
リンクされる全てのソースコードへ名前のスコープが通ってしまうのを防止できないかと思ってたのだが、
違うのだろうか?

こんな単純な名前が、数百万行のソースコードで、一度も被らないのが不思議でならない。
なにか、公開を一部のソースだけに限定する方法でもあるのですか?
233デフォルトの名無しさん:2011/07/26(火) 00:24:42.74
>>231
fu>=1 : fuが1以上
&& : かつ
jimen[fu-1]>=4 : jimen[fu-1]が4以上
234デフォルトの名無しさん:2011/07/26(火) 00:25:16.54
>>232
リンクしなきゃいい
235デフォルトの名無しさん:2011/07/26(火) 00:28:20.55
>>233
ありがとうございます
jimen[fu-1] の部分も実はよく解ってないのですが
これはどういう事なんでしょうか?
配列が10個に設定してあるので配列が1個減るよみたいな感じなんでしょうか
236デフォルトの名無しさん:2011/07/26(火) 00:29:33.01
>>235
hoge[5-2]
237デフォルトの名無しさん:2011/07/26(火) 00:31:22.05
>>235

すいませんhogeを見たことがないのですが
どう解釈したらよろしいでしょうか…本当に知識が無くて申し訳ないです
238デフォルトの名無しさん:2011/07/26(火) 00:33:57.89
一度基礎からやり直さないと
行き当たりばったりでやっていても身につかないよ
239デフォルトの名無しさん:2011/07/26(火) 00:38:05.28
いや、プログラミングに向いてないと思うんだ。
時間のムダだから他のことやったほうがいいよ。
240デフォルトの名無しさん:2011/07/26(火) 00:41:00.24
プログラミングに向き不向きもねーよカス
241デフォルトの名無しさん:2011/07/26(火) 00:41:06.11
正直私も自分で向いてないなと思うしやりたくないんですが
学生なもので…再試に向けて学習していたところでした…
242デフォルトの名無しさん:2011/07/26(火) 00:41:13.13
釣りだろ
243デフォルトの名無しさん:2011/07/26(火) 00:43:26.41
1,000行くらいコードを書けば見えてくる物はあるし、
3,000行くらい書けば分かってくる事もある
10,000行くらい書けば、多分独りで何とか出来る様になる
244デフォルトの名無しさん:2011/07/26(火) 00:44:19.99
>>235
配列の何番目の要素を使うかを[]内で指定している
例えばfuに3が入っていたらfu-1は2になり、
インデックスは0から始まるので、配列の3番目の要素って意味になる。
245デフォルトの名無しさん:2011/07/26(火) 00:55:57.90
>>244
なるほど、ぼんやりとですが理解できました。
例文どおり行けば3番目の要素になるということはわかりましたが
その後の>=4というのは
3番目の要素と4が等しい?ということですか?
246デフォルトの名無しさん:2011/07/26(火) 01:01:06.23
>= は ≧ と同じ意味。
<= は ≦ と同じ意味。
247デフォルトの名無しさん:2011/07/26(火) 01:08:16.37
以上以下ということでしょうか
248デフォルトの名無しさん:2011/07/26(火) 02:35:41.41
算数からやり直したほうが...
249デフォルトの名無しさん:2011/07/26(火) 04:14:55.36
単位を諦めろ。
250デフォルトの名無しさん:2011/07/26(火) 05:19:56.64
ここまで釣り。
251デフォルトの名無しさん:2011/07/26(火) 09:56:51.55
ソケットで、TCPポートからUDPポートをぶち開ける方法を教えてください
252デフォルトの名無しさん:2011/07/26(火) 10:28:10.51
どこでもお好きなポートをどうぞ。ただしやさしくお願いします。
253デフォルトの名無しさん:2011/07/26(火) 10:59:43.41
情報系の高校生だけど
C言語できたらモテますか
友人のバンドマン超えられますか?
254デフォルトの名無しさん:2011/07/26(火) 11:02:11.83
モテません。超えられません。またどうぞ。
255デフォルトの名無しさん:2011/07/26(火) 11:21:41.75
全てを否定しておきながら
また来いだと・・・
ぬかしおる・・・
256デフォルトの名無しさん:2011/07/26(火) 11:22:14.49
>>253
卒業までにOSか言語か高機能テキストエディタを作って、
フリーで公開し、みんなが使ってくれたら、高校生のうちにモテるよ。絶対だよ。
257デフォルトの名無しさん:2011/07/26(火) 11:37:44.65
携帯アプリのほうが盛り上がるだろ
258デフォルトの名無しさん:2011/07/26(火) 11:43:14.55
学校みんながあつまれるサイトとかのがいいんじゃね?
259デフォルトの名無しさん:2011/07/26(火) 11:58:29.89
日本版facebook?
260デフォルトの名無しさん:2011/07/26(火) 11:59:57.59
>>255
まさか、「またどうぞ」って「またどうぞお越しください」って意味だと思ってたりしないよな。
261デフォルトの名無しさん:2011/07/26(火) 12:07:46.80
みんな思ってるよ
262デフォルトの名無しさん:2011/07/26(火) 13:43:11.20
ぶぶ漬け食べはります?
263デフォルトの名無しさん:2011/07/26(火) 13:44:09.70
大盛りでもらおうか
264デフォルトの名無しさん:2011/07/26(火) 14:33:44.31
あぁ、ついでに氷もたのむ
265 ◆QZaw55cn4c :2011/07/26(火) 19:44:50.67
>>256
エディター, 言語, OS
どれも誰もが一度は夢見る分野だ‥‥‥。
266デフォルトの名無しさん:2011/07/26(火) 20:01:21.73
自分は、エディタ、コンパイラ、GUI ライブラリだったな
OS はドライバを用意するのが面倒くさそうなんで、心惹かれなかった
267デフォルトの名無しさん:2011/07/26(火) 21:53:54.40
すでにあるモノつくたって意味ない。ないモノつくれ、ないモノ。
268デフォルトの名無しさん:2011/07/26(火) 22:03:35.18
プログラマにとっては意味があるんだよ
269デフォルトの名無しさん:2011/07/26(火) 22:04:10.55
俺はprintfを極める。
270デフォルトの名無しさん:2011/07/26(火) 22:08:06.93
OSをゼロから作ったら面白いと思うけどな。
一切の予備知識無しに。独自進化の面白さがモロに出る。
271デフォルトの名無しさん:2011/07/26(火) 22:13:48.14
一般にosを作るっていうのは
カーネルから作るの?
272デフォルトの名無しさん:2011/07/26(火) 22:22:52.77
カーネルからというか、カーネルを作るのでしょう

ブートローダから作って、スケジューラ、仮想メモリ、デバイスドライバ、
ファイルシステム、ネットワークプロトコルスタック、その他細々と沢山

俺は無理
273デフォルトの名無しさん:2011/07/26(火) 22:40:17.96
俺はブートローダ、スケジューラ、仮想メモリ(の枠組み)まで作って次デバドラ作ろうと思ったけどハードウェアの資料が見つからなくて諦めた
274デフォルトの名無しさん:2011/07/26(火) 22:56:28.92
>>270
それなくして、他に何が残るのか
というくらい自らの存在意義をありありと感じられるところだからな
MVS や Multics や CP/M の流れをくまない独自の世界が
偉大だろうがショボかろうが歴史に骨を残す何かをしてる
ときには多値化やアナログ、有機物性やハイエナジーに
超高速不揮発性次世代ストレージと、おもしろいネタにはことかかない
生きた証ってのは「この手で」残すものだろ
275デフォルトの名無しさん:2011/07/26(火) 23:03:29.32
ほんとにOSを学びたいなら、CPUとメモリ、デコーダーから作るべきだと思うんだ・・・
276デフォルトの名無しさん:2011/07/26(火) 23:04:10.82
仮想マシンを作るのは愉しそうだな
277デフォルトの名無しさん:2011/07/26(火) 23:07:12.89
>>274
その生きた証を残せる逸材が、
地球上で一握りしか出てこない(ヽ´ω`)
278デフォルトの名無しさん:2011/07/26(火) 23:19:33.32
ちょっくらシリコンバレー行ってくるわ
279デフォルトの名無しさん:2011/07/26(火) 23:47:31.31
280デフォルトの名無しさん:2011/07/26(火) 23:52:02.07
ぁ、バカフリでシリコンバレーの見分け方やるみたい・・・
281デフォルトの名無しさん:2011/07/27(水) 00:31:51.32
スレチならごめん。
プログラミング経験のない人にC言語を教えているんだが,
最初に難しいと感じるのは,「演算子」の使い方なんだろうか?

よくある問題(プログラミングの問題)を解くのに、
「演算子を組み合わせてうまく使うこと」が結びついていないことがネックだと思うんだけど,
どうだろうか?当たり前と言われればそれまでだけど…
わからない感覚を教えていただけると嬉しい.
282デフォルトの名無しさん:2011/07/27(水) 00:36:21.51
代入あたりは、馴染みがないのかもしれん。
C以外でも、何かプログラミング言語をやってりゃ馴染んでるだろうけど。
283デフォルトの名無しさん:2011/07/27(水) 00:39:20.19
なるほど.
でも代入は何回かやってるうちに慣れてくる印象.
それよりも,if文の中の判定とかの書き方を思いつかない場合のほうが多そう
だなぁと思っているんだけど,どうだろうか?

(そもそも,if文で分岐するっていう発想ができない人もいるけどマレ)
284デフォルトの名無しさん:2011/07/27(水) 00:43:31.67
>>283
ifの判定というか、条件の記述はいまだに自信を失うときがあるw
ある角度をある範囲にクランプさせるふうに条件をかいたつもりが、
なんどやってもうまくいかなかったことがあるw
以上、以下を組み合わせてつかうだけのことでも、場合によっては混乱を来たす。
285デフォルトの名無しさん:2011/07/27(水) 00:46:25.17
286デフォルトの名無しさん:2011/07/27(水) 00:48:36.36
malloc.hをインクルードしてるのに、
_get_amblksiz関数が定義されてないってエラーがでます。
この関数はもう存在しないのでしょうか
287デフォルトの名無しさん:2011/07/27(水) 00:51:12.08
>>284
初心者相手なんで,そんな条件が複雑になることはないw
実際に開発となればテストケース書けば良いことなので…
今回の場合,高々複雑といっても,
「入力された数が4の倍数と5の倍数又は3の場合に数を表示せよ」そういった類の問題です.
例えば,
〜の倍数 と言われてどう書けばいいかわからないとか
条件が複数出てくる場合には || や && を使わなかったり

こういうのが最初につまずくポイントかなぁと思うんですけど,どうだろ?
(||とか&&とかを組み立てたり,〜の倍数という条件文を考える所が)
288デフォルトの名無しさん:2011/07/27(水) 00:55:54.65
> 〜の倍数という条件文を考える所が

あーはいはい。なるほど。そういうのある気がするし、
俺自体も何十年も前にそれを体験したような気もする。
289デフォルトの名無しさん:2011/07/27(水) 00:58:40.10
>>288
やっぱそうですよねw
そこの点で,
「何年も、何十年も前に体験した」ので,初心者が「何で」わからないのか
わからないみたいな状態です.そこで,知恵を貸していただきたいなと思ってます.
290デフォルトの名無しさん:2011/07/27(水) 01:16:57.60
何で分からないかに答えることは難しい。

/と%の意味を先に教えておいたなら、
各自の応用力(想像力)に任せるか、
先にもうイディオムとして教えちゃうかだろうし、
何で分からないかと問われれば、
応用できない、応用しにくい、基本が疎か、
せんせーがイディオムを教えてくれてない!
とかかな。

あとはやっぱり実物を触ってるかどうかも大きい。
実際に自由に工夫をしたり確認したりすることなしに、
理屈だけでものごとを考え、延長させていくことはたぶん不慣れなはず。
291デフォルトの名無しさん:2011/07/27(水) 01:25:49.77
お答え,ありがとうございます.

応用できる土台を作る為に,演算子に注目して問題を作ればいいのではないかと
思っているのですが,どう思いますか?

int main(void)とかprintfとかをわざわざ書かなくても演算子にだけ注目
して問題をとかせるのがいいかなぁと思っていて…

例えば,
int i = 10;
i%2 はいくつになりますか?
i%5 はいくつになりますか?
のような問題が効果的な気がするのですが,どうでしょうか?
292デフォルトの名無しさん:2011/07/27(水) 03:17:05.97
算数習ってない幼稚園児にでも教えてんのか?
293デフォルトの名無しさん:2011/07/27(水) 03:17:15.18
ぶっちゃけその程度のことも思いつかないような人はセンスが無いから適当にあしらえばいい
294デフォルトの名無しさん:2011/07/27(水) 04:44:59.47
むしろ、こんな教え方の人に習ったら不幸だな。俺ならK&Rを嫁!という。
295デフォルトの名無しさん:2011/07/27(水) 04:50:00.00
そんな時代遅れな本を読まされる方がよっぽど不幸だろ
それもmodの発想すら頭にないような奴に
296デフォルトの名無しさん:2011/07/27(水) 05:13:34.15
ひたすらコード書かせて、コンパイルして実行させる
297デフォルトの名無しさん:2011/07/27(水) 05:18:25.68
時代遅れな本ってw だったら、そもそもCを教えるなよww
298デフォルトの名無しさん:2011/07/27(水) 05:23:50.83
いるよなーこうやってK&Rに固執する奴
299デフォルトの名無しさん:2011/07/27(水) 05:38:54.70
じゃぁ、お前の言う、はじめてCを習う人にうってつけの
時代の最先端をいく本とやらをあげてもらおうか?
300デフォルトの名無しさん:2011/07/27(水) 05:48:35.02
入門書なんてそんなに書いてあることに違いは無いんだから、なんならネットから適当に拾ってきてもいいんじゃね
ただ、K&RはC言語に慣れた人ならともかく、初心者が読むもんではないだろ
いわんや初心者未満の者をや
301デフォルトの名無しさん:2011/07/27(水) 05:49:13.44
K&RはC入門者にはともかくとして、
プログラミング言語の入門者には向かない
見事なまでに簡潔すぎる

かつては他に選択肢がないという理由で
使われていたこともあったらしいけどさ
302デフォルトの名無しさん:2011/07/27(水) 06:15:49.11
初心者向け学習用開発環境「Microsoft Small Basic」 これがなにげに良くできている。
http://www.forest.impress.co.jp/docs/news/20110714_460395.html
303デフォルトの名無しさん:2011/07/27(水) 08:51:47.96
おすすめの入門書は猫でもわかるC言語
C言語を学ぶ上では避けて通れない名著だね
304デフォルトの名無しさん:2011/07/27(水) 09:36:57.77
>>291です.
皆様(>>292-303)レスありがとうございます.

できるやつは手が自然に動く→勝手にできるようになるのでほっといてもいいと思います.
でも,やっぱりできない人もいるのでそういう人は「センスがないから諦めろ!」でいいんでしょうか?
個人的には,効率的な学習法があればもう少しは「わからない」→「わかる」に
できると思っているんですが…

本はたしかに大事ですが,結局読む苦労があるので,ツールかなにかで支援できたら
嬉しいかなぁと思っています.(手を動かしながら自然に理解するという事)

>>302
マイクロソフトのSmallBasicは初耳ですね.
ありがとうございます.初心者にとってどういった点がよく出来ているのでしょうか?

305デフォルトの名無しさん:2011/07/27(水) 09:42:19.63
>>296
がいいこと言った!
トライアンドエラーの中で、コンパイラ、実行結果と対話して理解を深めていくんですよね。
306デフォルトの名無しさん:2011/07/27(水) 10:32:00.75
>「センスがないから諦めろ!」でいいんでしょうか?
いいんです。必要なら、出来る人にお金を払ってやってもらえばいいんです。
世の中、そーゆーもんです。
307デフォルトの名無しさん:2011/07/27(水) 10:40:42.30
PGは安いしな
小金でこき使うのがベスト
308 忍法帖【Lv=33,xxxPT】 :2011/07/27(水) 10:56:53.59
スレ違いになるけど、表計算ソフトでも触らせたら?
制御構造はない代わりに、セルを参照する計算式を幾らでも記述できるから
話題に出ていた除算や剰余、条件判断なんかを全部こなせるぞ。
おまけに、そこにある数値を使ってその場で計算できるからテストケースも作り易い。
309デフォルトの名無しさん:2011/07/27(水) 11:27:44.83
BASICで
「”●”をテンキーで操作するプログラムを作れ」
の方が入門基礎知識身につきそう。
310デフォルトの名無しさん:2011/07/27(水) 11:28:45.30
環境依存になりそう
311デフォルトの名無しさん:2011/07/27(水) 11:59:34.06
>>305
ごもっともです.

>>306
やめちまえとは言えない立場なのでごめんなさい.

>>308
なるほど!たしかに良いアイディアです!
基本的な演算子構造は学べますね.
ただ,Excelやった後にプログラミングに入ると
順次実行するという感覚がイマイチ身につかない様です…

>>309
なぜBASICなんでしょうか?
312デフォルトの名無しさん:2011/07/27(水) 12:21:13.33
もう、VBAでいいじゃん。
分かりやすいし、開発環境ほぼ無料みたいなもんだし
慣れりゃゲームでもネットワーク関係でもなんでも作れるし
言語的にもしっかりできてるしな
313 忍法帖【Lv=33,xxxPT】 :2011/07/27(水) 12:54:39.47
>>311
どっかのセルに=indirect(address(row()-1;column()))+1とでも入れて、
縦方向に並べる。
これの一つのセルの計算を、何列も並べる代わりに回数を指定したのがループ。
この説明で中坊の甥っ子は納得したぞ。
まぁ、マインドストーム知ってたけど。
314デフォルトの名無しさん:2011/07/27(水) 13:09:13.25
ほれ、これでも、やらせとけ。
http://home.jeita.or.jp/is/highschool/algo/index2.html
315デフォルトの名無しさん:2011/07/27(水) 14:23:46.56
>311
>>>309
>なぜBASICなんでしょうか?
「BASICを学べ」、と言う訳ではなく、
「BASICを使ってプログラムの基礎」を学べということで。

HelloWorld例

BASIC
10 PRINT "Hello World."

C言語
#include<stdio.h>
int main(void)
{
printf("Hello World.\n");
return 0;
}

大学でC始めたばかりの頃、先頭の#includや int main(void)の意味がわからず、
のどに何かつっかえたままやらされて、気分が悪かった。
訳の判らないまま勉強しても身に付かない。

Cと比べてBASICの方が記述量が少ないから理解し安いかなと思って書いた。

あと学ぶなら面白いプログラム、自分なら画面に動きのあるプログラムの方が書いてて楽しかった。
Cだと画面描画はライブラリそろえないとろくなことできないけど、
BASICはそういう命令が最初からそろってるので向いてると思った。

まぁ、いまさらBASIC勉強させられても…とは思うけど。
316デフォルトの名無しさん:2011/07/27(水) 15:11:01.26
それはお前がアホだから
317デフォルトの名無しさん:2011/07/27(水) 15:27:43.35
アホにプログラムを教える話じゃないのか?
318デフォルトの名無しさん:2011/07/27(水) 15:32:05.69
CのスレでBASIC先にやれとか、頭おかしいだろw
先にやるならアセンブリに決まってる
319デフォルトの名無しさん:2011/07/27(水) 16:07:00.88
「俺がやった学習順が一番正しい!!キリッ!!」
320デフォルトの名無しさん:2011/07/27(水) 16:28:40.98
キリッ!!(キリッ
321デフォルトの名無しさん:2011/07/27(水) 16:41:40.18
大学じゃC言語の前にPASCALやったけど、役に立ったとは思えなかった。

はじめてのC(どこの出版かは忘れた)、データー構造とアルゴリズム、C言語の非常識、Cからアセンブラの利用方法書いてあった本、
これらで基本的なことは学んだ。

322デフォルトの名無しさん:2011/07/27(水) 17:06:32.66
アセンブラなんか勉強して意味あるのかねぇ
パイプラインやらサイクルやらレジスタ演算やら覚えた所で今時意味がないじゃん

逆に意味不明なプライドと思想が付いて、スパゲティプログラマになりそうだ
323デフォルトの名無しさん:2011/07/27(水) 17:07:58.50
>>322
学ぶ意味はあるだろうけどアセンブラから学ぶ必要性があるかは分からん
324デフォルトの名無しさん:2011/07/27(水) 17:11:12.60
スクリプト言語からでもいいじゃん。
325デフォルトの名無しさん:2011/07/27(水) 17:27:41.57
英語がおすすめ
326デフォルトの名無しさん:2011/07/27(水) 18:08:41.94
BASIC先にやっておくメリット。

・ポケコンやDSで動かせるので初期投資が小さい
・言語仕様が素朴で小さく理解しやすい
・行番号とGOTOという非構造化の不便さを学べる
327デフォルトの名無しさん:2011/07/27(水) 18:11:52.65
このスレでやんな氏ね
328デフォルトの名無しさん:2011/07/27(水) 18:13:04.74
DSで動くんか、と探したらスマイルブームか、、、
ちょっと買ってみようかなあ
329デフォルトの名無しさん:2011/07/27(水) 18:47:41.68
>>326
はい、ダウト
行番号や GOTO 君と仲良くなると
お別れがつらくなり
本当は GOTO 君きらいじゃないのに
世論に流されて自らに嘘をつくという
プログラマである前に人間として恥ずべきことをするようになる
330デフォルトの名無しさん:2011/07/27(水) 18:54:17.99
アルゴリズム本(データ操作な話から 数値解析や AI等)の説明で
使われる言語が C (もしくはそれに近いメタ言語)が多いんじゃないかな?と思う
331デフォルトの名無しさん:2011/07/27(水) 18:56:52.00
別に推奨してる訳じゃないのに書いてない部分に突っ込みいれてダウトってwwww
332デフォルトの名無しさん:2011/07/27(水) 19:08:19.89
>>331=326

> BASIC先にやっておくメリット。

ここで推奨し、

> ・行番号とGOTOという非構造化の不便さを学べる

ここで理由付けしてるだろ

俺はその理由に異論があるので
おまえ自身が「非構造化の不便さ」を学んでいなさそうなことに突っ込んだんだよ

行番号と GOTO の何が悪いんだ? 話はそれからだ
333デフォルトの名無しさん:2011/07/27(水) 19:12:35.74

MFCでマルチスレッドを使ったアプリを開発してます。
大きなファイルを読み込むときにアプリがフリーズしてしまうので、その防止です。
単一のファイルなら問題ないのですが、複数のファイルを読み込むときクリティカルエラーが出ます。
Expression("Buffer too small",0)
アプリを終了させないで続けて読み込もうとするときにも出ます。
どのような可能性があるのか教えて下さい。必要ならソースも見せます。
よろしくお願いします。
334デフォルトの名無しさん:2011/07/27(水) 19:40:06.22
非同期読み込みで解決
335デフォルトの名無しさん:2011/07/27(水) 19:44:00.19
それだけでいいのですか?エラーの解消になりますか?
ちなみにドラッグアンドドロップにしてあります。
336デフォルトの名無しさん:2011/07/27(水) 20:07:03.65
>> BASIC先にやっておくメリット。
>
>ここで推奨し、
どんな物にもメリットはあると思う。
そのメリットを書いただけで推奨だと言うのは強引だろ。

GOTO云々はよくわからん。
337デフォルトの名無しさん:2011/07/27(水) 20:09:37.14
>>335
バグってるから死ぬの
デバッグしろとしか言いようがない

誰かデバッグしてください、ってんなら現象が再現するソースを出して
俺はしないけどしてくれる奇特な人がいるかもしれない
338デフォルトの名無しさん:2011/07/27(水) 20:14:16.08
シンプルで素朴な手段としては、ファイルの読み込み完了を示すフラグを用意して

/// tt_file_io.c
tt_read_fire()
{
    tt_compleate_flag = FALSE;

    fopen();
    while() { fread(); }

    tt_compleate_flag = TRUE;
}

として、利用する際にスピンロックで待機する方法はどうか

/// tt_a.c
tt_read_fire();
while(tt_compleate_flag == FALSE) {
    sleep(250Hz);
}

とすれば、これらが別スレッドで動いてても、単一スレッドで動かしてるかのように同期をとれるはず。
これをウインドウズの場合にどう書けばいいのかは知らない。
339デフォルトの名無しさん:2011/07/27(水) 20:17:21.11
>>336=331=326

デメリット説明をしない悪徳業者だな、まるで

> ・行番号とGOTOという非構造化の不便さを学べる
> GOTO云々はよくわからん。

破綻は確認できたので、この旨のみの報告はいらない
340デフォルトの名無しさん:2011/07/27(水) 20:20:40.49
これは335に対する回答ですか?>338
341デフォルトの名無しさん:2011/07/27(水) 20:25:23.97
そもそもMFCって C++ベースなんじゃ?
なんでこのスレに書いたのか疑問
342デフォルトの名無しさん:2011/07/27(水) 20:29:35.20
元々Cで書いてあったソースにVSでグラフィック化したので元のモジュール(スレッドで実行する)関数はC言語なのです。
343デフォルトの名無しさん:2011/07/27(水) 20:38:48.10
>>342
ふむ。 問題を起こす可能性の範囲が広すぎだ。
GUI化せず 非MFCでマルチスレッドのコード書いて問題の範囲を制限汁
344デフォルトの名無しさん:2011/07/27(水) 20:45:17.41
スレッド使ったときのみの現象です。
単一スレッドしか作ってないので複数スレッドを作らないと複数のファイルやフォルダに
対応できずエラーが起きるのではないかと思っていますがどうでしょうか?
Win32APIは全く知りません。
345デフォルトの名無しさん:2011/07/27(水) 21:54:04.73
Socket通信で、client側も自ポートを指定したいんですが、普通はどんな風にするんでしょう?

取り合えずbindして自ポートを指定して、それからconnectしてみましたが、なんか素直じゃないような気がしてます。

Connectする前にキャストしながら色々設定する時に、自ポートを指定出来たら良いのになと思うんですが、どこかにサンプルありませんか?

Cで作ってます。
346デフォルトの名無しさん:2011/07/27(水) 21:56:00.16
スレッドがどういう役割分担なのかが不明なので憶測だけど
A:ファイルをロードし、メモリー確保してメモリーに読み込んで、そのメモリーアドレスをリターン
B:Aから返ってきたアドレスを介して、データを利用する

上記のAがウインドウズ側スレッドの担当で、自作モジュール側スレッドの担当がBなのだと予想。
Aはメモリー確保予定のアドレスを即座にリターンして、実際の作業はBに並行して行われるのだとしたら、
Bは、まだ実際には確保されてないメモリーに対して読み書きしてる状態になる可能性があるかもしれない。

だとすれば、BはAの作業が完了までメモリーの利用を待つ形にしたらどうだろうかと思った。

ウインドウズは持ってないので知らないけど、すぐ返ってバックグラウンドで読み込みしてるのをポーリングで
確認するような仕様だったとすれば、この辺な気がする。

もしくは全然別の理由かもしれないけど、いずれにしてもファイル読み込み側と、利用側とのデータ利用順序が、逆転してしまってる場合にエラーが出るような気がする。
スレッド使った場合のみエラーが出るあたりからして、この系統の理由な気がする。
347デフォルトの名無しさん:2011/07/27(水) 21:57:25.76
Win32を知らなくてもマルチスレッドのプログラミング技法を
知っていれば問題ない。
マルチスレッドのプログラミング技法を知らないなら、諦めろ
とか、出来る人に金払ってやってもらえとしか言えない。
348デフォルトの名無しさん:2011/07/27(水) 21:58:46.86
>>345
それが正しい唯一の方法。
349デフォルトの名無しさん:2011/07/27(水) 22:03:50.58
>>347
処理系依存否定教に汚染されてるとそうなるな
Win32 なら Win32 でいいから具体例を触ってみなけりゃまるっきり話にならない
その「出来る人」なら知らないわけがないことだが
350デフォルトの名無しさん:2011/07/27(水) 22:05:08.51
>>311です.
みなさまご教示ありがとうございました.
いいアイディアをもらったので色々また自分なりに練り直したいと思います.
351デフォルトの名無しさん:2011/07/27(水) 22:17:52.49
実行ファイルってそこから元のソースファイルを読むのって不可能ですよね?
つまり、
{
int a=100;
printf("AHAHA");
return 0;
}
の場合 「a」 の存在は作成者しか知りえませんよね?
352デフォルトの名無しさん:2011/07/27(水) 22:22:34.53
AfxBeginthreadでワーカースレッドを呼び出して、そこで読み込みを行っています。
同期とかは取ってないので先に終了メッセージが出てしまいます。
プログラムを見せたら原因がわかるでしょうか?同期も非同期もしてません。
それに作ったスレッドも正しく終了してません。ファイルごとに新しく
スレッドを作るべきなんでしょうか?
よろしくお願いします。
353デフォルトの名無しさん:2011/07/27(水) 22:28:16.34
ファイル一個の場合はエラーが出ません
354デフォルトの名無しさん:2011/07/27(水) 22:42:56.25
スレッドセーフな関数じゃないというオチだろう(おおよそ static 変数使ってる)
355デフォルトの名無しさん:2011/07/27(水) 22:51:22.90
>>351
逆コンパイル。
わかるよ。
356デフォルトの名無しさん:2011/07/27(水) 22:57:07.85
>>351
変数の識別子という意味ならYES
357デフォルトの名無しさん:2011/07/27(水) 23:27:13.77
最適化でエリミネートされている可能性大
358デフォルトの名無しさん:2011/07/27(水) 23:28:38.22
サブディれとりにあるファイルを一括処理できるのに、カレントディレクトリにある複数ファイルを指定するとエラーになります。
359デフォルトの名無しさん:2011/07/28(木) 00:28:50.76
普通にコンパイルしたら動くのに
exeファイルにビットマップを埋め込もうとリソースをリンクすると
access violationが出るんだけどなんなんだろこれ・・・
360 ◆QZaw55cn4c :2011/07/28(木) 02:04:35.49
>>359
リソースファイルをさらしてみては?
361デフォルトの名無しさん:2011/07/28(木) 07:03:19.13
C言語始めたばかりです。
以前COBOLを扱っていました。

C言語をある程度使える、
と、面接で言えるには
どのくらいのレベルが必要ですか?
362デフォルトの名無しさん:2011/07/28(木) 07:05:21.19
開発実績がある = ある程度使える
と解釈されます。
363デフォルトの名無しさん:2011/07/28(木) 07:58:39.17
とりわけ COBOL 屋なら >>362 に突っ込めるだろ
そこは C でも変わらないよ
364デフォルトの名無しさん:2011/07/28(木) 09:52:16.15
そこってどこですか?
365デフォルトの名無しさん:2011/07/28(木) 10:06:25.24
突っ込める?
366デフォルトの名無しさん:2011/07/28(木) 10:07:32.71
ケツは勘弁してください
367デフォルトの名無しさん:2011/07/28(木) 13:57:40.11
ここはGMP(多倍長計算ライブラリ)の質問も可ですか?
368デフォルトの名無しさん:2011/07/28(木) 14:37:48.49
もちろん
369デフォルトの名無しさん:2011/07/28(木) 15:24:08.78
GMPより巨大整数を使うならNTLがおすすめ
370デフォルトの名無しさん:2011/07/28(木) 15:27:12.95
いまいち理解できないソースがあるので教えてください

整数a=配列b[添字]-'0';

このさいごの配列に対して引いてるのはどういう意味なんでしょうか?
ゼロじゃなさそうですが上手いことググれないので助けてください…
配列からゼロという文字を引く…みたいになってますが…
371デフォルトの名無しさん:2011/07/28(木) 15:29:48.96
'0'は48だよ
372デフォルトの名無しさん:2011/07/28(木) 15:32:31.81
マルチスレッドは初心者のプログラムじゃないって書いてあったんですけどここでもいいですか?
初心者です。
373デフォルトの名無しさん:2011/07/28(木) 15:32:48.10
atoiでも自作してるのか
374デフォルトの名無しさん:2011/07/28(木) 15:34:59.38
文字コードにも依存するが
文字としての'0'〜'9'から
文字としての'0'を減算してやることで
値としての0〜9に変換できる
375デフォルトの名無しさん:2011/07/28(木) 15:36:47.85
ズコーですな
376デフォルトの名無しさん:2011/07/28(木) 15:38:22.97
図工ですね
377デフォルトの名無しさん:2011/07/28(木) 15:39:28.44
>>374
文字コードに関わらず動作することが保証されている。
378デフォルトの名無しさん:2011/07/28(木) 15:45:36.08
しねーよカス
379デフォルトの名無しさん:2011/07/28(木) 16:14:15.31
0から9まで隙間なく並んでる前提だな。
パンチカード前提で飛び飛びになってる
EBCDICも数字部分はたまたま並んではいるが・・・
380デフォルトの名無しさん:2011/07/28(木) 16:15:03.69
ありがとうございます
つまり、配列から引くことで文字列から数値に直してから、整数型の変数にぶち込んでいるということですね
381デフォルトの名無しさん:2011/07/28(木) 16:15:29.72
たまたまじゃないよ規格読め
382デフォルトの名無しさん:2011/07/28(木) 16:18:51.86
たまたまあってたから、今後は抜けが無いように
後から規格作ったんだよw
383デフォルトの名無しさん:2011/07/28(木) 16:21:59.84
文字コード規格の規格とかあるんかな?
384デフォルトの名無しさん:2011/07/28(木) 16:40:05.27
0〜9って文字コード上でも並んでなければならないって決まってるの?
385デフォルトの名無しさん:2011/07/28(木) 16:46:07.76
無い
俺俺文字コードでも文字コードにはかわりない
数字が連続になってない文字コードを作ってもよい
386デフォルトの名無しさん:2011/07/28(木) 16:50:48.33
unsigned整数の最大値をインクリメントした時って未定義?
387デフォルトの名無しさん:2011/07/28(木) 16:56:58.71
2以上の整数x,yを順に入力し,
y/xが以下の条件のうちどれかを満たすまで計算するプログラムを作る
1.割り切れる
2.循環する
3.整数部も含め30桁まで出力
ただし,xは2以上,yは0以上でなければならず,この条件を満たすまで再度入力させること.小数点は1桁として扱わない.また,x=2,y=4のときのように,xがyの約数であるときは整数部のみ出力し,小数点を出力してはならない.
使うのは
#inculude<stdio.h>
のみ

っていう条件なんですがさっぱりわかりません、分かる方ヒントください
388デフォルトの名無しさん:2011/07/28(木) 17:00:18.98
>>369
π計算です・・・
389デフォルトの名無しさん:2011/07/28(木) 17:08:43.33
1/3は0.3って表示すんの?それとも0.33?
390デフォルトの名無しさん:2011/07/28(木) 17:12:37.98
>384
C言語で使うんなら必須。

JIS X3010 : 2003 プログラム言語C
5.2.1 から抜粋

ソース基本文字集合および実行基本文字集合の双方において、10進数字に関する上の並びにおいて、
0の右側に並んでいる各文字の値は、一つ左側にある文字の値に比べ1だけ大きくなければならない。
391デフォルトの名無しさん:2011/07/28(木) 17:13:48.21
計算するのは循環するまでで、表示は
0.33333333333333333333333333333(整数部も含め30桁)
じゃない?
392デフォルトの名無しさん:2011/07/28(木) 17:15:06.43
win32apiでリソースとして埋め込んだビットマップを利用する場合
LoadBitmapで呼び出したのでいいの?
いま作ってるプログラムは一応LoadBitmapで動いてるけど
猫でも分かる〜のサイト見てるとFindResourceやら
LoadResourceやら使ってビットマップ呼び出してるから
どっちが正しいのか良く分からない;
393デフォルトの名無しさん:2011/07/28(木) 17:19:46.42
>>387
これって、さっとできる初心者向けの問題なの?
さっと解く方法が思いつかなくて1桁1桁計算しようとしたらかなり面倒だった
394デフォルトの名無しさん:2011/07/28(木) 17:28:58.48
循環の判定以外は、小学生時代に習った割り算のやり方で十分だろ
395デフォルトの名無しさん:2011/07/28(木) 17:32:53.57
xの桁数が大きいと厄介だぞ。
割り算のあまりを覚えておく方法だと、循環する分だけ覚えておく必要があるから
結局30個分のあまりを覚えておかなければならなくなる。
396デフォルトの名無しさん:2011/07/28(木) 17:33:34.67
1/2を0.5
1/4を0.25
と表示して欲しい場合って、printfのフォーマット指定でうまく書けるもの?

もうひとつ
整数部も含め30桁って、printfのフォーマット指定でうまく書けるもの?
397デフォルトの名無しさん:2011/07/28(木) 17:37:31.49
>>379
0〜9までは続いていることは保障されているよ
398デフォルトの名無しさん:2011/07/28(木) 17:44:15.46
>>390
あの規定は拡大解釈するとおかしいことになる

「実行文字集合」とあるところは「翻訳環境が想定する実行文字集合」と読むべきで
開発してよいものの範囲を言語が主張するような解釈では筋が通らない
399デフォルトの名無しさん:2011/07/28(木) 17:52:25.94
#include <stdio.h>

void main( int argv, char* argc[] ){
int x = 10000; /* 任意の値 */
int y = 49; /* 任意の値 */
int cnt;

printf("test: %d\n", x % y);
/* 余りを10倍して割るを繰り返す */
for( cnt = 0 ; cnt < 30 && (x %= y) != 0 ; cnt++ ){
x *= 10;
printf("%d", x/y);
}
printf("%d", x/y);
}

出力するだけでいいならこんな感じか
入力処理は頑張れ
400デフォルトの名無しさん:2011/07/28(木) 17:55:33.17
貼るソース間違えますた
#include <stdio.h>

void main( int argv, char* argc[] ){
int x = 10000; /* 任意の値 */
int y = 49; /* 任意の値 */
int cnt;

printf("%d.", x / y);
/* 余りを10倍して割るを繰り返す */
for( cnt = 0 ; cnt < 30 && (x = x % y) != 0 ; cnt++ ){
x = x * 10;
printf("%d", x/y);
}
printf("%d", x/y);
}
401デフォルトの名無しさん:2011/07/28(木) 18:06:38.50
>400
循環小数かどうかはどこに表現されてるの?
402デフォルトの名無しさん:2011/07/28(木) 18:08:28.44
>>396
>1/2を0.5
>1/4を0.25
%g
403デフォルトの名無しさん:2011/07/28(木) 18:15:44.35
>>395
循環の長さは、最大素因数だと思うが。
404デフォルトの名無しさん:2011/07/28(木) 18:20:02.06
>>395,403
間違えた。 同じ余りが再度でてきたら循環。
405デフォルトの名無しさん:2011/07/28(木) 18:21:31.31
>>404
ん?だから最大30個(29個か?)のあまりを覚えとかなきゃいけないんでしょ?
406デフォルトの名無しさん:2011/07/28(木) 18:26:44.91
#include <stdio.h>

#define INDIV_MAX (5) /* 終了する循環回数 */
#define LOOP_COUNT (30) /* 表示する桁数 */

void main( void ){
int x;
int y;
int cnt;
int prev_x;
int indiv_cnt;

printf("xの値を入力してください ->");
scanf("%d", &x);
printf("yの値を入力してください ->");
scanf("%d", &y);

printf("= %d", x / y);
if( x % y ) printf(".");
/* 余りを10倍して割るを繰り返す */
for( cnt = 0, indiv_cnt = 1 ; cnt < LOOP_COUNT && (x = x % y) != 0 && indiv_cnt < INDIV_MAX ; cnt++ ){
x = x * 10;
if( prev_x == x ){
indiv_cnt++;
} else {
prev_x = x;
indiv_cnt = 1;
}
printf("%d", x/y);
}
}
407デフォルトの名無しさん:2011/07/28(木) 18:29:24.28
循環を勘違いしてますた
出直してきます
408デフォルトの名無しさん:2011/07/28(木) 18:30:54.59
どうやら動いてるっぽい? http://ideone.com/bcBkn
409デフォルトの名無しさん:2011/07/28(木) 18:31:54.76
>>405
例えば、1/77
=> 0.012987012987012988.....
最初の0.0の時点での余り10を覚えておいて、次回以降の余りが10になったら循環。
410デフォルトの名無しさん:2011/07/28(木) 18:33:01.18
整数部も含め30桁でしょ
http://ideone.com/7vNqN
411デフォルトの名無しさん:2011/07/28(木) 18:37:54.48
同じ余りがもう一回でてきたら循環という事でよろしいんでしょうか?
412デフォルトの名無しさん:2011/07/28(木) 18:39:04.62
>>409
ん?だから最大30個(29個か?)のあまりを覚えとかなきゃいけないんでしょ?
30回くらい割り算するんだから
413デフォルトの名無しさん:2011/07/28(木) 18:55:46.23
一度でも余りがかぶれば循環するから最初の一個覚えとけばいいってことで無いの?
数学は苦手なのでわかりません。
414デフォルトの名無しさん:2011/07/28(木) 19:04:06.23
0.123434343434...  0.12以下34が続くような部分循環(?) ってありえるの?
415デフォルトの名無しさん:2011/07/28(木) 19:06:27.65
>>414
頭悪いの?
416デフォルトの名無しさん:2011/07/28(木) 19:06:50.95
っていうかyは0でもいいのか
417デフォルトの名無しさん:2011/07/28(木) 19:19:35.92
>414
1222 / 9900

418デフォルトの名無しさん:2011/07/28(木) 19:23:43.73
循環探すのって大変だな。
419デフォルトの名無しさん:2011/07/28(木) 19:29:20.91
有理数は循環小数になるか有限桁で終わるかしかない
そして有限桁で終わるのは決まったパターンがある
420デフォルトの名無しさん:2011/07/28(木) 19:34:41.85
その点トッポってすげぇよな〜
最後までチョコたっぷりだもん
421デフォルトの名無しさん:2011/07/28(木) 19:35:32.97
>>419
既約分数の形にしたときに分母が2または5の素因数しか持たないとき有限小数
422デフォルトの名無しさん:2011/07/28(木) 19:36:57.53
1/9=0.1111111...
1/99=0.01010101010101010101010101010101...
1/999=0.001001001001001001001001001001001...

0.345345345... = 345/999

こんなんでヒントになる?
423デフォルトの名無しさん:2011/07/28(木) 19:57:03.20
なんのヒントだよ
誰がヒントを求めてるんだよ
424デフォルトの名無しさん:2011/07/28(木) 19:57:29.64
おれ
425デフォルトの名無しさん:2011/07/28(木) 19:59:42.01
よっしゃー
ぱくりまくりつつできた!
http://ideone.com/YQFqU
426デフォルトの名無しさん:2011/07/28(木) 20:12:35.97
Warning: Unable to perform incremental link - performing full link...
Fatal: Access violation. Link terminated.
これどういう意味?
427デフォルトの名無しさん:2011/07/28(木) 20:40:43.87
日本語でおk
428デフォルトの名無しさん:2011/07/28(木) 22:38:25.76
gccでアライメントを考慮しない構造体って定義できますか?
例えば
struct{
 char a;
 int b;
};
で5バイトになるようにしたいのです。
429デフォルトの名無しさん:2011/07/28(木) 22:40:05.17
__attribute__((packed))
430デフォルトの名無しさん:2011/07/28(木) 22:43:21.90
>>428
struct {
char a;
char b_[sizeof(int)];
int & b() { return reinterpret_cast<int&>(b_); }
int const & b() const { return reinterpret_cast<int&>(b_); }
}
431デフォルトの名無しさん:2011/07/28(木) 22:43:41.57
>>429
ありがとう
432デフォルトの名無しさん:2011/07/28(木) 22:46:43.06
>>430
参考になりましたthx
433デフォルトの名無しさん:2011/07/28(木) 23:01:55.80
>>430
これ、なにをしてるんですか?理解できません。
434デフォルトの名無しさん:2011/07/28(木) 23:38:58.49
>>430
スレ違い。
435デフォルトの名無しさん:2011/07/28(木) 23:43:04.75
doubleとかの浮動小数点を扱うときに出る誤差って
どんなときに注意するものなんでしょうか?

1桁の整数の四則演算程度ではまったく気にしなくていいのでしょうか?
436デフォルトの名無しさん:2011/07/28(木) 23:46:14.16
>>434
目的に依る
お金の勘定とか、誤差のレベルで利害が大きく出る場合は注意が必要
437デフォルトの名無しさん:2011/07/28(木) 23:46:48.20
スマソ

× >>434
>>435
438デフォルトの名無しさん:2011/07/28(木) 23:53:39.83
1桁の整数の四則演算をdoubleでやると誤差が出ることがあるということでしょうか?
整数の四則演算なので、誤差があってはいけないレベルだと思ってます

具体的には、4つの1桁の整数を元に四則演算で10にするってやつです
439デフォルトの名無しさん:2011/07/28(木) 23:57:01.09
>>438
実装依存です

たいていの場合には整数のみを扱う限り15桁までは誤差がまったくでません
440デフォルトの名無しさん:2011/07/29(金) 00:20:12.85
1/3*3が正しく1になる理由が自分には理解できていないことがわかりました
とりあえず誤差は出なさそうなので気にしないことにします
ありがとうございます
441デフォルトの名無しさん:2011/07/29(金) 00:22:23.26
>>440
その演算順序だと整数のみを扱ってないよ
442デフォルトの名無しさん:2011/07/29(金) 00:31:04.57
1桁の整数の四則演算と言っていたのはこういうののことです
実際にいくつか試しても誤差が出なかったので問題が発生するまで保留にしときます
問題が出てくれたほうがちゃんと理解できそうだし
443デフォルトの名無しさん:2011/07/29(金) 00:36:39.86
なぜ宿題スレと並行でやってんの?
444デフォルトの名無しさん:2011/07/29(金) 00:38:33.66
>>442
#include<stdio.h>

int main(void)
{
double x, y;
int i, j;

for(i=1;i<20;i++)
{
x=1.0;
y=x/i;
j=y*i;
printf("%d\n", j);
}

return 0;
}
445デフォルトの名無しさん:2011/07/29(金) 01:19:28.37
ビットマップリソースをexeファイルに埋め込もうとしてるのですが
13件前後(?)以上埋め込もうとするとaccess violationが出ます
件数や使用量による制約でもあるのでしょうか?
またその場合はdllなどに分割して埋め込むような形で対応するのでしょうか?
ちなみに使ってるコンパイラはbccです
446デフォルトの名無しさん:2011/07/29(金) 01:22:53.58
誤差の話なんだが
http://ideone.com/SiEB0
これだと結果EQになってるが
自分の環境(gcc version 4.3.4 20090804 (release) 1 (GCC))だと
NEになる

誤差わけわからんな
447デフォルトの名無しさん:2011/07/29(金) 02:21:55.75
>>446
自分gcc使い始めて1日目なので勘違いしてるかもだけど、
EQ : -mfpmath=sse
NE : -mfpmath=387
だったよ。(gcc 4.6.2/mingw)
448デフォルトの名無しさん:2011/07/29(金) 03:09:35.39
>>386
0になると保証されている
449デフォルトの名無しさん:2011/07/29(金) 04:05:44.88
ポインタのポインタやポインタのポインタのポインタの使い道を教えてください
450 ◆QZaw55cn4c :2011/07/29(金) 05:24:09.87
451デフォルトの名無しさん:2011/07/29(金) 08:08:52.30
>>445
bccは制限がある。
それ以来bccを使うのを辞めた
452デフォルトの名無しさん:2011/07/29(金) 10:26:20.40
>>451
それガチ?
とりあえずgccとやらを入れてくるわ
453デフォルトの名無しさん:2011/07/29(金) 10:55:44.15
学生のうちにC言語は、
このレベルまで学習した方が良い
っていうのあります?
454デフォルトの名無しさん:2011/07/29(金) 10:59:52.48
全部かな
455デフォルトの名無しさん:2011/07/29(金) 11:27:51.51
なんだかなぁ・・・
456デフォルトの名無しさん:2011/07/29(金) 11:31:09.82
>>453
そうやってヘンに目標を区切る必要あるかな?
やったらやったぶんだけ君のアドバンテージになるんだし。
卒業してからのことを考えてるんだったらなおさら。
457デフォルトの名無しさん:2011/07/29(金) 11:32:35.64
>>453
やりたいと思う事ができるようになるまで
458デフォルトの名無しさん:2011/07/29(金) 13:46:05.77
わからないことを検索して解決できるレベルまで。
459デフォルトの名無しさん:2011/07/29(金) 13:53:30.69
bccでプログラムかいてコンパイルして
gccでリソース埋め込みだけするとか可能?
460デフォルトの名無しさん:2011/07/29(金) 14:03:18.02
そこまでしてbccにこだわりたいの?
461デフォルトの名無しさん:2011/07/29(金) 14:17:13.00
思ったより移行が大変そうだから
段階的にいこうかなと・・・
462デフォルトの名無しさん:2011/07/29(金) 14:47:19.43
なにが大変なの?Cygwin使えば?
463デフォルトの名無しさん:2011/07/29(金) 15:02:16.49
ソースの書き換えが大変
464デフォルトの名無しさん:2011/07/29(金) 18:50:42.29
VCでいいじゃん
465デフォルトの名無しさん:2011/07/29(金) 18:57:48.34
BCCに依存するようなコード書いてるのか
てかどんなコードがそれにあたるのか知らんな
BCC→GCCで書き換えなきゃいかんソースってどんなの?
466デフォルトの名無しさん:2011/07/29(金) 19:12:07.94
うるさいな・・・
467デフォルトの名無しさん:2011/07/29(金) 19:19:38.76
__int64とか?
468デフォルトの名無しさん:2011/07/29(金) 19:23:16.54
移植性とか考えないで作られると同じコンパイラでもバージョンアップも
できないとかよく見るしな。
90年代にVC6で作ったシステムが、それ以降のVCに移行できないとか。
469デフォルトの名無しさん:2011/07/29(金) 19:32:21.41
なるほど gcc のビルドを自分でやったこともないわけか
470デフォルトの名無しさん:2011/07/29(金) 19:38:54.95
gccとかのCコンパイラってCでかいてあるんでしょ?
今世界中からC言語コンパイラがきえたらどうなるのっと
471デフォルトの名無しさん:2011/07/29(金) 19:39:27.80
>>469
何いってんの?
472デフォルトの名無しさん:2011/07/29(金) 19:53:02.61
コンパイル自体は互換性あるんだろうけど
ヘッダーやらdll、lib辺りは互換性も糞もなくね?
473デフォルトの名無しさん:2011/07/29(金) 20:11:20.66
474デフォルトの名無しさん:2011/07/29(金) 20:59:20.80
bccは無料コンパイラではあるが Win32 の深いトコロをやりはじめると
構造化例外処理(_try 〜 _finaly)が辛い
キーワードだけ見るとC++っぽいけどVCのCのコンパイラ拡張で提供されてる部分
475デフォルトの名無しさん:2011/07/29(金) 21:28:55.09
大学時代、友人が学校のPCのHDDからTurboCコピーしていった。
FDしかなかったのになぁ。
476デフォルトの名無しさん:2011/07/29(金) 21:44:00.61
やはり Turbo C 2.01 がオススメだよな。
統合開発環境も付いてるから初心者でもすぐ始められるし。
477デフォルトの名無しさん:2011/07/29(金) 22:38:17.22
だな。
コンパイルは早いし、ライブラリも充実してるから高度なソフト開発に最適だし。
478デフォルトの名無しさん:2011/07/29(金) 23:12:03.12
TurboCって、まだ売ってんの??
479デフォルトの名無しさん:2011/07/30(土) 01:30:09.32
>>478
まだborlandがdelphi手放さなかった頃はborland C++ suiteと言う製品として買えてた
(中身はDOS時代のアセンブラ/コンパイラの詰合せ)
480デフォルトの名無しさん:2011/07/30(土) 14:13:59.88
配列の「添え字」と「要素番号」の違いってなんですか?
481デフォルトの名無しさん:2011/07/30(土) 16:30:35.39
なんじゃそりゃw
482デフォルトの名無しさん:2011/07/30(土) 19:16:21.84
質問です
int 同士の割り算で常にマイナス方向に丸めたいのですが
よい方法があれば教えてください

-21/10 を -3 にしたいです

画像処理に使うので高速な方法でお願いします
483デフォルトの名無しさん:2011/07/30(土) 19:29:10.27
>>482
a / b

(a-b+1) / b

にすればいいのかな。

a = -21 → (-21-10+1) / 10 = -3
a = -20 → (-20-10+1) / 10 = -2
484デフォルトの名無しさん:2011/07/30(土) 19:32:19.58
>>483
そうです
今は a が0以上のときと負のときとで場合分けしていますが
ループの一番深い部分なので高速化したいです
485デフォルトの名無しさん:2011/07/30(土) 19:50:20.06
>>482
http://www.google.com/codesearch#/
で、floorの処理を探して眺めてみてはどうだろうか。
486デフォルトの名無しさん:2011/07/30(土) 19:52:15.35
>>482
限定的な方法
適用できる条件がかなり厳しいけど
全体を正方向にシフトして計算した後で元の場所にシフトして戻す

a / b
で b が変化しにくい時
シフトする数を c=1000 とか安全な数として d=c*b を予め計算する

(a+d)/b-c
欲しい結果はコレ

加算一回、減算一回増えるだけで済む
487482:2011/07/30(土) 20:11:00.77
>>486
b はループの浅い部分で決まるので使えそうです
安全な数をどうやって求めるか考えてみます
ありがとうございました

>>483 >>485 さんもありがとうございました
488デフォルトの名無しさん:2011/07/30(土) 22:44:57.76
『今日もいい天気です
明日もよい天気でしょう。』

とコンパイラしたいのですが『今日もいい天気です。¥n明日もいい天気でしょう。¥n』とでてしまします。これは何が原因なのでしょうか。コードも貼っておきます。

/*練習*/
#include<stdio.h>
int main()
{
printf("今日もいい天気です。¥n");
printf("明日もいい天気でしょう。¥n");

return 0;
}

ちなみにMacのターミナルを使ってC言語の勉強をしています。親切な方、ご教授ください。
489デフォルトの名無しさん:2011/07/30(土) 22:47:12.79
>>488
全角の¥を、半角の\にする
490デフォルトの名無しさん:2011/07/30(土) 22:47:50.41
¥じゃだめだ\にしろ
491デフォルトの名無しさん:2011/07/30(土) 22:53:14.40
>>489
>>490

おお!出来ました!ありがとうございます!
492デフォルトの名無しさん:2011/07/30(土) 22:56:54.92
>>488-491
高校時代によく見た光景が。。。

493デフォルトの名無しさん:2011/07/30(土) 23:02:43.11
macの罠
494デフォルトの名無しさん:2011/07/30(土) 23:03:28.29
Mac 関係無い
495デフォルトの名無しさん:2011/07/30(土) 23:05:18.48
macは宗教
496デフォルトの名無しさん:2011/07/30(土) 23:26:52.73
macを手に入れて、最初にしたのは
ターミナルを使えるようにすること
497デフォルトの名無しさん:2011/07/30(土) 23:39:18.86
>>496
それは、家電量販店でmac見かけたら最初にやる事
498デフォルトの名無しさん:2011/07/31(日) 00:05:36.16
最初にやることはマルチタッチジェスチャーじゃろ
499デフォルトの名無しさん:2011/07/31(日) 00:27:44.52
>>488
「よい天気」とだしたいのに「いい天気」と書いてれば「いい天気」と出るのは当たり前だろ
500デフォルトの名無しさん:2011/07/31(日) 00:58:29.64
GUIはいらない
501デフォルトの名無しさん:2011/07/31(日) 01:18:43.59
× \
○ ??/
502デフォルトの名無しさん:2011/07/31(日) 12:09:18.52
> コンパイラしたい
503デフォルトの名無しさん:2011/07/31(日) 16:32:14.76
任意のbit範囲を反転させる関数はどのようにすればいいでしょうか?

int rev_bit(unsigned n, int lower, int upper) {
}

int main(void) {
unsigned n = 0x32; /* 00110010 */

n = rev_bit(n, 1, 5); /* 1〜5bitの範囲を反転 */
printf("0x%x", n); /* 0x29 00101001 */

return 0;
}
504デフォルトの名無しさん:2011/07/31(日) 16:53:30.04
return n ^ ((1 << upper) - (1 << (lower - 1)));
505デフォルトの名無しさん:2011/07/31(日) 16:55:40.44
あ、反転って左右反転か。忘れて。
506デフォルトの名無しさん:2011/07/31(日) 17:07:20.86
一般的な言葉とは言え、別のことをあらわす用語そのまま
使ったら混乱するわw
507デフォルトの名無しさん:2011/07/31(日) 17:32:31.39
あとビット番号は 0 から開始が通常な
上位ビットを左で書かないと怒られる案件もある

紛らわしい言葉遣いはコード・日本語ともによくある
引っかからないことも適性の1つだ
508デフォルトの名無しさん:2011/07/31(日) 17:41:55.03
>>503
int rev_bit(int n,int l,int u) {
for (--l,--u;l<u; ++l,--u)if(((n&(1<<l))>>l)^((n&(1<<u))>>u))n^=(1<<l)|(1<<u);
return n;
}
509デフォルトの名無しさん:2011/07/31(日) 17:49:22.28
8bitの範囲ならテーブル作るのもひとつの手だな。
510デフォルトの名無しさん:2011/07/31(日) 18:08:33.46
>>504-509
助言、ありがとうございます。
>>508のコードでうまくいきました。
511デフォルトの名無しさん:2011/07/31(日) 18:57:43.36
VC++2008とVC++2010ってどこが違うの?大幅に変更されてたりする?2008がインストール出来なかったから代用したいんだけど。
512デフォルトの名無しさん:2011/07/31(日) 18:59:12.60
2008:軽い
2010:重い
513デフォルトの名無しさん:2011/07/31(日) 19:04:10.58
>>512
そんだけ?
514デフォルトの名無しさん:2011/07/31(日) 19:49:41.27
515デフォルトの名無しさん:2011/07/31(日) 20:00:22.22
printf 系の関数を使わずに、float や double を
(効率よく)文字列化する方法を教えてください。
なお、OS や処理系に依存するのは NG です。
516デフォルトの名無しさん:2011/07/31(日) 20:05:07.72
宿題か?
517デフォルトの名無しさん:2011/07/31(日) 20:08:09.91
>>516
宿題ではないです。
518デフォルトの名無しさん:2011/07/31(日) 20:09:30.46
質問者が回答者に対して NG 宣言するのは斬新だなw
519デフォルトの名無しさん:2011/07/31(日) 20:14:38.78
「環境非依存である事」という条件は
斬新なのでしょうか?
520デフォルトの名無しさん:2011/07/31(日) 20:15:31.30
指数部読んで割る10掛ける10を有効桁数繰り返す。
521デフォルトの名無しさん:2011/07/31(日) 20:22:25.73
>>519
NG は No Good という事

クイズの出題者や試験の採点者が使うなら分かるけど、
教えて貰う相手にお前の答えは Good じゃないとは
言わないでしょ
522デフォルトの名無しさん:2011/07/31(日) 20:29:26.72
>>521
>教えて貰う相手にお前の答えは Good じゃない

誰もそんなこと言ってなくね?
523デフォルトの名無しさん:2011/07/31(日) 20:31:23.38
そう思うならそれで良いよ
524デフォルトの名無しさん:2011/07/31(日) 20:34:30.49
>>520
懇切丁寧なご説明、感謝します。
おそらくは「自分で実装するしかない」という事を
言いたかったのだと解釈したのですが、正しいでしょうか?

>>521
情緒溢れる解説、誠に有り難う御座います。
世の中には色んな人がいることを
改めて学ばせていただきました。
525デフォルトの名無しさん:2011/07/31(日) 20:42:32.43
浮動小数点をどう表示するかで答が変わるんじゃあ?
526デフォルトの名無しさん:2011/07/31(日) 20:53:15.04
結局は既存のコードを研究するのが一番の近道なんじゃないかな

http://www.ragestorm.net/blogs/?p=57

反対方向だけど、少し前に文字列を double に変換するルーチンの問題が話題になってたね
あのときペーパーを幾つか漁ってみたけどサッパリ頭に入らんかった
527デフォルトの名無しさん:2011/07/31(日) 20:55:34.16
float、double の内部形式がそもそも環境依存じゃなかったっけ
528デフォルトの名無しさん:2011/07/31(日) 20:56:10.01
2回のサイコロ試行でゴールに到着
1 2 3 4 5 6 7 8 9
*
>Dice try (N=end)
number = 2
1 2 3 4 5 6 7 8 9
# *(3)
>Dice try (N=end)
number = 6
1 2 3 4 5 6 7 8 9
    #(3) *(9)
となるようにプログラミングしたいのですが、
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int num;
srand( (unsigned int)time( 0 ) );
printf( "1 2 3 4 5 6 7 8 9\n" );
{
int i,sai;
static int a;
sai=rand()%6+1;
a=0;
a=a+sai;
for( i = 0 ; i < 8 ; i++ );
return 0;
}
ここからどうすればいいですか?(見にくくなってすみません)
529デフォルトの名無しさん:2011/07/31(日) 20:58:02.10
>>526
>結局は既存のコードを研究するのが一番の近道なんじゃないかな

やはりそうですか・・・

もしや「私の知らない裏技がないか?」と思って、
今回尋ねてみたのですが。

了解しました。
530デフォルトの名無しさん:2011/07/31(日) 21:02:16.57
>>528
ごめん
そもそもルールが分からんのだが。。。
531デフォルトの名無しさん:2011/07/31(日) 21:09:17.43
>>529
これが多分 IEEE の倍精度浮動小数点数を効率よく出力するアルゴリズムだと思われ

http://www.cs.indiana.edu/~dyb/pubs/FP-Printing-PLDI96.pdf
532デフォルトの名無しさん:2011/07/31(日) 21:26:19.00
>>531
なるほど。
こんな事に対しても「高速化」の研究がされていたのですか。
勉強になりました。
533デフォルトの名無しさん:2011/07/31(日) 21:33:47.48
>>530
さいころを一回ずつ振って出た数字だけ進み9でとまれば終わり
オーバーしたら余りの目の分だけ戻る
てルールです。
534デフォルトの名無しさん:2011/07/31(日) 21:40:00.65
>>533
2回以上振っても、9で止まらない限り終わらない。でおk?
535デフォルトの名無しさん:2011/07/31(日) 21:50:32.93
>>534
はい
536デフォルトの名無しさん:2011/07/31(日) 22:03:22.42
>>535
おk
取り合えずもう一個"*"表示用の配列用意しようか
いじる所多そうだから、こっちでも一回作ってみる
537デフォルトの名無しさん:2011/07/31(日) 23:12:31.50
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
    int num,i,sai;
    char ps[] = " \n";
    char c;

    srand((unsigned int)time(0));
    num = i = sai = 0;

538デフォルトの名無しさん:2011/07/31(日) 23:12:59.43
    while(i != 8)
    {
        sai = rand()%6+1;
        num = i;
        i += sai;
        printf("サイコロの目%d\n",sai);
        printf("123456789\n");

        if(i > 8)
        {
          i = 8-(i-8);
        }
        ps[i] = '*';
        printf("%s\n",ps);
        ps[i] = ' ';
        printf("続けますか? Yes = Y/y No = Enterj\n");
        c = getchar();
        if(c == 'Y' || c == 'y') return 1;
    }
    printf("クリアしました。\n");
    return 0;
}
539デフォルトの名無しさん:2011/07/31(日) 23:18:06.37
   return 0;
}

作ってみたお。
以上、3分割です。
ベースとなるソースとは全然違う形になったけど、良いよね?
(クリアするまで一気に終わっちゃうから、続けるか確認する処理も勝手に追加したしw)

最初から自分で書いたらもうちょいましな形になったんじゃろか・・・
540デフォルトの名無しさん:2011/07/31(日) 23:20:19.35
>>539
ありがとうございます。
541デフォルトの名無しさん:2011/07/31(日) 23:21:24.97
おおう・・・
ps[] ="\n"は、"\n"を"        \n"(空白8個分)に置き換えて下さい。
542デフォルトの名無しさん:2011/07/31(日) 23:23:11.96
追記
psはポジションの略としてpsという変数名にしました。
(ただのaじゃ味気ないので勝手に変更しました)
543デフォルトの名無しさん:2011/07/31(日) 23:24:45.93
>>540
どういたしまして。
どういう動作してるか、調べてみて下さいね。
544デフォルトの名無しさん:2011/07/31(日) 23:26:53.57
あう・・
>>541に嘘かいてた・・・
空白は9個分です。
545デフォルトの名無しさん:2011/07/31(日) 23:35:15.32
バグ発見・・・
続けますか?じゃなくて、終わりますか?だった・・・orz

546デフォルトの名無しさん:2011/08/01(月) 01:26:38.71
http://codepad.org/8bbwUisZ

構造体のポインタをアドレス渡しして、関数内でmallocしてメンバ変数を変更したいのですが上手くいきません
なぜfoo内のmallocが反映されないのでしょうか
547デフォルトの名無しさん:2011/08/01(月) 01:32:53.98
メインで 構造体のポインタを宣言しているが
fooにポインタのポインタで渡していないから
(fooでポインタのポインタに領域を確保する)
548546:2011/08/01(月) 01:43:40.94
hoge自体が存在するアドレスにmallocをしないといけないから、
それをするためにはhogeのアドレス、すなわち&hogeを渡さないといけない、ということで良いんでしょうか

それでは、現状だと一体何が受け渡されているのですか?
hogeは最初ぬるぽですが、このまま関数に渡した場合、hogeの示すアドレスを渡すわけで、
そのアドレスに対してmallocという考え方だったのですが。


すみません、ポインタがよく理解出来ていないみたいです
549 ◆QZaw55cn4c :2011/08/01(月) 01:49:14.27
550546:2011/08/01(月) 01:49:33.92
あ、mallocで得たアドレス値を格納する先をアドレスとして知らなくてはいけないのか
だから&でその変数のアドレスを渡さないとそりゃ反映されないっすね。すみません、ありがとうございました
551546:2011/08/01(月) 01:50:34.43
>>549
修正ありがとうございます。
ようやく少し解った気がしました
552 ◆QZaw55cn4c :2011/08/01(月) 01:57:06.64
>>548
>>549 

main() の hoge には NULL というか、でたらめ値が入っていて、
それが foo() にそのままわたっています。foo() の hoge は NULL というかでたらめ値。
次に hoge には、malloc() の返り値が入ります。
そしてそのまま foo() は終了し、hoge の値は胡散霧消です。hoge は関数内ローカル変数ですから、そのままでは main() に渡りません。
main() に hoge の値を返したいのなら、そのように表立って記述しなければなりません。
>>549 foo()

あるいは、main() の hoge のアドレス &hoge を foo() に渡して、
p = &hoge
として *p = malloc() とすれば、main の hoge に malloc() の返り値を入れる、ということを foo() の中で行うことができます。
>>549 bar()
553 ◆QZaw55cn4c :2011/08/01(月) 01:57:45.07
失礼。遅かったようですね >>552 は捨て置いてください。
554デフォルトの名無しさん:2011/08/01(月) 14:00:58.50
MacのターミナルでC言語を勉強しているものです。

0.500000+10.50000=11.00000
cの値は215でこれに11を加えると226となります
eには"A"が代入されています

と表示させたいのですが、エラーとなってしまいます。どこが間違ってるのか分かる方、教えてください。

#include<stdio.h>

int main()
{

double a=0.5,b=10.5;
int c=215,d;
chare e='A';



printf("%f+%f=%f\n",a,b,a+b);
d=c+11;
printf("cの値は%dでこれに11を加えると%dとなります\n",c,d);
printf("eには\"%c\"が代入されています\n",e);

return 0;

}
555chare:2011/08/01(月) 14:07:16.96
>>554
エラーが出たならエラーメッセージくらい貼りなさい。
556デフォルトの名無しさん:2011/08/01(月) 14:12:34.53
chare e='A';
557デフォルトの名無しさん:2011/08/01(月) 14:22:37.19
>>555

はい、すみませんでした。こちらになります...。

main.c: In function ‘main’:
main.c:8: error: ‘chare’ undeclared (first use in this function)
main.c:8: error: (Each undeclared identifier is reported only once
main.c:8: error: for each function it appears in.)
main.c:8: error: expected ‘;’ before ‘e’
main.c:15: error: ‘e’ undeclared (first use in this function)

>>556

シングルクォーテーションの使い方がおかしいということですか?
558デフォルトの名無しさん:2011/08/01(月) 14:25:50.76
char
だろ、どこで教わった?
559 忍法帖【Lv=2,xxxP】 :2011/08/01(月) 14:34:29.66
注意力が足りないだけだろ。>555に答えがあるのに気付いてないし。
560デフォルトの名無しさん:2011/08/01(月) 14:37:10.40
>>558

あああああああああ!!!!ありがとうございます!!!!プログラムが間違ってると思ってたのですが、そうではなくて単なる打ち間違いだったんですね...。すみません、助かりました。
561デフォルトの名無しさん:2011/08/01(月) 14:38:24.93
>>559
ほんとにその通りです...。このようなことで書き込みをしないで済むようにもっと集中したいと思います...。
562デフォルトの名無しさん:2011/08/01(月) 14:39:13.30
>>557
main.c: main 関数の中で:
main.c: 8: エラー: chare が未定義(この関数で始めて使った)
main.c: 8: エラー: (未定義の識別子は関数ごとに一度だけ報告します)
main.c: 8: エラー: e の前に ; がない
main.c: 15: エラー: e が宣言されていない(この関数で始めて使った)
563 忍法帖【Lv=2,xxxP】 :2011/08/01(月) 14:45:29.41
微笑ましい遣り取りと言わざるを得ない。
564デフォルトの名無しさん:2011/08/01(月) 19:49:39.73
C言語でwebプログラミングなんて、できるのかな?
565デフォルトの名無しさん:2011/08/01(月) 19:58:11.03
>>564
サーバー側の話なら、cgiは作れるけど。
クライアント側の話なら、もうちょっと簡単かも
566デフォルトの名無しさん:2011/08/01(月) 20:08:57.07
まったくの無知が興味本位で聞きたいんだけど
webプログラミングっていうのは要するに
ソケットプログラムで80番ポートを利用するサーバーを作って
ハイパーテキストを返せばいいの?
567デフォルトの名無しさん:2011/08/01(月) 20:37:29.29
>>566
それはどちらかというとウェブサーバプログラミングじゃないの

socket とか listen とか accept とかは下回りのライブラリに任せて、
レスポンスヘッダ以降がウェブプログラミングの範疇だと思うわ
568デフォルトの名無しさん:2011/08/01(月) 21:08:38.65
サーバーサイドの話なのかクライアントサイドの話なのか
その両方なのか さっぱり見当がつかない

ぱっと思い浮かんだのが php で鯖内DBとやりとりするようなのだが
# これはサーバーサイドで ある程度環境整えてる上で駆動されるスクリプト のプログラミング
569デフォルトの名無しさん:2011/08/01(月) 21:14:06.23
クライアントサイドだとウェブアプリプログラミング
570デフォルトの名無しさん:2011/08/01(月) 21:34:25.81
質問者はwebプログラミングがなんなのか理解して無いんだろうな。
571デフォルトの名無しさん:2011/08/01(月) 21:37:43.31
apatchやAN HTTPDのようなソフトのことを言っているのか、cgiを処理するようなソフトのことを言っているのか。
572デフォルトの名無しさん:2011/08/01(月) 21:50:13.77
質問です
ポインタをインクリメントしたら、次に差すアドレスって
何個跳びになるんでしょうか?

0x0002←この値をインクリメントする

お願いします
573デフォルトの名無しさん:2011/08/01(月) 21:54:07.83
>>572
sizeof(型)で調べられます。charの場合のみ1と決まっています。
574デフォルトの名無しさん:2011/08/01(月) 21:58:43.39
>>573
あ、そういうことですか
宣言したときのサイズで、そこからそのサイズ分飛ぶことにねるんですね

ありがとうございます
575デフォルトの名無しさん:2011/08/01(月) 22:24:40.62
>>574
ちなみにsizeof(変数) でもOKです。sizeof(リテラル)でもOKです。
576デフォルトの名無しさん:2011/08/01(月) 22:33:10.46
sizeof(生け贄)
577デフォルトの名無しさん:2011/08/01(月) 22:43:01.79
char c = 'a';
sizeof(c) = sizeof(char) ≠ sizeof('a');
578デフォルトの名無しさん:2011/08/01(月) 22:48:41.91
sizeof(^^;)
579デフォルトの名無しさん:2011/08/01(月) 23:13:14.75
sizeof('a') = sizeof(int)
sizeof(' ^^ ') = sizeof(int)
580デフォルトの名無しさん:2011/08/01(月) 23:16:08.18
? ポインタ(アドレス)のサイズじゃぁ?
581デフォルトの名無しさん:2011/08/01(月) 23:18:33.76
if( !sizeof(おっぱい) ) printf("人に非ず");
582デフォルトの名無しさん:2011/08/01(月) 23:25:07.75
sizeof(int) ≦ sizeof(int*)
流石にintの方が大きいことは無いよな?
583デフォルトの名無しさん:2011/08/01(月) 23:31:30.29
ポインタ変数って基本的に
4バイト固定?
584デフォルトの名無しさん:2011/08/01(月) 23:34:32.35
>>583
64bitなら8バイトじゃね?
585デフォルトの名無しさん:2011/08/01(月) 23:42:29.45
すいません64bitのwindowsで作成したアプリは32bitのwindowsでは動かないんでしょうか
586デフォルトの名無しさん:2011/08/01(月) 23:48:50.43
>>585
32bit用にコンパイルすればおk
587デフォルトの名無しさん:2011/08/01(月) 23:55:02.43
>>583
32bitOSでは、そう。
588デフォルトの名無しさん:2011/08/01(月) 23:56:56.97
16bit DOS用だと…。
589デフォルトの名無しさん:2011/08/01(月) 23:58:41.56
はずかしながらosの○○bitがレジスタ長だと今知りました。
590デフォルトの名無しさん:2011/08/02(火) 00:07:08.23
intelだとintってレジスターのサイズじゃねえの?
だからポインターもunsigned intで代用できると思ってたわ。
591デフォルトの名無しさん:2011/08/02(火) 00:12:35.86
8bitCPUでも16bitレジスタが使えた
592デフォルトの名無しさん:2011/08/02(火) 00:30:24.62
>>588
DOSの時代は、ポインタが16bitと32bitと混在してたな。
593デフォルトの名無しさん:2011/08/02(火) 00:32:05.22
DOSだと386/486でも16bit。
Win32だと64bitCPUでも32bit。


当たり前か。
594デフォルトの名無しさん:2011/08/02(火) 00:36:37.55
DOSの時代はMS-CもTurboCもポインタを16bit, 32bit混在させられた。
595デフォルトの名無しさん:2011/08/02(火) 00:36:53.33
つ LP64
つ LLP64
596デフォルトの名無しさん:2011/08/02(火) 00:38:15.97
ちなみに仮想マシンとかだと 8bit align 前提で、その分ポインタ幅を切り詰めて
型情報を埋め込んだりします
597デフォルトの名無しさん:2011/08/02(火) 00:43:28.34
ポインタに関連して質問です。
下記みたいな感じで#define にアドレスを宣言しておいて
関数の引数をポインタにしておけば、関数に対してアドレスって渡せますか?

void sub(int *aaa);
#define ABC 0x00FF //渡したいアドレス

main{

sub(ABC);

}

void sub(int *aaa){

}
598デフォルトの名無しさん:2011/08/02(火) 00:46:50.31
sub((int*)ABC);
キャストしときゃ大丈夫なんじゃね?
599デフォルトの名無しさん:2011/08/02(火) 00:48:58.70
>>597
そこまで書いてるなら、自分で動かして見たら良えやん

あと、{}の使い方はC言語の流儀に従っとけ
600デフォルトの名無しさん:2011/08/02(火) 00:52:16.08
static void sub(int * aaa)
{
...;
}

sub((int *) 0xff);
601デフォルトの名無しさん:2011/08/02(火) 01:23:08.34
>>598
>>599
>>600
ありがとうございます。
家には環境がないので、明日試してみます。(環境作ってないだけですが…)
キャスト勉強になりました!

{}の使い方って>>600さんみたいな感じが一般的なんですね。
普通にコンパイル通ってたので気にしたことなかったです。

602デフォルトの名無しさん:2011/08/02(火) 01:52:44.69
{}のインデントスタイル
http://astyle.sourceforge.net/astyle.html
603デフォルトの名無しさん:2011/08/02(火) 02:10:01.57
604デフォルトの名無しさん:2011/08/02(火) 02:28:53.83
スタイルはプロジェクト内で統一&ツールで整形・チェックでいいじゃん。
品質とかアルゴリズムの理解とか、もっと重要な事があるだろ。
605デフォルトの名無しさん:2011/08/02(火) 12:21:17.38
>>601
スタイルは言語ごとや個人でも違うけど、その言語の入門書に書かれてるスタイルに合わせるのが無難
606デフォルトの名無しさん:2011/08/02(火) 13:02:25.82
スタイルならここでしょ
http://www.ioccc.org

どこぞの胡散臭いとこみたいな洗脳じゃなく
しっかり議論(論争ではない)された合理性こそ大事

自分と違うスタイルなんてそこいら中にあるのに使われた瞬間アウトとか論外だよ
607デフォルトの名無しさん:2011/08/02(火) 14:46:32.56
>>577>>579
かっこつけんなぼけ
608デフォルトの名無しさん:2011/08/02(火) 14:49:47.30
intの時はかっこ必要でない?
609デフォルトの名無しさん:2011/08/02(火) 14:50:04.58
sizeof(char)の括弧は必要
610デフォルトの名無しさん:2011/08/02(火) 15:11:12.71
char c = 'a';
sizeof(c) = sizeof((char)) ≠ sizeof('a');

sizeof('a') = sizeof((int))
sizeof(' ^^ ') = sizeof((int))
611デフォルトの名無しさん:2011/08/02(火) 15:19:32.74
パイプを使ってプログラムAの標準出力をプログラムBの標準入力に繋ぐことはできますが、
これをさらにプログラムBの標準出力をプログラムAの標準入力に繋ぐにはどうしたらいいですか?
612デフォルトの名無しさん:2011/08/02(火) 16:21:10.80
A|B|A
613デフォルトの名無しさん:2011/08/02(火) 16:25:30.37
書き方が悪かったの。
プロセスA、プロセスBと読み替えて下さい。
614デフォルトの名無しさん:2011/08/02(火) 16:27:33.95
どっから実行したの?
pipe() 使うのはどう?
615デフォルトの名無しさん:2011/08/02(火) 19:53:17.50
標準入出力が何かわかってるのかな?
616デフォルトの名無しさん:2011/08/02(火) 20:55:49.17
どっちのプログラムの方が処理早いんだろうって悩んだ場合
普通はコンパイラにアセンブリ言語で吐かせて見比べるの?
それとも時間計ったりするの?
617デフォルトの名無しさん:2011/08/02(火) 21:01:17.65
職人の勘かな
618デフォルトの名無しさん:2011/08/02(火) 21:30:02.84
測る
測定結果に疑問があったらアセンブリを見てみたり色々する
619デフォルトの名無しさん:2011/08/02(火) 21:35:08.11
速度は実測が基本
620デフォルトの名無しさん:2011/08/02(火) 21:36:06.35
処理時間を測定したい場合
普通にtime.hの関数使って測定したらいいの?
実時間を計ればいいだよね?
プロセッサ時間?
621デフォルトの名無しさん:2011/08/02(火) 21:50:17.14
あなたが気のすむ測り方でやるしかない
622デフォルトの名無しさん:2011/08/02(火) 22:04:41.47
実測に愕然とした後、そこで終わるやつと、そうでないやつがいるんだよ
このスレでタコツボやってる間、前者の域を出ることは決してない
623デフォルトの名無しさん:2011/08/02(火) 22:12:40.34
gprofを使えば、プログラム中での各関数の合計実行回数と、合計実行時間の一覧表を得られる。
この表を見れば、最も沢山実行されて、かつ、最も処理に時間が掛かってる関数がわかる。

合計で0.0010秒しか実行されない関数を、2倍の速度にしても 0.0005秒しか速くならないけど、
合計で1秒実行される関数を、2倍の速度にすれば、0.5秒も速くなる。

アセンブラのmovdqa命令の実行時間を知りたいなどのシビアな要求の場合は、gprofでは厳しいが、
gprofは、ボトルネックの大体の見当を付けるのには便利。
624デフォルトの名無しさん:2011/08/02(火) 22:32:59.10
>>623
有益な情報をありがとうございます
625デフォルトの名無しさん:2011/08/02(火) 23:46:35.29
ある変数の値によって処理が多数分岐する場合
switchやif使うより関数ポインタ配列使って分岐したほうが
早いんだろうか?
誤差レベル?
626デフォルトの名無しさん:2011/08/03(水) 03:33:34.51
>>625
だから、処理時間は実測が原則。
それより、関数ポインタ配列を使うとコードが大きく変わることになるから
運用者のスキルが低いと「>625さんは難しいコードを書くから保守できなくて困る」なんてことになりかねないw

冗談兎も角、コンパイラの最適化で随分違うから、実測するしかないよ。

>>623
gprofだと、インライン展開される関数の所要時間が全く測定できないけどね。
なので、gprofで切り分けた後はclock()かgettimeofday()のような関数を使って
セクションごとの通過時刻を記録することも場合によっては有効。

つーか、この辺の話は入門編向きじゃなかったね。
627デフォルトの名無しさん:2011/08/03(水) 11:00:19.50
ハノイの塔の問題でfor文の中に入るプログラムがわかりません。
どなたか教えてください。
ハノイの塔の移動回数を求めるプログラムです。
#include<stdio.h>
int main(){
int h[9][99],n,nmax,t3,t4,w;
printf("ハノイの塔問題 : 円盤の移動回数\n");
scanf("%d",&nmax);

h[3][0] = 0;
for(n=1;n<=nmax;n++){ h[3][n] = h[3][n-1]*2 + 1;}
h[4][0] = 0; h[4][1] = 1; h[4][2] = h[3][2];
for(n=3;n<=nmax;n++){



}
printf("円盤数  塔三本 塔四本\n");
for(n=1;n<=nmax;n++){
printf("%6d%12d%8d\n",n,h[3][n],h[4][n]);
}
}
628デフォルトの名無しさん:2011/08/03(水) 12:01:49.79
ググレカス
629デフォルトの名無しさん:2011/08/03(水) 12:40:05.38
質問スレでググれとは何事か
俺もわかんねーけど
630デフォルトの名無しさん:2011/08/03(水) 12:48:54.73
#include<stdio.h>
int main(){
int n,nmax,w;
printf("ハノイの塔問題 : 円盤の移動回数\n");
scanf("%d",&nmax);

w = 2;
for(n=1;n<nmax;n++){ w*=2; }
w-=1;
printf("移動回数 %d\n",w);
}
移動回数を求めるならこんな感じ?
631デフォルトの名無しさん:2011/08/03(水) 12:54:41.00
何を聞いてるか理解できないアホは帰れよw
632デフォルトの名無しさん:2011/08/03(水) 12:57:16.12
まあググればなんとかなるかもな。
for文の中は、ハノイの塔が4本の時の移動回数だな
633デフォルトの名無しさん:2011/08/03(水) 13:17:01.56
>>627
ハノイの塔は再起で書く方が楽なプログラムの代表例ですよ
634デフォルトの名無しさん:2011/08/03(水) 13:30:59.49
4本のときを再帰で書いてみてくれ
635デフォルトの名無しさん:2011/08/03(水) 15:58:45.38
cygwinのgccでcygwin1.dllの不要なexeファイルを吐かすにはどうすればいい?
636デフォルトの名無しさん:2011/08/03(水) 16:58:04.36
グッグレ〜カス
637デフォルトの名無しさん:2011/08/03(水) 16:59:52.40
638デフォルトの名無しさん:2011/08/03(水) 17:03:13.86
gcc4だとできなかった気がする
639デフォルトの名無しさん:2011/08/03(水) 17:15:57.05
クロスコンパイラがうんたらーってできないんだけど
640デフォルトの名無しさん:2011/08/03(水) 17:34:09.05
>$ gcc -mno-cygwin test.c
>gcc: The -mno-cygwin flag has been removed; use a mingw-targeted cross-compiler.

うんたらーってなんだよ。書かれてるまんまだろ。
641デフォルトの名無しさん:2011/08/03(水) 17:43:07.91
cygwinのdevelop全部ぶちこんだけどできねーぞ
642デフォルトの名無しさん:2011/08/03(水) 17:51:35.38
できるわけねーだろ。
643デフォルトの名無しさん:2011/08/03(水) 17:51:52.21
そのフラグなくなったから; mingw (をインスコして)そっちでやれ
644デフォルトの名無しさん:2011/08/03(水) 17:53:23.16
>>634
#include <stdio.h>

void hanoi(int,char,char,char);

void main(void)
{
int n;
printf("How many disks? ");
scanf("%d",&n);

hanoi(n,'a','b','c');
}

void hanoi(int n,char a,char b,char c)
{
if(n>0) {
hanoi(n-1,a,c,b);
printf("No. %d disk is moved from %c to %c.\n",n,a,b);
hanoi(n-1,c,b,a);
}
}
645デフォルトの名無しさん:2011/08/03(水) 17:54:38.88
646デフォルトの名無しさん:2011/08/03(水) 17:57:36.64
647デフォルトの名無しさん:2011/08/03(水) 18:02:02.42
4本だって言ってんだろw
648デフォルトの名無しさん:2011/08/03(水) 18:03:41.38
cygwin なんて使ってるからw
つーか、cygwin が何なのかを理解せずに使ってるのは問題外だな。
素直に VC++ を使うとか、Vine 辺りを使っとけばいいのにな。
649デフォルトの名無しさん:2011/08/03(水) 18:04:55.70
話を聞かない奴が多いなw
650デフォルトの名無しさん:2011/08/03(水) 18:06:06.94
少しは残ってる脳をつかえw ここは池沼の集まりかよ・・
651デフォルトの名無しさん:2011/08/03(水) 18:07:36.14
配列を見て、ハノイで再帰じゃないなんてバカじゃねwとか脊髄反射しちゃうんだろうな
必要だから配列に保存してんのにな
652デフォルトの名無しさん:2011/08/03(水) 18:13:28.98
急に草が生え始めましたね^^;
653デフォルトの名無しさん:2011/08/03(水) 18:16:46.36
日本語もまともに読めないアホに>>644-646みたいな書き込みされたら笑いたくもなるだろ
654デフォルトの名無しさん:2011/08/03(水) 18:18:09.79
日本語も英語も読めないのにC言語を読もうとすな
655デフォルトの名無しさん:2011/08/03(水) 18:20:07.41
>>647
引数増やせばおk
656デフォルトの名無しさん:2011/08/03(水) 18:22:06.61
>>647
4本に増えても3本しか使わない
657デフォルトの名無しさん:2011/08/03(水) 18:22:09.29
>>655
それでちゃんとした解になるかどうか、実際に書いてみてからほざけよw
658デフォルトの名無しさん:2011/08/03(水) 18:28:48.82
最近、答えそのものを教えてもらおうとするアホが多いよな。
659デフォルトの名無しさん:2011/08/03(水) 18:29:38.11
日本語がまともに読めないバカども
>>630
>>633
>>644-646
660デフォルトの名無しさん:2011/08/03(水) 18:29:52.90
mingw32-gcc.exeっての使ったら出来ちゃった///
661デフォルトの名無しさん:2011/08/03(水) 18:34:58.16
「ハノイ 4本」でググれば、理解できるかどうかは別として、望みのものが見つかるだろ
662デフォルトの名無しさん:2011/08/03(水) 18:35:52.68
>>659
実際、>>656だし
663デフォルトの名無しさん:2011/08/03(水) 18:38:45.98
>>659
安価もまともに使えないバカ
664デフォルトの名無しさん:2011/08/03(水) 18:40:16.63
4本全部使うのと、3本しか使わないのとじゃ、結果が全然違う
バカが自分の間違いを認められないのって見苦しいよ
665デフォルトの名無しさん:2011/08/03(水) 18:41:24.71
4本ハノイの塔
あってるかどうかは分からん
#include<stdio.h>

void hanoi(int disc, int from, int to, int empty1, int empty2)
{
if(disc<=1)
{
if(disc==1) printf("disc%d : from %d to %d\n", disc, from, to);
return;
}

hanoi(disc-2, from, empty1, to, empty2);
printf("disc%d : from %d to %d\n", disc-1, from, empty2);
printf("disc%d : from %d to %d\n", disc, from, to);
printf("disc%d : from %d to %d\n", disc-1, empty2, to);
hanoi(disc-2, empty1, to, from, empty2);
}

int main(void)
{
int disc=10;

hanoi(disc, 1, 2, 3, 4);

return 0;
}
666デフォルトの名無しさん:2011/08/03(水) 18:42:19.71
よくわからんが
解くだけなら3本でも可能だが
多くの本数を使ったほうが
少ない手で解けるって事?
667デフォルトの名無しさん:2011/08/03(水) 18:43:34.74
>>664
いや、645はハノイ関係なくね?
668デフォルトの名無しさん:2011/08/03(水) 18:46:31.82
>>645さんごめんなさい
間違って日本語読めないアホ扱いしてしまいました
本当に申し訳ない
669デフォルトの名無しさん:2011/08/03(水) 18:55:29.80
indexによって処理が分岐する場合の関数呼び出しを、
*f[index] で書いた場合、switch(index)で書いた場合、if(index== で書いた場合での、各所要クロック数を、rdtscで記録
http://codepad.org/1tJvMTad


<-O0でコンパイルした場合>

関数ポインターの配列の場合
所要クロック合計 = [5510152791]clock, 1ループあたり[55.101528]clock

switchによる関数呼び出しの場合
所要クロック合計 = [5903273688]clock, 1ループあたり[59.032737]clock

ifによる関数呼び出しの場合
所要クロック合計 = [5885933079]clock, 1ループあたり[58.859331]clock


<-O2でコンパイルした場合>
関数ポインターの配列の場合
所要クロック合計 = [3625614759]clock, 1ループあたり[36.256148]clock

switchによる関数呼び出しの場合
所要クロック合計 = [2829590153]clock, 1ループあたり[28.295902]clock

ifによる関数呼び出しの場合
所要クロック合計 = [2943078411]clock, 1ループあたり[29.430784]clock


最適化しない場合は関数ポインターが最速で、最適化した場合はswitchが最速になった。
switchとifによる関数呼び出しの場合、最適化時にインライン化できることが速度向上に関係してる気がする。
670デフォルトの名無しさん:2011/08/03(水) 19:06:22.29
配列の要素数はキーボードから入力して決める事はできないんですか?
やりたい事はこんな感じです。
ttp://codepad.org/AJDI6Fbv
671デフォルトの名無しさん:2011/08/03(水) 19:14:02.69
>>670
おまえさんがその質問をしている胸中で
「自分ならこうすればいいと思う」
「一般ユーザがやるのは大変」
と思っているなら、そこに本質的な問題点と正解がある
672デフォルトの名無しさん:2011/08/03(水) 19:17:08.52
>>670
malloc
673デフォルトの名無しさん:2011/08/03(水) 19:26:11.82
Cは標準では連想配列は提供されていません。
674デフォルトの名無しさん:2011/08/03(水) 19:31:39.35
質問するでもない
答えるでもない奴ってなんでここにいんの?
675デフォルトの名無しさん:2011/08/03(水) 19:32:20.02
非標準なら提供されてるのか?
あると便利だよな。知りたいw
676デフォルトの名無しさん:2011/08/03(水) 19:47:41.53
677デフォルトの名無しさん:2011/08/03(水) 19:48:56.05
>>675
するどい指摘をした!俺って頭イイ〜! とか思ってんの?(゚σ ゚)ホジホジ
678デフォルトの名無しさん:2011/08/03(水) 19:51:50.11
>>677
知らないから聞いたんだよ。あるなら便利だろw
679デフォルトの名無しさん:2011/08/03(水) 19:56:11.87
いちばん早く習得した言語って何ですか?
680デフォルトの名無しさん:2011/08/03(水) 20:00:28.56
日本語
681デフォルトの名無しさん:2011/08/03(水) 20:01:13.24
ツマンネ
682デフォルトの名無しさん:2011/08/03(水) 20:54:21.43
#include <stdio.h>
int gcd(int x, int y)
{
if (y == 0) return x;
else return gcd(y, x % y);
}
int main(void)
{
int a, b, c;
for (a = 1; a < 300; a++) {
for (b = 1; b < 300; b++) {
for (c = 1; c < 300; c++) {

if (a * a == b * b + c * c ) {
if (a + b + c < 300) {
if (gcd(a, b) == gcd(a, c) == gcd(b, c) == 1) {
if(b > c){
printf("a = %d, b = %d, c = %d\n", a, b, c);
}
}
}
}
}
}
}
}
これで一応動きはするのですが、関数等の記述はこれでいいのでしょうか
683デフォルトの名無しさん:2011/08/03(水) 20:57:32.09
>>682
>if (gcd(a, b) == gcd(a, c) == gcd(b, c) == 1) {
これの意味が分かってやってるなら別にいいよ
684デフォルトの名無しさん:2011/08/03(水) 20:59:33.01
>>675
対偶を知らないバカでもこの業界にいられるんだな。w
685デフォルトの名無しさん:2011/08/03(水) 21:03:26.82
>>679
65816
686デフォルトの名無しさん:2011/08/03(水) 21:11:31.61
対偶しらないとやってけない業界なんて聞いたことないw
687デフォルトの名無しさん:2011/08/03(水) 21:12:28.37
対偶の意味が分かっていない>>684であった
688デフォルトの名無しさん:2011/08/03(水) 21:47:51.37
いやわかってるだろ。

間違えてるけど。
689デフォルトの名無しさん:2011/08/03(水) 22:13:59.12
使いたかったんじゃないの?
690デフォルトの名無しさん:2011/08/03(水) 22:41:01.19
対偶を知らないバカでもこの業界にいられるんだな。w
691デフォルトの名無しさん:2011/08/03(水) 22:41:56.96
プログラム技術板業界?
692デフォルトの名無しさん:2011/08/03(水) 22:50:43.03
業界(笑)
693デフォルトの名無しさん:2011/08/04(木) 00:45:38.00
知らないんじゃない。小学生でも知ってる常識を居丈高に使っている君に嘲笑の眼差しを送っているだけさ。
694デフォルトの名無しさん:2011/08/04(木) 12:55:39.21
厨房だけどプログラミングやるならどんな数学勉強したらいいかな?
いまはフーリエ解析とかゼータ関数とか勉強してる
695デフォルトの名無しさん:2011/08/04(木) 13:03:09.28
作りたいアプリケーションの種類によるとしか言いようがないな
696デフォルトの名無しさん:2011/08/04(木) 13:04:12.26
>>694
何を作りたいのか、どんなプログラムに興味があるのかを考える。
数学のどの分野がそれに関係しているのかを調べ、勉強する。
697デフォルトの名無しさん:2011/08/04(木) 14:39:56.66
必要になってからさらっと覚えればいいだけだから、
そういうやり方は全くの無駄。
698デフォルトの名無しさん:2011/08/04(木) 14:44:44.64
これは覚えとけっていうのはないんですか?
699デフォルトの名無しさん:2011/08/04(木) 14:46:28.76
>>694
国語と英語と論理的な思考
700デフォルトの名無しさん:2011/08/04(木) 14:52:13.09
STLのリストに親クラスを継承した子クラスのオブジェクトを突っ込んで
イテレーターでぐるぐる回しながら子クラスのオーバーライドした関数を実行して個別処理をさえsる
ような仕組みをC言語で実現するにはどうしたらいいですか
701デフォルトの名無しさん:2011/08/04(木) 14:52:29.76
英語は問題ないので数学でお願いします
702デフォルトの名無しさん:2011/08/04(木) 15:01:05.29
>>700
関数ポインタと offsetof
人によっては union と enum を好んで使う

vtable の仕組みさえ知っていればどうにでもできる
703デフォルトの名無しさん:2011/08/04(木) 15:41:59.21
>>701
プログラミング自体に数学は必要ない
数学をプログラミングで解きたいなら数学の知識が要るだけ
704デフォルトの名無しさん:2011/08/04(木) 15:43:44.06
三角関数と行列くらいは最低でも知っといて欲しい
705デフォルトの名無しさん:2011/08/04(木) 15:49:51.95
>>704
それ言いだしたら切りが無いから。
706デフォルトの名無しさん:2011/08/04(木) 15:52:05.11
その程度でいいなら大丈夫そうです
707デフォルトの名無しさん:2011/08/04(木) 16:05:52.89
>>700
関数ポインタと汎用ポインタのペアの配列を使う
708デフォルトの名無しさん:2011/08/04(木) 16:11:27.88
cygwin上でリンクする時に
gcc -mwindows -o test.exe test.obj resource.coff
とするとdllが必要な代わりに正常にうごく
mingw32-gcc -mwindows -mno-cygwin -o test.exe test.obj resource.coff
とするとdllが不要だがリソースとして埋め込んだビットマップ画像が
一部表示されなくなるのは何故?
709 忍法帖【Lv=3,xxxP】 :2011/08/04(木) 16:17:14.00
>>708
cygwinスレへどうぞ。そもそも、今のcygwinのgccに-mno-cygwinは使えないので要注意。

>>700,702,707
ここはC入門スレ。
710デフォルトの名無しさん:2011/08/04(木) 16:39:38.77
ソースplz
711デフォルトの名無しさん:2011/08/04(木) 17:00:20.39
>>710
スレタイと>>1
712デフォルトの名無しさん:2011/08/04(木) 17:04:38.82
スレチなお馬鹿さん大杉だろ
713デフォルトの名無しさん:2011/08/04(木) 17:12:31.77
gcc -mwindows -o test.exe test.obj resource.coff
これなら全てのビットマップリソースが正しく表示されるのに
mingw32-gcc -mwindows -o test.exe test.obj resource.coff
これだと一部のビットマップリソースが正しく表示されない
714デフォルトの名無しさん:2011/08/04(木) 23:54:12.78
>>709
では、あなたこそ「にゅーもんスレ」へどうぞw
715デフォルトの名無しさん:2011/08/05(金) 01:07:58.85
sprintf関数について質問なんですが、この関数ってただ文字列を連結するだけですよね?
strcat関数は2個の配列しか結合できないんですよね?
ならstrcat関数使わずsprintf関数だけ使うようにしてもいいですか?
716デフォルトの名無しさん:2011/08/05(金) 01:26:15.18
unionってどういう時に使うの?
717デフォルトの名無しさん:2011/08/05(金) 01:27:41.46
メモリを節約したいとき
718デフォルトの名無しさん:2011/08/05(金) 01:38:08.73
何らかの処理のために変数にバイトごとにアクセスしたいときとか
union {
long a;
char b[4];
}
719デフォルトの名無しさん:2011/08/05(金) 01:45:12.24
同じようなキャストを繰り返してるコードに気付いたとき
720デフォルトの名無しさん:2011/08/05(金) 01:49:30.32
ただ「同時には使わない」という本来は疎遠な関係が
あまりにも緊密に描かれすぎるのが難点
721デフォルトの名無しさん:2011/08/05(金) 07:11:29.67
自分ではうまいこと言ったつもりなんだろうな...

さっぱり言いたいことが伝わらないけど。
722デフォルトの名無しさん:2011/08/05(金) 07:44:41.27
>>716
一例だけど、通信パケットみたいに、どこかのフィールドによって
同じ領域の解釈の仕方を変えたい時に、その事を明示したい場合にも
使えるね。
723デフォルトの名無しさん:2011/08/05(金) 09:56:39.50
>716
バージョンのよりデータの構造が変わる場合等。

struct xxx {

int ver;

union {
struct ver1 {
....
};
struct ver2 {
...
};
};
...

verの内容を見てver1かver2、どちらを参照するか判断する。
724デフォルトの名無しさん:2011/08/05(金) 10:08:58.47
RGBAの4バイトのデータを取り出したいときと
RGBAの中のRの1バイトだけを取り出したいときとか
よくあるだろ?
725デフォルトの名無しさん:2011/08/05(金) 11:42:43.01
>>721
ついてこれないなら、そうおっしゃい
726デフォルトの名無しさん:2011/08/05(金) 12:38:48.85
ついていく気ないので、チラ裏にでも書いてろよ。
727デフォルトの名無しさん:2011/08/05(金) 15:09:24.28
お前がそうしろ
728デフォルトの名無しさん:2011/08/05(金) 19:21:41.78
自分が分からないことは全部チラ裏に書けとかどんだけ
729デフォルトの名無しさん:2011/08/06(土) 10:20:48.37
WIN32APIのWM_Createを使った画像の描画で質問があります。


背景とその上の絵を二つ同時に表示して、上の絵をキー操作で動かそうとしています。
しかしキー操作を受け取り、WM_Createを呼び出すと上の画像だけにx,y座標を与えることができません。

ちらつき回避のためダブルバッファをしてるのですが、どちらか片方の絵に座標を与えることはできないでしょうか?

↑の説明文だけでは意味不明なのでソースコードをうpしておきます。
http://www.dotup.org/uploda/www.dotup.org1870372.cpp.html
730デフォルトの名無しさん:2011/08/06(土) 10:53:24.88
ヒントになるかどうかわからんが
WM_PAINTメッセージ内の
BitBlt(hdc,0,0,240,480,hBackDC,0,0,SRCCOPY);
の前に
BitBlt(hBackDC,x,y,40,40,hBmpDC,0,0,SRCCOPY);
を入れてみて
731デフォルトの名無しさん:2011/08/06(土) 11:39:31.20
>>730
返信ありがとうございます。

書き忘れていましたがその方法はすでに試していまいた。
本当にすみません。

>>BitBlt(hBackDC,x,y,40,40,hBmpDC,0,0,SRCCOPY);
↑の方法では前回描画した絵が消えず
上に描画する画像がつながった様に表示されます。

なんとか画像のリフレッシュをすることができないでしょうか・・・
732デフォルトの名無しさん:2011/08/06(土) 12:00:11.18
for( int i=0; i<n; i++ )

という書き方について、自分としては使い捨てのインスタント変数を作ってその場で捨てれるので便利だと思うんですが
学校の先生は「メモリ確保→開放の分だけ処理が重くなるからなるべく使わないように」と説明していました

でも参考書などではwhile文の中身で変数を用意していることも多く、中にはこういう書き方を推奨してるようにも見えて少しこの説明に疑問を感じます
処理はどの程度重くなるのでしょうか、処理を軽くしたい時には変数のメモリ確保を減らすのはどの程度有効なのでしょうか
733デフォルトの名無しさん:2011/08/06(土) 12:08:54.87
ウィンドウに転送する用のデバイスコンテキストをもう一つ作って
毎回そこに全ての画像(背景から全て)を描画すればいいよ
734 忍法帖【Lv=35,xxxPT】 :2011/08/06(土) 13:06:50.93
>>732
重くなることは、真っ当なコンパイラなら全く有り得ない。
先ず第一に、ローカル変数は確保や解放に殆どコストが掛からない。
第二に、ソース上ではスコープを絞っても実コードがその通りのタイミングで確保されるわけではない。
だから安心して、変数スコープを絞って使え。
735デフォルトの名無しさん:2011/08/06(土) 13:19:43.92
普通コンパイル段階でこの関数はローカル変数にどれだけメモリ使うかって計算するものだよな?
736デフォルトの名無しさん:2011/08/06(土) 13:23:45.53
この先生、
関数呼び出しはコストが掛かるから、
全部mainで処理しなさいって言いそう
737デフォルトの名無しさん:2011/08/06(土) 13:37:10.79
あくまでCに限って言えば宣言は関数の先頭に記述するべきと
先生は言いたかったんではないだろうか?
738デフォルトの名無しさん:2011/08/06(土) 13:38:33.58
じゃあ全部ハードウェアで処理しろよカス
739デフォルトの名無しさん:2011/08/06(土) 13:42:06.32
>>732
int main() {for(int i = 0; i <10; i++){}} を gcc -S などでアセンブラに変換して先生に
見せてあげるといいんじゃないかな

>>735
自分の場合は、そもそも大きいデータをスタックに割り付ける様なコードは書かないなあ
再帰する関数の場合は流石に気にしますけど、計算はしません

Windows って使用するスタックサイズをプログラム実行時に変えられないんだっけ?
740デフォルトの名無しさん:2011/08/06(土) 14:10:57.98
>>737
理由がメモリ確保がどうとかだから、C++でもJavaでもfor(int i;…みたいな
書き方は禁止なんじゃないの。
この先生。
741デフォルトの名無しさん:2011/08/06(土) 14:20:53.33
まぁでも先生云々は置いといて実際プログラム書いてて
for( int i = 0 ; i < 10 ; i++ );
この形が推奨されるべき形ってそう無いぞ
742デフォルトの名無しさん:2011/08/06(土) 14:25:46.75
コードを書く時に他人の推奨とか気にしないわ
743デフォルトの名無しさん:2011/08/06(土) 14:28:45.32
そこ開き直ったら本末転倒だろw
744デフォルトの名無しさん:2011/08/06(土) 14:35:08.87
スコープを限定するのは推奨されるべき
745デフォルトの名無しさん:2011/08/06(土) 14:37:52.13
学校の先生は論理を超えた強制力を持ちうるから、何らかの対策が必要だなと思う
先生云々置いとくなら、自分の意図した通りに動くコードならそれで充分
746デフォルトの名無しさん:2011/08/06(土) 14:40:03.84
ありがとうございます
安心してfor内に記述する事にします。
正直forとかで回す変数をいちいち最初に宣言してると段々「一回しか使われてない変数」とかが出現するのが嫌だったんですよね
けど一つの変数を色んな用途に使ってるとバグ出しそうで危なっかしいし
747デフォルトの名無しさん:2011/08/06(土) 14:41:13.48
>>744
俺もそう思うけど、

「長いブロックを書くから、ループ変数ごときでスコープを限定しないといけなくなるんだ」

とか言いだす人が居そう
748デフォルトの名無しさん:2011/08/06(土) 14:44:03.95
for文出てくるたびに領域確保してたらメモリの無駄じゃん
ループカウンタくらいまとめていいだろ
749デフォルトの名無しさん:2011/08/06(土) 14:49:15.91
>>741
C99とかC++とか、その書き方ができるなら普通、そう書くでしょ。
750デフォルトの名無しさん:2011/08/06(土) 14:51:20.67
>>748
for文出てくるたびにスタックフレーム伸ばしたり縮めたりする実装なんてないだろ。
751デフォルトの名無しさん:2011/08/06(土) 14:56:27.67
>>750
固定長だから無駄に宣言して良いと思ってんの?
752デフォルトの名無しさん:2011/08/06(土) 14:59:17.33
>>751
いいんじゃないの?
数バイトとかパフォーマンスを気にするより、コンパイラに最適化を
まかせてコードの質を優先すべきところ。
753デフォルトの名無しさん:2011/08/06(土) 14:59:51.75
>>751
スコープを制限するために変数宣言することを
無駄と考えるならお前はプログラマに向いてない
754デフォルトの名無しさん:2011/08/06(土) 15:01:52.87
for( char c = 0; c < 10; c++) とかしてる人はいるのかな?

4バイトォォくらいの割り付けをケチるより、分かりやすいコードを書いた方が良いと思う
755デフォルトの名無しさん:2011/08/06(土) 15:04:25.75
そんなことより SHORT_MAX を超えるループカウンタに int 使ってるのを論じようぜ
756デフォルトの名無しさん:2011/08/06(土) 15:06:56.33
スクリプト言語系なら毎回確保もありうるような気がするけど…。
757デフォルトの名無しさん:2011/08/06(土) 15:11:32.04
大きなプログラムを書くことを禁止したらいいよ
758デフォルトの名無しさん:2011/08/06(土) 15:14:35.87
>>755
gnuとか、20年くらいまえからintは32bit以上前提でコードを書いてるって
聞いてうらやましかった思い出がある。
759デフォルトの名無しさん:2011/08/06(土) 15:17:06.76
>>756
LL系こそ「メモリがもったいないから変数を使いまわそう」みたいな文化じゃないような気が。
富豪的っていうの?
760デフォルトの名無しさん:2011/08/06(土) 15:37:26.00
最近のスクリプト言語って実行前に一度ソース全部読むの?
ActivePerlでは読んでるっぽいけど。
761デフォルトの名無しさん:2011/08/06(土) 16:21:41.83
Rubyは下で定義したメソッド(関数)を上で呼べない
762デフォルトの名無しさん:2011/08/06(土) 16:39:33.91
>>754
そんなあなたに B 言語
763デフォルトの名無しさん:2011/08/06(土) 17:54:53.27
>>761
ん?

# cat foo.rb
#!/usr/bin/ruby

def foo
bar()
end

def bar
puts "bar"
end

foo

# ./foo.rb
bar
764デフォルトの名無しさん:2011/08/06(土) 18:57:20.61
>>761
今時、そんな言語はcとpascalくらいだよ。。。
(cはプロトタイプ宣言で回避)
765デフォルトの名無しさん:2011/08/06(土) 19:05:47.53
こういうことだろ

foo
def foo
    puts "foo"
end
766デフォルトの名無しさん:2011/08/06(土) 19:19:02.57
>>764
その意味で C89 は K&R C より退化した
767デフォルトの名無しさん:2011/08/06(土) 19:22:58.58
gccはmallocで取得した領域は勝手に0で初期化するのに
mingw32-gccだと初期化してくれないんだな・・・
ヘッダーファイルが上手く動作してなくて4日くらい悩んだわ・・・
768デフォルトの名無しさん:2011/08/06(土) 19:24:43.22
勝手なことするってほんとよくないな
769デフォルトの名無しさん:2011/08/06(土) 19:46:56.68
つーか、malloc にゼロ初期化を期待するほうがよくないだろ
770デフォルトの名無しさん:2011/08/06(土) 19:50:34.08
ほんとそのとおり。
771デフォルトの名無しさん:2011/08/06(土) 19:52:19.28
>>765
評価されていないメソッドが呼び出せないのは当たり前じゃないの?

% cat foo.py
#!/usr/bin/python
foo()
def foo():
  print("foo")
% ./foo.py
Traceback (most recent call last):
  File "./foo.py", line 3, in <module>
    foo()
NameError: name 'foo' is not defined

これはソースコードを読むかどうかとは全く別の話だよ
772デフォルトの名無しさん:2011/08/06(土) 19:54:39.35
あ、スマン
コピペする時に行を詰めたのでエラー位置は気にしないで
773デフォルトの名無しさん:2011/08/06(土) 20:01:57.19
>>771
当たり前だと思うよ
ただ、ああいうことが言いたいんだろうなって
774デフォルトの名無しさん:2011/08/06(土) 20:04:43.84
>>771
Python はちょっと特殊だよ。
def とか class も実行文だから。
775デフォルトの名無しさん:2011/08/06(土) 20:15:19.69
>>773
了解した

>>774
% cat ../foo.lsp
(foo)
(defun foo () (print "foo"))
% ./dx86cl -l ../foo.lsp
> Error: Undefined function FOO called with arguments () .

一方 JavaScript さんは...

% cat foo.js
foo();
function foo() { print("foo"); };
% jsc -f foo.js
foo
776デフォルトの名無しさん:2011/08/06(土) 20:18:13.68
JS はこれが正解だったか...

foo();
var foo = function() { print("foo"); };

スレ汚しスマソ
777デフォルトの名無しさん:2011/08/06(土) 21:20:34.21
>>733
どういう意味か分からずずっと考えていましたがやっと解決しました。
ありがとうございます。
778デフォルトの名無しさん:2011/08/06(土) 21:39:11.00
デバイスコンテキストに描画するとかって言うやつもいるけど
APIだと実際描画してるのはWM_PAINTのBIGINPAINT〜ENDPAINT内だけ
DCにはデータを用意するだけで描画してないと俺は思う
779デフォルトの名無しさん:2011/08/06(土) 21:53:52.58
オレオレ定義はチラ裏へどうぞ。
780デフォルトの名無しさん:2011/08/06(土) 21:56:07.91
Cygwinなんですがランタイムライブラリって何ですか?Wikipedeiaみたけど
抽象的すぎてよく分かりません。
781デフォルトの名無しさん:2011/08/06(土) 22:26:52.48
printf を自分で作れない人をアシストしてくれている黒子だよ
782デフォルトの名無しさん:2011/08/06(土) 22:36:02.09
デバイスコンテキストには描画できないだろ。
そもそもデバイスコンテキストが何なのかが理解できてないんじゃないか?
783デフォルトの名無しさん:2011/08/06(土) 22:39:42.14
>>782
Win32API質問箱 ってスレにいってらっしゃい
784デフォルトの名無しさん:2011/08/06(土) 22:43:31.13
まぁ描画というよりは転送だろうけど
あえて分かりやすくするために抽象的な表現にしたんじゃないか
785デフォルトの名無しさん:2011/08/06(土) 22:49:10.99
#define __DEBUG__

#ifdef __DEUBG__
#define DEBUGPRINT(format, ...) printf(format, ...)
#else
#define DEBUGPRINT(format, ...)
#endif

こういうことやりたいんですが、うまくいきません
何が悪いんでしょうか?
786デフォルトの名無しさん:2011/08/06(土) 22:51:27.66
>>785
typo
787デフォルトの名無しさん:2011/08/06(土) 22:53:02.64
デバイスコンテキストってのは、要するにデバイスを操作する際に用いるTMPやプロパティーのようなもろもろのワーキングデータのコンテナでしょ?簡単に言うと。
そこにフレームバッファーを含めたとしても違和感は無いんじゃないの?
GTKしかしらないけど。
788デフォルトの名無しさん:2011/08/06(土) 22:57:03.31
>>786
あ、すいませんDEUBGになってましたね・・・
これを直しても...の部分がそのままになってしまいます
DEBUGPRINT("%d %d %d", 1, 2, 3)

printf("%d %d %d", 1, 2, 3)
にしてほしいです。無理なんでしょうか?
789デフォルトの名無しさん:2011/08/06(土) 22:58:32.05
>>788
gcc なら
__VA_ARGS__
790デフォルトの名無しさん:2011/08/06(土) 22:59:32.74
__VA_ARGS__
791デフォルトの名無しさん:2011/08/06(土) 23:01:26.72
>>789 >>790
ありがとうございました
#define DEBUGPRINT(format, ...) printf(format, __VA_ARGS__)
これでいけました本当に助かります
792デフォルトの名無しさん:2011/08/06(土) 23:03:18.85
今さいころでマスを進んでいくすごろくを作っているのですが、
特定の升目で一回休みやマスを戻るという機能をつけたいのですが
どうすればできるか教えていただけませんか。
793デフォルトの名無しさん:2011/08/06(土) 23:04:26.97
>>792
if
794デフォルトの名無しさん:2011/08/06(土) 23:04:31.32
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int num,i,sai;
char ps[] = " \n";
char c;
srand((unsigned int)time(0));
num = i = sai = 0;
while(i != 8)
{
sai = rand()%6+1;
num = i;
i += sai;
printf("Your number =%d\n",sai);
printf("123456789\n");
printf("s G \n");

if(i > 8)
{
i = 8-(i-8);
}
ps[i] = '*';
printf("%s\n",ps);
ps[i] = ' ';
printf(">Dice try (N=end)\n");
c = getchar();
if(c == 'N' || c == 'n') return 1;}
printf("you win !\n");
return 0;
}
795デフォルトの名無しさん:2011/08/06(土) 23:06:28.28
デバイスコンテキストっつーのは画像処理ソフトで使われるレイヤーと同じ様なもん
つーかそれだと思えば解釈が簡単
796デフォルトの名無しさん:2011/08/06(土) 23:10:07.49



可変引数を取れる関数って、プロトタイプどうすんの?


797デフォルトの名無しさん:2011/08/06(土) 23:13:33.39
int printf(const char *format, ...);
798デフォルトの名無しさん:2011/08/06(土) 23:34:08.56
何が来るか分からんものってプロトタイプでチェックできんの?
できなんだら、なんかプロトタイプの意味がねえ気もするが
799デフォルトの名無しさん:2011/08/06(土) 23:47:47.30
例えばprintfなら少なくとも第1引数はチェックできるでしょ
800デフォルトの名無しさん:2011/08/07(日) 00:14:49.55
ド素人ながらGNUライブラリのobstackのソース読んでるんだけど

# define obstack_int_grow(h,datum) \
( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
obstack_int_grow_fast (h, datum))

# define obstack_int_grow_fast(h,aint) \
(((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))

このマクロを読んでみると
チャンクの範囲を超えてるなら_obstack_newchunkで新しいチャンクを割り当て
超えてないならobstack_int_grow_fastでintデータ(datnum)を書き込むという流れらしいが


3行目の三項演算子の2項目で、_obstack_newchunk関数に引数を渡した後カンマを打って0をつけたり、その後3項目も0にする理由が分からない。
0そのままだと警告でるよね?

それから、obstack_int_grow_fastもややこしいけど
next_freeが指すポインタをintサイズだけ進ませたものを代入し直して、それに配列アクセスで増やしたintサイズのスペースにaintを書き込む・・・
この理解で合ってるのかな?
801デフォルトの名無しさん:2011/08/07(日) 00:16:10.61
>>784,795
やっぱり解ってないのな。
802デフォルトの名無しさん:2011/08/07(日) 02:11:57.91
>>800
三項演算子は、条件と、条件が成立した場合に返す値と、条件が成立しない場合に返す値を、書かなければならない
例えその値に意味がないとしても、三項演算子である以上は、何か返す値を書かなければならない
別に1でも42でも-567でもいい

> 超えてないならobstack_int_grow_fastで
obstack_int_grow_fastは三項演算子を囲む括弧の外にあるから常に実行されるよ
どの括弧がどこに対応しているのかよく見てみるべき

あとは合ってると思うよ
803デフォルトの名無しさん:2011/08/07(日) 02:25:56.35
>>802
解説有り難う。

三項演算子の条件適合値については分かったんだけど
確認用にコード書いて試してみたら

statement with no effect

の警告でたんで0だけ置いたんではあんまり礼儀がよくないコーディングなのかなと…
後は

(_obstack_newchunk ((h), sizeof (int)), 0)

で_obstack_newchunk関数の後にカンマを打って0を置く意味がまだ分からない。
これは_obstack_newchunkが値を返さないから0を置いてるって事なのかな?
804デフォルトの名無しさん:2011/08/07(日) 05:28:51.19
>>803
その理解であってる。
後ろの,0はカンマ演算子で、ここだと()で括られた式の値として、
右辺値0を返したかったんだと思う。
そんな事は分かってる、というレベルの違う話だったらゴメン
805デフォルトの名無しさん:2011/08/07(日) 10:04:12.65
チャンク!スロース!
806デフォルトの名無しさん:2011/08/07(日) 10:30:22.23
>>804
ああ、やっぱりそういう事だったんだね。
丁寧にありがとう。
807デフォルトの名無しさん:2011/08/07(日) 10:34:22.57
>>792
マス目配列作って、入ってる値で判断させれば?
0ならただのマス目
1なら1回休みのマス目
2ならスタートへ戻るのマス目

って具合で
808デフォルトの名無しさん:2011/08/07(日) 10:35:13.48
>>803
>これは_obstack_newchunkが値を返さないから0を置いてるって事なのかな?

他にどう解釈しろと?
試しに以下のコードをコンパイルしてみたら、
やっぱり通らなかった(Visual C++ 2008上で C2120 エラーが出る)。

void f(void) {}
int main(void) {int a = 1 ? f() : 2; return a;}

・・・でも、上のコードを

void f(void) {}
int main(void) {return 1 ? f() : 2;}

とすると、すんなり通ってしまったようだ。(警告レベル /W3)
警告レベルを /W4 にすると以下のような警告は出るけど、エラー扱いではないらしい。

 warning C4053: '?:' 演算に void 型の式がオペランドとして使われています。

で、調べてみたら、http://msdn.microsoft.com/ja-jp/library/1e8z2ake(v=vs.90).aspx に、

 ?: 演算子には void 型の式が指定されています。void 型のオペランドの値は未定義です。

と書いてある。
つまり、"1 ? f() : 2" は未定義だが、エラーではないって事? 本当? 何故?
誰か偉い人、理由を教えてください。
809デフォルトの名無しさん:2011/08/07(日) 14:01:29.07
「未定義」って答えが書いてあるだろ
正しくないので、もしコンパイラがそれを通しても、おまえが自己責任で回避しろってことだ

# どこの規格で「未定義」とされているかとは、また別な話
810803:2011/08/07(日) 14:05:15.75
>807
それ単に三項演算子の使い方を間違えてるだけじゃん

int a = 1 ? f() : 2;

だと、aに f()の結果(つまりvoid)を入れることになるから、エラー吐くの当たり前。
int型変数にvoid入れようとしてるんだよ。ところが

return 1 ? f() : 2;

はmain関数の戻り値にf()の結果を入れようとしてるからエラーにならない。
なんかVCはmain関数の場合はvoidを戻り値にしてもエラーにならんみたいだ。
試しに return f(); にしてもエラーにならん筈。
811デフォルトの名無しさん:2011/08/07(日) 15:17:07.98
だから「未定義」はコンパイラがはじく保証すらないんだってばさってばよー
812デフォルトの名無しさん:2011/08/07(日) 15:46:44.21
>>810
>それ単に三項演算子の使い方を間違えてるだけじゃん

>>811
>だから「未定義」はコンパイラがはじく保証すらないんだってばさってばよー

そんな話はどうでもよくて、なぜこれが「未定義」なのか? を知りたい。

間違えてる事(? 以降の2つの式の型に互換性がない)は、
その後の代入演算とは無関係に判断出来そうなものだろ?

これは、規格上、どの項目に相当するの?
そして、それをわざわざ「未定義」としている理由って何?

普通、コンパイル時にエラーと判別するのが不可能とか
困難な場合に「未定義」って扱いにするものだと思っていたけど。
813デフォルトの名無しさん:2011/08/07(日) 15:59:54.55
>>812
定義されていないから未定義なだけで
未定義だと定義されてるわけじゃない
814デフォルトの名無しさん:2011/08/07(日) 16:07:26.43
>>813
C言語の仕様策定時の「考慮漏れ」ってこと?
815デフォルトの名無しさん:2011/08/07(日) 16:12:12.31
>>814
どうでもいいことは決めてないだけだよ
816デフォルトの名無しさん:2011/08/07(日) 16:28:08.41
>>814
コンパイラ作ってる人が好きにして良いよって、あえてそうしてる面もある
817デフォルトの名無しさん:2011/08/07(日) 16:28:35.88
>>812
GCCでは何もオプションつけずにコンパイルすると、>>808の下の奴もちゃんとエラーになるよ

error: void value not ignored as it ought to be (無視されるべきvoid値が無視されてないぞゴルァ!)

M$のコンパイラではエラーにしてないだけだろ。
818デフォルトの名無しさん:2011/08/07(日) 16:30:33.77
結局自分で調べてみた。。。

JIS では、やっぱりちゃんと規定されていた(6.5.15 条件演算子)。

制約 第2及び第3オペランドの型は、次のいずれかの条件を満たさなければならない。
− 両オペランドの型が算術型である。
− 両オペランドの型が同じ構造体又は共用体である。
− 両オペランドの型がvoid型である。
− 両オペランドが適合する型の修飾版又は非修飾版へのポインタである。
− 一方のオペランドがポインタであり、かつ他方が空ポインタ定数である。
− 一方のオペランドがオブジェクト型又は不完全型へのポインタであり、かつ他方がvoidの修飾版又は非修飾版へのポインタである。

今回のケースはどれにも当たらないと思うのだが?
要するに VC が規格に準拠していなかっただけってオチか。
勉強になりました。

>>803さん、ありがとう。
819デフォルトの名無しさん:2011/08/07(日) 16:46:50.25
>>818
第1を全く見てないのはわざと?
820デフォルトの名無しさん:2011/08/07(日) 16:49:49.13
ちょっと修正。

<要するに VC が規格に準拠していなかっただけってオチか。

>要するに VC がタコだっただけってオチか。

ま、規格に準拠していなかったらエラーを出す必要があるとは、
謳ってないもんな・・・
その場合、確かに「未定義とする」と定義されているから、
準拠していると言えばしているが、VC がタコであることには間違いない。
821デフォルトの名無しさん:2011/08/07(日) 16:53:13.19
>>819
>第1を全く見てないのはわざと?

いや、見たよ。
引用する必要がないから、省いたけど。
822デフォルトの名無しさん:2011/08/07(日) 16:57:22.50
ANSI Cの規格ってどっかでタダで手に入らんかな?
そもそも紙媒体のでもないような…
823デフォルトの名無しさん:2011/08/07(日) 17:02:13.90
>>821
そこが一番重要なのに?
824デフォルトの名無しさん:2011/08/07(日) 17:07:22.82
>>823
そこがどうして重要なのか、教えてください。
825デフォルトの名無しさん:2011/08/07(日) 18:57:35.04
>>820
> 「未定義とする」と定義されている
どこに?
826デフォルトの名無しさん:2011/08/07(日) 19:13:21.97
>>825
4.規格合致性 に。
827デフォルトの名無しさん:2011/08/07(日) 20:44:07.95
a=x[i++]というのは、
i=i+1をしてからaにx[i]を代入するのですか?
それともaにx[i]を代入してからi++するという意味ですか?
よろしくお願いします。
828デフォルトの名無しさん:2011/08/07(日) 20:53:47.15
aにx[i]を代入してからi++するという意味です
++i にすると意味が変わります
829デフォルトの名無しさん:2011/08/07(日) 20:54:35.73
>>827
それぐらい自分で検証してみろよ
というかインクリメントでググれ
830デフォルトの名無しさん:2011/08/07(日) 20:59:28.15
もうひとつお願いします。
int check(int x, int y){
int k;
for (k=0;k<x;k++){
if(a[k]==y)
return 0;
}
return 1;
}
という関数が定義されていて、main関数の中でif(check(x,y))という部分があるのですが、check関数の返り値として何回も0が出てきて最後に絶対1が返り値となってしまいます。この場合はどうなるのですか?
831デフォルトの名無しさん:2011/08/07(日) 21:01:15.89
>>828
ありがとうございます
832デフォルトの名無しさん:2011/08/07(日) 21:07:22.46
>>830
>この場合はどうなるのですか?

★分からない事をなるべく詳しく書いて下さい。
833デフォルトの名無しさん:2011/08/07(日) 21:14:20.62
>>832
main関数の中のif(check(x,y))というのはcheck(x,y)が0だったらその後のものを実行せず、1だったら実行しますよね?
この場合、check(x,y)が返り値を何個も返してしまわないですか?
834デフォルトの名無しさん:2011/08/07(日) 21:17:17.46
その後のもの、というのはあまり正確な表現ではありません
main関数も載せてみてください
835デフォルトの名無しさん:2011/08/07(日) 21:20:58.35
>>833
(質問の意図が取れてるか分からないけど)
最初の return で check() 関数は終了するから返り値は一つだけ
return したら、もう続きの処理は実行されない
836デフォルトの名無しさん:2011/08/07(日) 21:23:54.63
837デフォルトの名無しさん:2011/08/07(日) 21:25:40.85
>>835
ではこのcheck関数内のfor文は意味をなさないのですか?
838デフォルトの名無しさん:2011/08/07(日) 21:25:52.42
>>836
読めない。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
839デフォルトの名無しさん:2011/08/07(日) 21:26:19.37


ソースを難読化するため、例えば

SteelArray[ARRAY1_MAX] を

ARRAY1_MAX[SteelArray] など、要素と配列名を逆にして書きたいのですが

そもそも何故これがちゃんと通るのですか。
840デフォルトの名無しさん:2011/08/07(日) 21:27:40.22
>>839
Cの構文規則に合致しているから。
841デフォルトの名無しさん:2011/08/07(日) 21:32:58.09
>>838
すみません。今iPhoneしかなくて全て打ち込むのは難しいので原本のpdfをうpします。
http://www.ss.titech.ac.jp/H23-gozen.pdf
これの7番です。よろしくお願いします。
842デフォルトの名無しさん:2011/08/07(日) 21:33:17.65
なんでそんな構文規則を作ったんですか?
843デフォルトの名無しさん:2011/08/07(日) 21:33:47.48
>>837
a[] の中に y と同じ値が含まれているかを一つひとつ確認していく為の for でしょ
無かったら困っちゃうよ
844デフォルトの名無しさん:2011/08/07(日) 21:35:57.02
>>843
すみません。読み間違えでした。ありがとうございました。
845デフォルトの名無しさん:2011/08/07(日) 21:40:00.88
配列に対するポインタが指せる位置は配列要素+1まで保証しなければならない、という規則があったと思いますが
それはオーバーフローにはならないのですか。
配列要素+1には書き込めないような予防措置があるなんて聞いたこともないのですが
846デフォルトの名無しさん:2011/08/07(日) 21:45:03.35
>>845
そもそもCには、配列外に書き込めないような予防装置なんか、元から全然ないだろ
a[-12] とか書いても余裕
847デフォルトの名無しさん:2011/08/07(日) 21:49:02.77
>>841

7. 5) b)
利点:
 ・馬鹿よけ。
 ・直観的。だからバグが出にくい。

欠点:
 ・会社が馬鹿だと、A氏のような目にあう。
 ・そういう会社は、成果を LOC で見るので、自分の評価がやけに低くなる。
848デフォルトの名無しさん:2011/08/07(日) 21:50:27.46
>>845
このコードを gcc -S とかでアセンブラ出力してみれば分かるけど、

int main() { int foo[] = { 0, 1, 2, 3 }; }

余計なメモリは確保されないし、何の保証も無いよ
849デフォルトの名無しさん:2011/08/07(日) 21:57:21.57
mallocで確保したメモリの本当のサイズって誰が知っとんの?
printfなどで、そのポインタの値を見ても「割り当てられた本当のサイズ」ではないよな。
850デフォルトの名無しさん:2011/08/07(日) 21:57:29.51
>>845
>配列に対するポインタが指せる位置は配列要素+1まで保証しなければならない、という規則があったと思いますが

ある。その通り。

>それはオーバーフローにはならないのですか。

ポインタが指せる位置が保証されているだけ。
読み書きしなければ、オーバーフローにはならないだろ?

>配列要素+1には書き込めないような予防措置があるなんて聞いたこともないのですが

そんな措置はない。
851デフォルトの名無しさん:2011/08/07(日) 21:57:41.81
>>822
draft paperでも構わんのなら、ISO/IEC JTC1/SC22/WG14のページから拾ってこれると思うが。
852デフォルトの名無しさん:2011/08/07(日) 21:58:49.79
自分なら int check(int x, int y) は int member(int range, int value) にするなあ
高々テスト問題でも、きちんと分かりやすいコードを書く事は大切だ
853デフォルトの名無しさん:2011/08/07(日) 21:59:05.35
ポインタが指せる位置を保証って、ほんなんCのポインタはどこまでも指してしまえる気もするが

分からんのー
854デフォルトの名無しさん:2011/08/07(日) 21:59:39.78
int main(void)
{
int num,i,sai;
char ps[] = " \n";
char c;
srand((unsigned int)time(0));
num = i = sai = 0;
while(i != 8)
{
sai = rand()%6+1;
num = i;
i += sai;
printf("Your number =%d\n",sai);
printf("123456789\n");
printf("s G \n");

if(i > 8)
{
i = 8-(i-8);
}
ps[i] = '*';
printf("%s\n",ps);
ps[i] = ' ';
printf(">Dice try (N=end)\n");
c = getchar();
if(c == 'N' || c == 'n') return 1;}
printf("you win !\n");
return 0;
}  
これにます目を増やしてイベントをつけたいのですがうまくいきません。
誰か教えてください。(includeは省略してます。)
855デフォルトの名無しさん:2011/08/07(日) 21:59:48.69
Cとは長年付き合ってるつもりだが、分からん事が多過ぎる。
856デフォルトの名無しさん:2011/08/07(日) 22:04:39.14
>>846
>>848
>>850

よくわかりました。
857デフォルトの名無しさん:2011/08/07(日) 22:19:41.06
>>849
>mallocで確保したメモリの本当のサイズって誰が知っとんの?

特に決まっていない。
極端な話「誰も知らない」という実装もあり得ると思う。
858デフォルトの名無しさん:2011/08/07(日) 22:22:12.62
知る事ができないとreallocしていいのかどうかさえ分からんからのお
859デフォルトの名無しさん:2011/08/07(日) 22:23:23.84
>>853
ポインタを進めていくといずれアドレスFFFFFFFFを超えて00000000に戻ってくるだろう
そうなるとポインタ同士の位置関係を < 演算子で正しく比較できなくなるだろう
最後の要素+1まではそのような問題が起きてはならない
つまり最後の要素+1でアドレスが00000000に戻るようなことになってはいけない
+1まで指せる保証というのは、そういった意味
860デフォルトの名無しさん:2011/08/07(日) 22:23:46.86
え?
reallocするかどうかなら、呼び出し側でサイズを持ってればいいだけでは?
mallocで確保したメモリの「本当のサイズ」っていう話題とはまったく別じゃね?
861デフォルトの名無しさん:2011/08/07(日) 22:27:45.95
少なくともアロケータは知ってないと
reallocで領域拡大したときに古いメモリの内容を
新しく確保したメモリ領域にコピー出来ないと思う
862デフォルトの名無しさん:2011/08/07(日) 22:32:27.50
>>860
改めて要求サイズを予約し、旧ブロックを解放する実装だとしても
元の領域の値を複写するのに利用サイズは暗に欲しいような気がする
863デフォルトの名無しさん:2011/08/07(日) 22:37:06.34
>>861

そうとも限らない。
領域拡大した際、拡大した領域に何が入るかは不定。
なので、古い領域から新しい領域へ、新しい領域のサイズ分、
(何も考えずに)コピーしてしまえばよい。

そこでSEGVが発生しないようにする等の話は、また別問題。
864デフォルトの名無しさん:2011/08/07(日) 22:40:17.38
OSに管理まかせっきりじゃね?>malloc
865デフォルトの名無しさん:2011/08/07(日) 22:41:08.14
>>863

許されるなら同じポインタを返す
(領域拡大の際、既存領域の後続が空きで要求サイズに収まってれば、同じポインタを返す)
って実装をしたい場合じゃなければ大きさ知らなくてもいけるのか
866デフォルトの名無しさん:2011/08/07(日) 22:43:12.90
reallocはなぜか無駄に処理が遅いから基本使うなって
誰かに言われた気がしたけど妄想かな?
867デフォルトの名無しさん:2011/08/07(日) 22:45:16.79
フラグメントしてもいいなら、reallocは必要ないが
フラグメント気にするような用途だと使わざるを得ない

最近は携帯電話でも、メインメモリ1GBとか贅沢になってきた
868デフォルトの名無しさん:2011/08/07(日) 22:45:34.84
>>863
mallocしたときどれだけの領域が使われたかわからないと、
次にmallocする時、どこからメモリを使えばよいかわからない。
確保領域サイズはmallocが管理しているはず。

freeする時も、mallocした分解放することになるので、
mallocが確保領域を管理しているのでは?
mallocが管理しているか、OSが管理しているかはまた別問題。
869デフォルトの名無しさん:2011/08/07(日) 22:46:25.72
>>866
妄想なんじゃないの。
870デフォルトの名無しさん:2011/08/07(日) 22:46:50.85
単純に考えると、mallocが知ってるはずなんだよな
知ってるはずなのだが聞き出す方法がわからんと。
871デフォルトの名無しさん:2011/08/07(日) 22:56:53.63
>>868
>mallocしたときどれだけの領域が使われたかわからないと、
>次にmallocする時、どこからメモリを使えばよいかわからない。
>確保領域サイズはmallocが管理しているはず。

今まで確保した「合計サイズ」が必要だって事だね。
実際、必要そうだ。
けど、malloc の呼び出し毎に確保された
「個々のサイズ」は忘れても良さそうな気がする。

>freeする時も、mallocした分解放することになるので、
>mallocが確保領域を管理しているのでは?

昔の free は、実際には free していなかった
というのは有名な話。こんな実装でも筋は通る。
872デフォルトの名無しさん:2011/08/07(日) 22:58:37.31
今の free も sbrk の位置を動かしたりはしてないんじゃないかな
873デフォルトの名無しさん:2011/08/07(日) 23:01:50.73
>>871
実際には free しない free に依存したコードを書く
おまえの頭だけはどう見ても筋は通っていない

それで「標準」ライブラリを使っている気になっているんだろ(プゲラ
874デフォルトの名無しさん:2011/08/07(日) 23:33:48.11
10×10の周りをちょうど1周(スタート=ゴール)で終わるオーバーすれば何周
でもするすごろくを作りたいのですが、さっぱりわかりません。
できればマスを戻ったり一回休みを作りたいです。
875デフォルトの名無しさん:2011/08/07(日) 23:44:10.17
>>874
7行スレ向けのお題だね。

不幸にして、7行スレはもう無くなってしまったようだが。
876デフォルトの名無しさん:2011/08/08(月) 00:11:16.65
>>875
ほかに似たようなスレはありますか?
877デフォルトの名無しさん:2011/08/08(月) 00:17:18.58
>>876
失礼。>>875 は蛇足だね。
このスレでいいと思うよ。

ただし、たかが「すごろく」とはいえ、
色んな要素が絡むからね。
それなりに難しいのは仕方ないと思う。
878デフォルトの名無しさん:2011/08/08(月) 00:18:52.96
>>874
一人用、全自動、周回あり、一回休みあり、マス戻り無し

http://codepad.org/pq5wkKZm

コードチェックとかデバッグとかしてないです
7 行じゃなくてスマソw
879デフォルトの名無しさん:2011/08/08(月) 00:28:45.81
>>878
ありがとうございました。
ただ自分の作ろうとしてるのとは違いました。
880デフォルトの名無しさん:2011/08/08(月) 00:33:16.40
それは残念
でも面白いお題でした
881デフォルトの名無しさん:2011/08/08(月) 00:41:18.17
>>874
現在の数を37マス(10+9+9+9)で割って余りでイベント決めるとかはどう?
入門ならこれでいいとおもふ
882デフォルトの名無しさん:2011/08/08(月) 00:48:40.25
10x10 の周囲マスの数は36だろ。
883デフォルトの名無しさん:2011/08/08(月) 01:25:33.04
showBoardってどんな意味があるんですか?
884デフォルトの名無しさん:2011/08/08(月) 01:59:40.68
シンプルに作ってみた
イベントはめんど
http://codepad.org/WR42NDtN
885デフォルトの名無しさん:2011/08/08(月) 02:12:46.43
>>874
面白そうなので、俺も作ってみた。
複数人用、全自動、周回あり、一回休みあり、マス戻り有り

http://codepad.org/HsvACupM

7 行じゃなくてスマソw
886デフォルトの名無しさん:2011/08/08(月) 02:53:17.25
874です。
皆さんありがとうございました。
887デフォルトの名無しさん:2011/08/08(月) 03:18:43.23
計算で0を出したいのにマイナスの値が出てきます。
これを正しくするにはどうすればいいですか?
初歩的なのかもしれませんが教えてください。
888デフォルトの名無しさん:2011/08/08(月) 03:35:58.44
どういう問題なのかはっきりしないが、
「計算結果が0未満になったときは0にしたい」なら条件分岐(if文とか)を使え。
「計算すると0になるはずなのになぜか負の値が出てくる」ということなら
その情報だけでは、たぶんコードのどこかが間違っているのだろうから
よく確認してみてねとしか言えない。
889デフォルトの名無しさん:2011/08/08(月) 03:43:27.93
>>828
>aにx[i]を代入してからi++するという意味です
>++i にすると意味が変わります
処理系によってはa[i]を参照し記憶し、i++してから
aに代入(複製)することもあるでしょう。
こういう質問に関しては、例示に留めてください。

実行前 I=1 a=0 x[1]=3
実行後 i=2 a=3 x[i]=3
890デフォルトの名無しさん:2011/08/08(月) 03:55:47.97
ほかに作っているif文のマイナスの値が出てきてるみたいなんですが、
混同しないようにするにはどうすればいいですか。
891デフォルトの名無しさん:2011/08/08(月) 07:23:20.31
>>849
mallocの実装例としては、ヒープをunionによるブロック単位で扱い、先頭をヘッダーとして用いて確保ブロックサイズを記録する方法がある。(あくまで実装方法のひとつ)

ヒープメモリー(□は未使用、■は使用中。□ひとつが16byte)
□■□□□□□■□□■■□□□□■■■□□■□□□

例:20byteを確保したい場合。
1.ヒープから20byte分を格納できる連続領域を捜す。
(20byteだから□2個分+ヘッダー用1個=3個以上連続して空いてる場所を捜す)
□■□□□□□■□□■■□□□□■■■□□■□□□
  ↑
  ここが空いてる

そこをヘッダーとして、確保サイズの記憶に用いる。(ヘッダーに”確保サイズ20”をメモする)
□■20□□□□■□□■■□□□□■■■□□■□□□
  ↑
  以降20byteが使用されてるという印

ヘッダーの次のアドレスをmallocの戻り値とする。(ユーザーは、ここ以降20byteを使用して良い)
□■20□□□□■□□■■□□□□■■■□□■□□□
   ↓
   ヘッダーの次の□の位置を、mallocのリターンとして返す。

例:これを free()する場合
□■20□□□□■□□■■□□□□■■■□□■□□□
   ↓
   free()には、malloc()の戻り値の先頭アドレスを渡す。
   このアドレスを、□1つ分もどると、そこがヘッダーとして、malloc時に確保したサイズが記録されている。
   この20を参考にして free()は動作する。(ヘッダーのリンクをリセットする)

備考:実際にはサイズの20だけではなく、次の空き領域へのポインターも同時に格納されてるかもしれない。(あくまで実装方法のひとつ)
a = malloc(20)で得たaを、適当に数バイト後ろに戻って、記録されてるデータを確認していけば、20という数字が見つかるかもしれない。
892デフォルトの名無しさん:2011/08/08(月) 08:25:02.48
>>890
コードを貼ってみて。
893デフォルトの名無しさん:2011/08/08(月) 10:31:13.87
>>891
もっと詳しく言うと、実際アライメントの調整するから20バイトきっかり確保される事は無いな。
アライメントが8だと24バイトになるね。
894デフォルトの名無しさん:2011/08/08(月) 12:41:22.71
実装になってない。
一番重要なのは使用済みor未使用を区別する手段だろ。
895デフォルトの名無しさん:2011/08/08(月) 13:54:50.93
> 次の空き領域へのポインター
896デフォルトの名無しさん:2011/08/08(月) 14:07:15.26
VC++でファイルリスト作成に1ファイル毎にmallocやったら途中でエラー起きた。
5万回mallocはムリだったか。
897デフォルトの名無しさん:2011/08/08(月) 15:53:58.31
Mr.Malloc


うっうっうっううー
898デフォルトの名無しさん:2011/08/08(月) 16:08:53.98
>>896
64bit 版を使うとか
899デフォルトの名無しさん:2011/08/08(月) 16:49:40.47
AdobeReaderって何であんなに頻繁にアップデートすんの舐めてんの
900デフォルトの名無しさん:2011/08/08(月) 16:51:36.03
しかもそのたびにデスクトップのアイコンが復活しやがる
901デフォルトの名無しさん:2011/08/08(月) 16:51:53.04
まじふざけんな
902デフォルトの名無しさん:2011/08/08(月) 16:56:47.63
ちょっと前にセキュリティ関連のバグ出したからなあw
903デフォルトの名無しさん:2011/08/08(月) 17:03:39.72
>>896
5万回、楽勝でできたけど。
904デフォルトの名無しさん:2011/08/08(月) 17:05:48.44
>>898
>>896 がどう malloc() してるか知らんけど、1KB づつ malloc() しても、
高々 50MB 程度だから、32/64bit の問題じゃないと思う。
905デフォルトの名無しさん:2011/08/08(月) 17:22:31.96
初心者です、教えてください。
VS2008でオプション→VC++ディレクトリ等で出てくる
$(VCInstallDir)のようなマクロを自分で作ることはできますか?
906デフォルトの名無しさん:2011/08/08(月) 17:33:13.83
>>904
まあな
昔 malloc の実装を作ったときも、そんなあたりに壁はなかった
小間切れ領域が足りなくなったときの処理がタコとか・・・まさかねw

おおかたパーミッションあたりか
907デフォルトの名無しさん:2011/08/08(月) 17:35:53.72
>>905
Cのプログラムの中での話?
もしかしてすれ違いならVisualStudioやVC++のスレあるよ
908デフォルトの名無しさん:2011/08/08(月) 17:43:39.68
>>907
ああスレ違いですね
失礼しました
909デフォルトの名無しさん:2011/08/08(月) 19:15:21.87
>>906
malloc にパーミッションなんてあったっけ?
910デフォルトの名無しさん:2011/08/08(月) 19:55:50.81
君のクラスの一番後ろ
一番うしろ
911デフォルトの名無しさん:2011/08/08(月) 20:27:48.04
>>906
タコっつうか、実行速度最優先で断片化を防ぐことはあまり考えてない気がする。
断片化しちゃったら終わり。どうしようもない。
912デフォルトの名無しさん:2011/08/08(月) 20:29:38.22
パッパッパッパ
913デフォルトの名無しさん:2011/08/08(月) 20:40:18.95
チャンクになっているならアドレスを出力してみれば分かる

他のアロケータを使ってみるという手もある

http://goog-perftools.sourceforge.net/doc/tcmalloc.html
914デフォルトの名無しさん:2011/08/08(月) 20:42:46.00
教えて下さい!
ファイルから数値を読み込みたいのですが,
数値の数を可変にしたいのです。
int dim;int *F;
を変数として,ファイル input に
3
14 2 7
の様に、一行目に 変数 dim の内容を、
二行目に dim個の数値(*F の内容)を記述してあって、
それを読み込みたいのです。

fgets(s,64,fp);
sscanf(s,"%d",&dim);

で、一行目の読み込みは出来るのですが、
二行目をどう読み込めばいいでしょうか?
915デフォルトの名無しさん:2011/08/08(月) 21:45:00.42
とっんがり〜くっちっばっし
こっとりさん〜ことりさん♪
916デフォルトの名無しさん:2011/08/08(月) 22:39:15.25
>>914
Fの領域を確保してから
for(i=0;i<dim;i++) fscanf(fp, "%d", &F[i]);
917デフォルトの名無しさん:2011/08/08(月) 23:24:08.78
今日からc言語を学習します
とりあえずコンパイラとnotepad++入れとけばいいんだろ?
918デフォルトの名無しさん:2011/08/08(月) 23:34:54.26
>>909
>>896 がファイルつってるから、そっちのパーミッションかと一瞬思ったわけよ
919デフォルトの名無しさん:2011/08/08(月) 23:37:16.69
>>916
ありがとうございます!
920デフォルトの名無しさん:2011/08/08(月) 23:39:38.49
>>917
Turbo C 2.01 オススメ。
ライブラリは充実してるし、
統合開発環境も付いてるからインストールしてすぐ始められる。

LCC-Win32 もオススメ。
商用利用しなければ無償で使えるから経済的。
もろちん開発環境も付属。

VC++2010 も一応オススメ。
ただしこれは C コンパイラーじゃなくて
C++ のコンパイラーだね。
921デフォルトの名無しさん:2011/08/08(月) 23:47:25.44
普通に Windnws SDK 7 使っとけよ。
922デフォルトの名無しさん:2011/08/08(月) 23:51:03.82
VC++2010ってc++だけなの?cもビルドできるぽいが
923デフォルトの名無しさん:2011/08/08(月) 23:52:38.12
あげちまったすまん
とりあえずLCC入れとく
924デフォルトの名無しさん:2011/08/09(火) 00:06:16.50
cもできるよ。
925デフォルトの名無しさん:2011/08/09(火) 00:06:20.52
VC++2010も入れとけ。
両方使ってみて気に入ったほう使えばいい。
多分こっちがメインになる。
Turbo C は不要。これ16ビットだからな。
926デフォルトの名無しさん:2011/08/09(火) 00:10:36.24
C++のソースがムカつく

Somehow::YOYOYOYO

こういうのがムカつく
Cの参考書に書いてないじゃないのさ。C++分からないのに
927デフォルトの名無しさん:2011/08/09(火) 00:10:42.35
全部いれとけばいいよ
一つのソースをいろんなコンパイラに通してみるのも
意外と楽しいし発見もあったりする
928デフォルトの名無しさん:2011/08/09(火) 00:15:25.03
ダブルコロンはセンスがない
929デフォルトの名無しさん:2011/08/09(火) 00:16:06.54
じゃあ C machine もだな。w
930デフォルトの名無しさん:2011/08/09(火) 00:27:30.35
linuxでgcc使うのが、Cを楽しむ最良の選択だと思うわ。

linuxだと、モニターの表示映像もファイルだから、fopen("/dev/fb0", "rb")とかで適当にファイルを開いて、
そこにfwrite()で、各ピクセルの色を書きこめば、それだけで画面に絵を表示できる。
サウンドも、グラフィックと似たような方法で直接鳴らす方法もある。

windowsだと、こうはいかない。
windowsだと、手軽にできる画面出力なんてprintfくらいだから、
結果的に、「Cだとprintfで文字表示するくらいしかできない。グラフィックやサウンドは極端に面倒」的な、妙な認識になりがち。
931デフォルトの名無しさん:2011/08/09(火) 00:43:02.78
確かにlinuxは面白いね
設定さえ済んでれば、これだけでキャプチャもできるもんな
cat /dev/video0 > capture.mpg
932デフォルトの名無しさん:2011/08/09(火) 00:45:05.11
>>928
御意
Lispみたいにシングルコロンとダブルコロンが意味的に繋がっていれば、まだわかるんだけどね
933デフォルトの名無しさん:2011/08/09(火) 00:55:16.81
マジかよ眠ってるネットブックにlinuxぶち込んでくる
934デフォルトの名無しさん:2011/08/09(火) 02:08:22.70
rで開いて書き込むのか。
変な仕様だな。
935デフォルトの名無しさん:2011/08/09(火) 02:18:02.08
936デフォルトの名無しさん:2011/08/09(火) 02:38:40.55
::の機能って、Cで完全に代替できなくて困る

あるものはchar*で代替できるかもしんね
でも全部がそういうふうに置き換えられるわけじゃない
やれやれだ
937デフォルトの名無しさん:2011/08/09(火) 02:41:30.57
;;
938デフォルトの名無しさん:2011/08/09(火) 02:44:46.41
_
939 忍法帖【Lv=36,xxxPT】 :2011/08/09(火) 10:21:41.71
>>936
はぁ?
このスレ何か分かってる?
940デフォルトの名無しさん:2011/08/09(火) 11:04:03.06
>>936
禿がやってたろ
941デフォルトの名無しさん:2011/08/09(火) 18:06:25.05
C言語って、matrix演算ってあまり得意ではないよね?
ライブラリはあるみたいけど、自作してOKなのかな?
942デフォルトの名無しさん:2011/08/09(火) 18:16:32.82
>>941
自作して悪い理由って、例えば何?
943デフォルトの名無しさん:2011/08/09(火) 18:21:20.37
      _
      /,.ァ、\
     ( ノo o ) )
      )ヽ ◎/(. 
    (/.(・)(・)\ 
    (/| x |\)
      //\\
   . (/   \)
944デフォルトの名無しさん:2011/08/09(火) 20:15:01.00
8G弱のファイルを処理するために、fopenで書いてた部分をそのまま
fopen64に直したんですがうまくいかないです。
ファイルポインタの宣言を別なものにする必要とかあるんでしょうか?
それとフォーマット指示子なんですがlongは%ld、floatは%fなんですが
doubleやlong doubleはどう指定すんでしょうか?
945デフォルトの名無しさん:2011/08/09(火) 20:42:35.56
>>944
環境は何よ?

> floatは%fなんですが

違う。
946デフォルトの名無しさん:2011/08/09(火) 20:45:08.00
>>945
環境はSolalisです。
%eとか%gとかもあるということです?
947デフォルトの名無しさん:2011/08/09(火) 20:47:59.46
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64

これ指定するだけで特にいじる必要ないってことであってます?
948デフォルトの名無しさん:2011/08/09(火) 20:51:29.26
>>941
3x3、4x4とか小さい固定サイズのは自作してもいいけど大きいのはなあ
頑張って自作した後に有名なライブラリとパフォーマンス比べてみると死にたくなるよ
949デフォルトの名無しさん:2011/08/09(火) 20:52:38.07
>>944
longが32bitで、fseek()とかftell()みたいな関数つかってるとかは?
950デフォルトの名無しさん:2011/08/09(火) 20:54:14.57
C はアセンブラやハードの出番がきたときあっさり対応できる人向けの言語だからな
951デフォルトの名無しさん:2011/08/09(火) 20:58:07.89
>>949
fseekやftell使ってます。ダメですか?
952デフォルトの名無しさん:2011/08/09(火) 21:05:30.34
>>951
もしlongが32bitだったら2Gまでしか処理できないね。
953デフォルトの名無しさん:2011/08/09(火) 21:07:57.42
fopen64()って関数があるんならfseek64()みたいな関数もありそうだけど。
954デフォルトの名無しさん:2011/08/09(火) 21:15:20.17
fpos_t みたいなの使えば問題ないはず
955デフォルトの名無しさん:2011/08/09(火) 21:15:27.91
gcc -m64 とか?
956デフォルトの名無しさん:2011/08/09(火) 21:38:24.16
流れに割ってはいるけどfprintfって2G以上のファイル出力出来る?
書き出すだけだから出来るんかな?
957デフォルトの名無しさん:2011/08/09(火) 21:55:38.42
その1. FILE構造体の実体実装次第っぽい気がする
その2. まず想定しないだろうけど
 fprintf(fp, "%s", string) でフォーマットで参照する文字列 string が 2G 突破しちゃうようなでかいの
958デフォルトの名無しさん:2011/08/09(火) 22:36:51.64
gccって「グシシ」みたいに笑ってる感じに見えるから
物語だったらC言語は間違いなく悪役
959デフォルトの名無しさん:2011/08/09(火) 22:42:26.84
gnu compiler collection
960デフォルトの名無しさん:2011/08/09(火) 22:46:14.83
まさかのマジレス
961 ◆QZaw55cn4c :2011/08/09(火) 22:56:11.90
962デフォルトの名無しさん:2011/08/09(火) 23:01:16.81
961見て思ったけど今C言語使うとかM4とAK-47があってAK-47取るようなもんだぞ
そりゃある程度の知識としては必要なんだろうけど
963デフォルトの名無しさん:2011/08/09(火) 23:08:30.10
自己満足を表す東洋語の自慰を冠する UNIX ライクなツールチェイン
それに飛びついたコバンザメたちの大漁にお堅いメーカーまでが寄らば大樹の陰と、ある意味の本末転倒
独創的でしかし新旧問わずフリークたちのツボを真に抑えた文化圏ができるまでの腰掛けに過ぎない

社の面子だけが最終課題の、無駄に複雑でいらんことを勝手にする、
その使いにくさのあげくがセキュリティ形骸化という馬鹿げた事態への
アンチテーゼではなかったのかという、絶望の向こうにあるまた絶望
964 ◆QZaw55cn4c :2011/08/09(火) 23:08:49.18
>>962
http://ar.wikipedia.org/wiki/%D8%A5%D9%85_4 ですか?
信じられない‥‥‥。
965デフォルトの名無しさん:2011/08/09(火) 23:11:09.03
961 見て思った事
OCaml は C++ と同じくらい汚いと思う
Scala は VM で動く言語だから C とはレイヤーが違う
SML が栄えていたら C は要らなかったかも
C++ が C with Class のまま穏当な進化をしていたら C は要らなかったかも
C が要らないと思う人は、使わないという勇気を持てば良いだけ
966デフォルトの名無しさん:2011/08/09(火) 23:14:02.86
>>964
そうじゃないけどなんでアラビア語?なんだ
967デフォルトの名無しさん:2011/08/09(火) 23:17:37.16
ぶっちゃけC言語だけで何でもできる
ゴミ言語が乱立したせいで混乱を招いてる
968デフォルトの名無しさん:2011/08/09(火) 23:20:38.17
VBディスってんのか
969デフォルトの名無しさん:2011/08/09(火) 23:31:37.15
>>965
OCamlの汚さ - SMLの汚さ  =  C++の汚さ - Cの汚さ
であって、流石にOCamlがC++と同じくらい汚いってことはない
むしろMLベースでC++並みにカオスな言語とか使ってみたいわ
970デフォルトの名無しさん:2011/08/09(火) 23:46:10.94
人工生命らしき物体をつくろうとしてるんだけど
マルチスレッドに関するいい資料とかあったら教えて下しあ
あとコレ便利だけど?みたいな関数とかも教えてくれたら神として崇める
ちなみに開発環境はVisual Studio 2008 c++です
開発環境もこっちのが良いんじゃねみたいなのあったら教えてください
971デフォルトの名無しさん:2011/08/09(火) 23:52:59.67
いまさらコンパイル型の言語なんか使ってる時点で駄目だろ。
どんな移植性が良くたって、結局は生成されたモジュールが環境依存なんだからな。
Java みたいのは本末転倒だ、話にもならない。

ソースコードそのものがそのまま実行ファイルであり、
どんな環境でもそのまま使える
Perl や Ruby こそ本来の目指すべき未来だろう。
972デフォルトの名無しさん:2011/08/09(火) 23:58:02.83
/* 無意識のうち ああ求めてる "メビウスの輪の中" 精神を操る黒幕 "Rebuild" */
973デフォルトの名無しさん:2011/08/09(火) 23:59:46.38
>>958
icc は?
974デフォルトの名無しさん:2011/08/10(水) 00:11:26.05
>>970
そういうのはループの局所的な並列化だけでいいはずだからOpenMPが楽
975デフォルトの名無しさん:2011/08/10(水) 00:26:26.84
>>971
その位の理由ならJavaもPerl や Rubyも同じようなもんだろ
976デフォルトの名無しさん:2011/08/10(水) 00:32:19.29
>>971
そんな世界を一番喜ぶのは中国だろうな
977デフォルトの名無しさん:2011/08/10(水) 01:07:41.71
>>944
問題を再現出来るミニマムなコードを貼ってくれたら・・・
978デフォルトの名無しさん:2011/08/10(水) 03:32:15.18
>>974

行ける気がするありがとう
979デフォルトの名無しさん:2011/08/10(水) 03:50:49.69
OpenMP調べてみたけどシングルコアだと遅くなっちゃうのかね?
マルチコア最強になっちゃう感じですか?

すみませんド素人なもんで
980デフォルトの名無しさん:2011/08/10(水) 03:53:56.39
>>979
なっちゃうかもしらんが、個人的にはシングルコアでも差が分からんかった
コンパイラオプションでON/OFF選べるよ
981デフォルトの名無しさん:2011/08/10(水) 03:58:53.43
>>980
返信はやくてびっくりしたわ
さんくす
いろいろ試してみるわ
982デフォルトの名無しさん:2011/08/10(水) 06:43:58.07
次スレ立てます
983デフォルトの名無しさん:2011/08/10(水) 06:45:02.34
次スレ立てました
C言語なら俺に聞け(入門編)Part 88
http://hibari.2ch.net/test/read.cgi/tech/1312926287/
984デフォルトの名無しさん:2011/08/10(水) 07:33:16.90
>>983
985デフォルトの名無しさん:2011/08/10(水) 07:35:22.39
メモリが512MBでPen4の2kがあるんだけどプログラミングに使えそうかね
986デフォルトの名無しさん:2011/08/10(水) 08:15:41.90
>>985
IDE使わなきゃ余裕
987デフォルトの名無しさん:2011/08/10(水) 09:13:39.85
マザボにSATAあるなら。
PCIのギガビットLAN+SATA増設は鬼門。
フルにアクセスするとマウスがワープしはじめる。
988デフォルトの名無しさん:2011/08/10(水) 09:55:20.60
そっちのIDEかよw
PCIのバス幅ならSATAカードやNIC増設したらそうなるかw
989デフォルトの名無しさん:2011/08/10(水) 11:32:24.40
まともなマシンならならねーよ。
990デフォルトの名無しさん:2011/08/10(水) 11:50:37.89
マシンって何だよwww

AGPがまだまだ主流の頃のM/Bのチップセットなら
ありえるかなと思ったけどそこまで調べるの面倒だ
991デフォルトの名無しさん:2011/08/10(水) 12:32:56.37
コピーしています。
残り917727分
992デフォルトの名無しさん:2011/08/10(水) 13:39:52.32
double aaa()
{
double aaa = 5.552;
return aaa;
}

void main()
{
printf("[%lf]\n",aaa);
}

とすると、[0.00000]が表示されます。
なぜ?
doubleの戻り値が取れません。int型なら問題ないのですが。
993デフォルトの名無しさん:2011/08/10(水) 13:41:39.81
printf に渡してるのは 関数のポインタだもの

× printf("[%lf]\n",aaa);
○ printf("[%lf]\n",aaa());
994デフォルトの名無しさん:2011/08/10(水) 13:44:20.10
void main()
{
printf("[%p]\n",aaa);
}

こうしないと駄目だろ。
995デフォルトの名無しさん:2011/08/10(水) 13:56:01.81
すみません。printf内では、
aaa()
で呼んでました。

実際は、aaa()は別オブジェクトで静的にリンクしてるのですが、
double aaa();
とプロトタイプを書けば戻り値の取得をが出来ました。、
でも、
int aaa();
ならプロトタイプを書かなくても取得ができます。

これはなぜでしょうか?
996デフォルトの名無しさん:2011/08/10(水) 13:58:44.92
C言語って、BASICで言うCLSみたいなのはどう書くんですか?
997デフォルトの名無しさん:2011/08/10(水) 13:59:42.87
system("cls");
system("clear");
998デフォルトの名無しさん:2011/08/10(水) 13:59:50.90
>>995
Cの仕様
999デフォルトの名無しさん:2011/08/10(水) 14:05:04.47
>>997
有難うございます
1000デフォルトの名無しさん:2011/08/10(水) 14:18:35.00
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。