スレを勃てるまでもないC/C++の質問はここで 21

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2012/07/15(日) 05:19:14.36
>>1
これは乙じゃなくてポニーテールがうんたら
3デフォルトの名無しさん:2012/07/19(木) 00:57:39.04
枯れ木過ぎてこのまま落ちそうだな
4デフォルトの名無しさん:2012/07/21(土) 09:19:51.06
びよーね・すっぽすっぽ先生を讃えるスレということで
5デフォルトの名無しさん:2012/07/21(土) 18:06:16.04
コード -1073741819 で終了してしまう
くっそー
6デフォルトの名無しさん:2012/07/22(日) 21:02:02.95
すいません。教えてください。
入力された引数をトークンに分解するプログラムなのですが、
#define MAXARGS 1024
#define CHUNK 1024
int main(int argc, char *argv[])
{
char **args;
int err;
while ((err = readcmdline(stdin, stdout, &args)) > 0) {
if (strcmp("cd", args[0]) == 0) {
chdir(args[1]);
...
int readcmdline(FILE *i, FILE *o, char ***args)
{
char *prompt = getenv("PS1");
char *buf, *lasts, *token;
int argc;

/* メモリの割当 */
if ((buf = malloc(CHUNK)) = NULL ||
(*args = (char **)malloc(sizeof(char **) * MAXARGS)) == NULL) {
perror("malloc");
exit(1);
}
....
をコンパイルすると、
In function `readcmdline':
invalid lvalue in assignment
と*args = (char **)malloc(sizeof(char **) * MAXARGS)) == NULL
の所で怒られます。
本に書いてあったソースなのですが、そもそも宣言していない*argsに代入する事は可能なのでしょうか?
7デフォルトの名無しさん:2012/07/22(日) 21:24:20.63
readcmdline()のargs自体は、main()のargsへのポインタが代入されているから
* args = ... で代入することは問題がないはず。
問題なのは、その行ではなくてその一つ前の行。
8デフォルトの名無しさん:2012/07/22(日) 21:53:41.15
>>7
buf = malloc(CHUNK)) = NULL

buf = (char *)malloc(CHUNK)) == NULL
にしたらOKでした。すいません。
教えてほしいんですが、
main関数内で
ポインタのポインタとして、
char **args;を宣言して、
そのアドレスを、
int readcmdline(FILE *i, FILE *o, char ***args)
で受けて、
char ***argsに入っている事は解るんですが、
(*args = (char **)malloc(sizeof(char **) * MAXARGS)
の場合、
*argsは何を示してるんでしょうか?
*argsはどこでもポインタとして宣言していないような気がするんですが...
9デフォルトの名無しさん:2012/07/22(日) 22:16:48.51
>int readcmdline(FILE *i, FILE *o, char ***args)
ここに書いてるやん
10デフォルトの名無しさん:2012/07/22(日) 22:37:55.30
typedef char ** charPtrPtr;とでもして、charPtrPtr * argsとでもしたらわかるかも知れない。
11デフォルトの名無しさん:2012/07/22(日) 22:42:29.82
う〜ん、
http://www.nurs.or.jp/~sug/soft/tora/index.htm
あたりを読んで勉強してきます。
12デフォルトの名無しさん:2012/07/23(月) 18:34:58.44
質問です。C++の設計者はどうしてあんなに分かりにくい仕様にしたんですか?
13デフォルトの名無しさん:2012/07/23(月) 19:43:37.38
>>12
Cのコードを使えるようにするため
1412:2012/07/24(火) 03:10:13.53
Cとの互換性の確保と、オブジェクト指向の概念の分かりにくさは、直接関係ないような気がしますが…。
15デフォルトの名無しさん:2012/07/24(火) 04:30:19.43
実はオブジェクト指向ってしっくりこないんです!
16デフォルトの名無しさん:2012/07/24(火) 13:20:59.45
質問ですが
__int64 bit;
//setbit = 1ull << i;
setbit = 0;
_bittestandset64(&setbit,i);
のアセンブリコード出力が
lea rcx, QWORD PTR setbit$87411[rsp]
mov QWORD PTR setbit$87411[rsp], 0
bts QWORD PTR [rcx], rax
mov rcx, QWORD PTR setbit$87411[rsp]
となるんだが
xor ecx, ecx
bts rcx, rax
となるようなソースコードを教えていただけませんか?
環境はVC2010、ターゲットCPUはSandy Bridgeです。
またiは0〜63の整数です。

放置するかアセンブラで書くしかないのかな
17デフォルトの名無しさん:2012/07/24(火) 13:26:36.29
>>16
最適化したらどうなる?
1816:2012/07/24(火) 13:38:32.87
>>17
すでに最適化(/O2)はかけています。
このコードではiの範囲とsetbitを指すポインタの有無を
コンパイラが分からない事が原因なのではと考えています。

ちょっと逆アセも確認してきます。
1916:2012/07/24(火) 13:47:24.27
逆アセでもほぼ同様でした。
(インライン展開された関係でレジスタが変わっただけ)
20デフォルトの名無しさん:2012/07/24(火) 16:18:12.44
Compiler Intrinsicsって割りと腐ってるのな
2116:2012/07/24(火) 22:21:23.72
__int64 setbit;
setbit = 1ull << i;
だと
mov ecx, r8d
mov edx, 1
shl rdx, cl
になるのでとりあえずシフトを使うコードにしておいて
別の場所の最適化をしときます
22デフォルトの名無しさん:2012/07/25(水) 08:39:40.58
C言語でstaticを関数に付けると外部のファイルから参照できないということですが
他にも何かの効果があった気がします。
以下のような効果があるかどうか教えてください。

・関数のアドレスが固定になる?ので関数呼び出しが高速化される
・関数内の自動変数も固定アドレスになる?(int a;がstatic int a;になる?)

以上について教えてください。
23デフォルトの名無しさん:2012/07/25(水) 09:21:25.07
>>22
関数の所在は元々固定的なので、呼び出しが高速になるわけではありません。
但し、コンパイラによっては静的関数のみ、インライン展開するので効果がないというわけでもありません。
また、自動変数は意味的に呼び出しごとに別のものでなければならないので静的関数ないであろうと静的にはなりません。
24デフォルトの名無しさん:2012/07/25(水) 15:54:41.77
簡潔でわかりやすい回答ありがとうございます
25デフォルトの名無しさん:2012/08/05(日) 10:57:58.16
PeekMessageで自分で選んだメッセージだけ処理したいのですが
PeekMessageを呼んだときに、他のウィンドウのWNDPROCも
呼ばれてしまうようです。

他のウィンドウや他のメッセージを全く処理したくないわけではないので
他のウィンドウのWNDPROCを何もせずに抜けるのはNGです。

キー・マウスやペイントを優先的に処理したいだけです。

他のウィンドウのWNDPROCを呼ばずに自分の選んだメッセージだけ
処理する方法はありませんか?

Windows XP、Visual C++ 2010 Expressです。
26デフォルトの名無しさん:2012/08/05(日) 11:20:49.61
>>25
ttp://msdn.microsoft.com/ja-jp/library/cc410948.aspx
他のウィンドウのWNDPROCも呼ばれてしまうようです。の意味がわからない
PeekMessageはあくまでスレッドに関連付けられたメッセージキューからメッセージを取ってくるだけ
メッセージのディスパッチはしない
2725:2012/08/06(月) 08:59:38.27
0: hoge.dll!WndProc(HWND__ * hwnd, unsigned int msg, unsigned int wparam, long lparam) 行 181 + 0x1c バイト C++
1: user32.dll!77cf8734()
2: user32.dll!77cf8816()
3: user32.dll!77d08ea0()
4: user32.dll!77d08eec()
5: ntdll.dll!7c94e473()
6: user32.dll!77cf93e9()
7: user32.dll!77cf93a8()
8: user32.dll!77cf9402()
9: hoge.dll!DoEvent(unsigned int wMsgFilterMin, unsigned int wMsgFilterMax) 行 17 + 0x1d バイト C++
10: hoge.dll!WndProc(HWND__ * hwnd, unsigned int msg, unsigned int wparam, long lparam) 行 181 + 0x1c バイト C++
11:…
DoEventはPeek/Translate/Dispatchする関数ですが、コールスタックはPeekMessageの行になっています。
ただし、PeekMessageには10:WndProcのHWNDとは別のHWNDを渡しています。
PeekMessageの中でごちゃごちゃ回って、0:WndProcにたどり着いています。
0:WndProcのHWNDは10:WndProcと同じハンドルです。

「PeekMessage 関数を呼び出すと、呼び出し側スレッドが所有しているウィンドウへ送信されたメッセージのうち、保留されていたものを取得できます。
SendMessage、SendMessageCallback、SendMessageTimeout、SendNotifyMessage の各関数を使って送信されたメッセージが、これに該当します。
システムは、内部イベントを処理することもあります。メッセージは、次の順序で処理されます。」
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これでしょうか?
28デフォルトの名無しさん:2012/08/29(水) 08:12:00.30
スレを勃てる必要のある、低俗でないC/C++の質問って例えばどんなのですか?
29デフォルトの名無しさん:2012/08/29(水) 09:03:49.48
最新の規格に関する質問
30デフォルトの名無しさん:2012/08/29(水) 09:05:20.75
>>28
最新の規格に関する質問
C++11/C++1y 15
http://toro.2ch.net/test/read.cgi/tech/1333433900
31デフォルトの名無しさん:2012/08/29(水) 09:18:58.34
>>28
【C++】高速化手法【SSE】
http://toro.2ch.net/test/read.cgi/tech/1130349336/
32デフォルトの名無しさん:2012/09/02(日) 00:06:22.82
unsigned long length = 100000;
char *buff

buff = (char*)malloc(sizeof(char) * length);
strcpy_s(buff, length, ...);


としたい場合strcpy_sの第2引数がsize_t(unsigned int)を超えてしまうんですけど
この場合どうすればいいですか?
33デフォルトの名無しさん:2012/09/02(日) 00:10:45.10
別に超えないけど
34デフォルトの名無しさん:2012/09/02(日) 00:54:26.47
符号無しintは0〜65535だろ
35 忍法帖【Lv=40,xxxPT】(-2/5:0) :2012/09/02(日) 00:59:26.98
>>34
32ビットなら0〜4,294,967,295
36デフォルトの名無しさん:2012/09/02(日) 02:35:49.03
そうだったんですね
言い方を変えます

もしstrcpy_sの第2引数(文字列操作関数の文字数を渡す部分)が
受け取る型以上の数値を渡したい場合対応する関数って何ですか?
37デフォルトの名無しさん:2012/09/02(日) 02:44:59.26
キャスト以外の方法聞いてんのか?
その場合32bit以上コピーしようとしてることになるってのは理解できるか?
38デフォルトの名無しさん:2012/09/02(日) 03:58:53.38
>>36
strcpy_sの第2引数ってバッファのサイズで、size_tだったと思うけど
この型で表現できるサイズより大きいメモリは確保できないから考えるだけ無駄だと思うけど
39デフォルトの名無しさん:2012/09/02(日) 16:17:15.72
>>37
理解できます
32bit以上の文字数を扱う場合も書いた方が安全なのかって考えすぎてました

>>38
メモリ確保できないなら詰みなので考えないようにします

ありがとうございました
40デフォルトの名無しさん:2012/09/16(日) 21:00:45.28
Visual C++ 2010 Expressで質問です。

メンバイニシャライザで、包含しているインスタンスのメンバ変数も
初期化できますか?
error C2059: 構文エラー : '.'というエラーが出てしまいます。
41デフォルトの名無しさん:2012/09/16(日) 21:20:37.41
無理
42デフォルトの名無しさん:2012/09/16(日) 21:36:29.32
まじですか…ションボリ
43デフォルトの名無しさん:2012/09/26(水) 19:39:54.77
インスタンスって参照渡しすれば使いまわせますか?
44デフォルトの名無しさん:2012/09/26(水) 19:43:43.65
あんたの気持ちしだいだな
高潔な魂をもった人間なら使いまわせる
45デフォルトの名無しさん:2012/09/26(水) 20:54:48.25
delete this; するまでは生きてるんじゃね
46デフォルトの名無しさん:2012/09/26(水) 21:03:01.85
はぁ、そうですか
ありがとうございました
47デフォルトの名無しさん:2012/10/04(木) 21:27:30.00
C言語の勉強をしているのですが、タイマーを使ったプログラムの仕組みというか概念がよくわかりません。
抽象的な質問で申し訳ないですが、わかりやすく説明して頂けないでしょうか。
48デフォルトの名無しさん:2012/10/04(木) 21:42:45.73
もう少しわかりやすく質問文を変更して欲しい
49デフォルトの名無しさん:2012/10/04(木) 22:13:44.26
>>47
イベントドリブン形式のプログラムを書いてみるとわかるよ
50デフォルトの名無しさん:2012/10/04(木) 22:54:27.01
>>47
割り込み を検索すればいい。
51デフォルトの名無しさん:2012/10/05(金) 00:02:44.49
>>47
定期的に関数を呼び出してもらうための仕組み
52デフォルトの名無しさん:2012/10/08(月) 11:03:44.25
C++で質問です。

class A;
class B;
class C;
があって、class AはpublicデータメンバとしてB obj1;を持っています。
各クラスは.cppと.hで書かれています。

class Cのメンバ関数内でobj1のpublicなメンバ関数を実行しようとすると

>error C2065: 'obj1' : 定義されていない識別子です。

というエラーが出るのですが、どこが間違っているのでしょうか
インクルードは問題無いです…
5352:2012/10/08(月) 11:05:11.57
書き忘れました、クラスの前方宣言もしています
54デフォルトの名無しさん:2012/10/08(月) 11:09:50.14
ttp://ideone.com/oDblr
もっと詳しく書かないと
何が問題になってるのかわからんぞ
55デフォルトの名無しさん:2012/10/08(月) 11:19:42.21
>>54さんありがとうございます
>a.obj1.funcB();

obj1.funcB();
としていたみたいです。
56デフォルトの名無しさん:2012/10/08(月) 11:22:48.05
あぁ、ドット演算子じゃなくてアロー演算子の方なのですが
a->obj1.->uncB();
としてもエラーでした
error C2065: 'obj1' : 定義されていない識別子です。
error C2227: '->funcB()' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
となります。
57デフォルトの名無しさん:2012/10/08(月) 11:32:14.20
>>56
ttp://ideone.com/rRd0H
前方宣言だけでそのクラスのメンバ変数を使おうとしてないか?
58デフォルトの名無しさん:2012/10/18(木) 11:47:36.31
C# expressを使用しています

フォームにTopMost=Trueを設定し、最前面に表示させながらフォームは決して
アクティブウィンドウにならないようにしたいのですが、どのような方法がスマートなのでしょうか?
マウスクリックは透過させているのですが、フォームの位置やサイズを変更すると
勝手にアクティブになってしまい困っています
59デフォルトの名無しさん:2012/10/18(木) 13:39:09.01
ふらっとVisual C#,C♯,C#(初心者用) Part98
http://toro.2ch.net/test/read.cgi/tech/1349163087/
60デフォルトの名無しさん:2012/10/18(木) 18:34:34.06
誘導ありがとうございます♪
61デフォルトの名無しさん:2012/11/15(木) 04:09:15.82
質問です
std::wstring型の文字列(reserve済)に、1文字だけ追加したい場合、
最も高速と思われる関数はどういったものになりますでしょうか。
wstr.append()では、wchar_t型の文字入力は受け入れてくれないようなので…。
おねがいします。
6261:2012/11/15(木) 04:29:35.78
pushbackがあったんですね。
解決しました。失礼しました。
63デフォルトの名無しさん:2012/11/17(土) 23:45:52.56
windowsで連続したメモリを確保するには、どの関数を使うのが一番なのでしょうか?
64デフォルトの名無しさん:2012/11/18(日) 00:00:45.48
virtualalloc
65デフォルトの名無しさん:2012/11/18(日) 00:11:45.03
>>64
ありがとう
66デフォルトの名無しさん:2012/12/01(土) 13:54:01.29
知恵を貸してください。
gccとmakeで開発しています。C++でなくCの範囲での開発です。

適切な値が設定されないまま、関数ポインタによる呼び出しが行われてしまうのを
回避する方法を探しています。
以下に例を示します。
67デフォルトの名無しさん:2012/12/01(土) 13:56:05.94
struct handlers {
 void (*handler_1)(int);
 void (*handler_2)(int, char);
 // ここに追加(1)
};

int main()
{
 struct handlers obj[10];

 //何らかの構造体メンバ初期化←ここの修正をし忘れる
 (*obj.handler_1[10])(0);
 (*obj.handler_2[10])(0, '1');
 // ここに追加(2)
}
68デフォルトの名無しさん:2012/12/01(土) 13:58:54.19
問題は、handlers構造体の仕様を変更、特にメンバを追加したときです。
上記のソースコードに、(1)構造体宣言にメンバ(関数ポインタ型)を追加し、
(2)main()内に呼び出し文を追加、
するところまでは良いのですが、ここでプログラマがミスをして、
新たに追加されたメンバを初期化するコードを書き忘れたとします。
コンパイルは成功してしまい、プログラム実行時に異常が発生してしまいます。

追加メンバ分の初期化コードの書き忘れを、C言語の範囲内で、
コンパイラのエラーや警告で検出する方法はないものでしょうか?
ただし、プログラム実行時のチェックによる方法は不可とします。
69デフォルトの名無しさん:2012/12/01(土) 14:10:29.43
長くてごめんなさい。

失敗例1
「;」をパラメータとするマクロを使ってhandlers構造体を宣言し、同じマクロで
「,」をパラメータにして、メンバ初期化関数の引数リストの部分を作れないかと
思いましたが、「,」をマクロのパラメータにできず断念。

失敗例2
メンバ初期化のための原型となるhandlers変数を1個用意して、
構造体初期化子{}を使って初期化する方法。
[{}内の項目の個数]より[構造体メンバの数]のほうが多くてもコンパイルエラーになってくれないのでNG。
7066:2012/12/01(土) 15:01:37.74
補足です。
例題のソースコードでmain()内の呼び出し部分の配列添え字がおかしくなってます。
すみませんです。
71デフォルトの名無しさん:2012/12/01(土) 23:24:04.16
最近入門してロベールの本読み終えたんだけど
テンプレートとかboostとか駆使したり、コードインジェクトとかいう謎の技術でDirectXをハックしているソース見てしまって
底の深さに愕然としてしまった

こういうバッドノウハウ的なものや、boost、C++11などの最新技術をスマートに学ぶにはどうしたらいいかね
おすすめのソースとか書籍あったら紹介してもらえると嬉しい
72デフォルトの名無しさん:2012/12/04(火) 22:14:29.22
java屋さんの自分は、thisが大好きです。
C++でもjavaのようにthis使っていいですか?
73デフォルトの名無しさん:2012/12/04(火) 23:54:34.62
>>72
Javaと違ってC++はポインタなんでそこだけ注意
74デフォルトの名無しさん:2013/02/01(金) 20:04:32.00
C++の勉強の最初の一冊はロベールとC++プログラミング入門(オライリー)のどっちが
75デフォルトの名無しさん:2013/02/03(日) 20:00:53.10
C初心者の低俗な質問ですみません。
/* foo /* bar */ baz */ のようなコメントのネストが許されない
仕様になっているのはなぜなんでしょうか。
Cコンパイラがforやifブロックのネストを解釈できるのなら /* 〜 */ のネストだって
理解可能だと思うんですが、コンパイラが混乱することでもあるんでしょうか。
76デフォルトの名無しさん:2013/02/03(日) 20:10:06.02
>>75
http://www.kouno.jp/home/c_faq/c20.html#20
> Cのコメントが入れ子にできないのは、PL/Iのコメントが入れ子にで きないからである。CはPL/Iからコメントについてのアイデアを借用 している。

PL/Iのコメントがネストできない理由は知らん。
77デフォルトの名無しさん:2013/02/03(日) 20:53:42.51
/* を含む文字をコメントに入れられないから・・・と言いたいけど
*/ を含めない問題は放置なので多分関係ない
78デフォルトの名無しさん:2013/02/03(日) 21:07:18.96
>>77
単に、処理がちょい面倒で、そんなに必要性を感じなかっただけでしょ。
79デフォルトの名無しさん:2013/02/03(日) 23:13:23.18
まあ手抜きだな
80デフォルトの名無しさん:2013/02/03(日) 23:21:25.89
そのせいで#if 0の方を多用しちゃう
81デフォルトの名無しさん:2013/02/03(日) 23:25:14.89
範囲が広い場合は#if 0しかもう使わないな
82デフォルトの名無しさん:2013/02/03(日) 23:56:20.98
逆にもし/* 〜 */ のネストが許される仕様だとコンパイラが処理(判断)に困る。。。
そんな記述の具体例ってあるでしょうかね。
自分はまったく思いつかないのですが。。。

ところで本当をいいますと、今私が使っているのはMQLって言語でして、仕様的にほとんどC言語なんですが
#ifや#ifdef系のプリプロセッサが一切ないんで、上記のワザが使えないんです。
そのくせにコメントがネストできないという負の遺産(?)はシッカリ受け継いでいるんです(>。<)
83デフォルトの名無しさん:2013/02/04(月) 00:12:58.68
>>82
別にないでしょ、あなたの言う通りforやifブロックのネストを解釈できるのなら
/* 〜 */ のネストだって理解可能だと思うよ
本当にほんのちょっとだけコンパイラ(プリプロセッサか)の処理が面倒なだけで

たまたま不便な仕様だったと諦めるしかないね
84デフォルトの名無しさん:2013/02/04(月) 00:15:49.45
一行コメントがあるなら、全部一行コメントでコメントアウトしてしまう手はある
エディタにその機能がなければ、マクロで機能追加したり
8582:2013/02/04(月) 00:49:43.20
みなさん、レス感謝します。
ちなみに自分がやっているのは、if条件の一部を一時的に殺してテスト

if( /* a>b && */ c>d ) {
 if( /* e>f && */ g>h ) {
  if( /* i>j || */ k>l ) {

さらにこのif前後の処理ブロックをまとめて一時的にコメント・アウトしてテストするってことです。
行頭//は使えますが、まとめる行数が多いので、入れ子状態で大域を/* */で括れると便利なこと
この上ないんです。
でもありがとうございました。
86デフォルトの名無しさん:2013/02/04(月) 00:54:15.48
フラグ使うと動作に影響するしねえ
ま、しゃーないんじゃない
87デフォルトの名無しさん:2013/02/04(月) 13:03:22.44
組込みで開発環境してエラーだらけになったと思ったら、
/**/ネストできるコンパイラだった・・・
88デフォルトの名無しさん:2013/02/04(月) 20:11:54.31
たまにそういう処理系あるよね
89デフォルトの名無しさん:2013/02/05(火) 01:47:00.36
>>85
>さらにこのif前後の処理ブロックをまとめて一時的にコメント・アウトしてテストするってことです。

こっちは #if 0 とかで良いんじゃないの?
90デフォルトの名無しさん:2013/02/05(火) 01:49:21.06
>#ifや#ifdef系のプリプロセッサが一切ないんで、上記のワザが使えないんです。
91デフォルトの名無しさん:2013/02/05(火) 01:49:43.91
プリプロセッサが無いっての
92デフォルトの名無しさん:2013/02/05(火) 05:03:13.31
行コメント使え
いちいち一行づつコメントアウトするのがめんどくさいとか言うのは無しな
そんなもん、エディタの設定(マクロとか)で、大抵なんとかなる

もしかして、行コメントもないのか?
93デフォルトの名無しさん:2013/02/05(火) 05:06:12.36
行コメントも無いの?
俺はエディタのマクロとかで、選択行全部を行コメントアウト出来るようにしてるよ
94デフォルトの名無しさん:2013/02/05(火) 07:15:25.36
お前ら>>85も読めよ・・・
9585:2013/02/05(火) 09:14:07.22
私のせいでスレが荒れてしまったようですね。すみません。
コーディングのアイデアをお寄せいただけるのは有難いのですが、
私の質問は
・(コメントのネストを)どうやればいいのでしょうか?
ではなくて、
・(ネストできない仕様は)なぜなんでしょうか?
です。

実際は、コメントアウトしたい部分は関数の中だし、任意の文字列を埋め込みたいわけじゃないので
if(0) {

if( /* a>b && */ c>d ) {
 if( /* e>f && */ g>h ) {
  if( /* i>j || */ k>l ) {
   …
  }
 }
}

}
みたいにやって一時的に実行を迂回させてます。
ありがとうございました。
96デフォルトの名無しさん:2013/02/05(火) 20:41:35.01
>>95
多分、解析できない記述が存在するからだと思う

/*
int a=1;
int *p=&a;
int b=2/*p;
*/
97デフォルトの名無しさん:2013/02/05(火) 21:02:18.41
その例は「コメントが閉じられていない」と正しく解析できると思うけど
98デフォルトの名無しさん:2013/02/05(火) 21:19:07.86
>>97
それは正しくない
99デフォルトの名無しさん:2013/02/05(火) 21:23:49.12
そもそも外側のコメントがない状態で
コメントになってしまう問題のある記述じゃないのか?
100デフォルトの名無しさん:2013/02/05(火) 22:01:51.44
だからこそ>>97が正しいと思うんだけど
そうじゃないらしいな
101デフォルトの名無しさん:2013/02/05(火) 22:27:28.60
みんな分かってるようだが俺には96が何をいいたいのかさっぱりわからん
102デフォルトの名無しさん:2013/02/05(火) 22:37:23.08
b = 2 / (*p);
2 / 1なのかコメント最初の/*なのか
じゃないのか?
103デフォルトの名無しさん:2013/02/05(火) 22:42:18.89
>>102
正解!
104デフォルトの名無しさん:2013/02/05(火) 22:51:30.41
そう言いたいんだろうってのは伝わるがコメント開始なのが明白だからな・・・
105デフォルトの名無しさん:2013/02/05(火) 22:56:44.09
>>104
何で?
106デフォルトの名無しさん:2013/02/05(火) 23:02:49.61
>>105

http://ideone.com/koUYhr
>>96の外側のコメントを外したら int b=2/*p; の /* 以降がコメントになるでしょ。

ならネスト出来る仕様だったら>>97の言う通り「コメントが閉じられていない」と解釈されるのが自然だし、
普通にコメントのネストを解釈するそう解釈する処理系はもちろん作れる。
107106:2013/02/05(火) 23:04:10.76
途中送信してしまった。
そもそも式がどうとか解釈する前にプリプロセッサがコメントを除去するんだから>>102みたいな曖昧性は生じないんじゃないの。
108デフォルトの名無しさん:2013/02/05(火) 23:07:36.52
その除去でプログラマが意図しないコメント解釈されたらどうなるか
109デフォルトの名無しさん:2013/02/05(火) 23:11:55.81
ネスト出来ない仕様 → コメントを外すと問題が起こる
ネスト出来る仕様 → コメントを外しても外さなくても問題が起こる

どちらにせよ問題があるので
無関係としか言いようが無い
110デフォルトの名無しさん:2013/02/05(火) 23:22:52.15
2/*pの/*をコメント開始と捉えて、コメント閉じられてないからってコンパイルできなくなるのはCの規格上どうなの?
111デフォルトの名無しさん:2013/02/05(火) 23:27:47.32
そもそも演算子をあまりくっ付けて書くべきではないってこった
字句解析的な意味で
112デフォルトの名無しさん:2013/02/06(水) 05:28:06.84
いずれにしても混乱が起こる事がわかっているのなら、わざわざ複雑な機能はいれないだろ
費用対効果悪すぎって判断じゃね?
って言うか、D&E読む限り、行コメントの方を推奨している模様
113デフォルトの名無しさん:2013/02/06(水) 07:29:14.06
一方D言語はネスト可能な /+ +/ を導入した
114デフォルトの名無しさん:2013/02/06(水) 08:15:00.54
ソースにインベーダーの敵が侵入するわけか
115デフォルトの名無しさん:2013/02/06(水) 10:36:31.92
なるほど、除算ポインタ演算子か(なんて言うんだっけ?*pの演算子)
116デフォルトの名無しさん:2013/02/06(水) 10:58:38.92
>>110
規格上は問題なくて、単にコンパイラの不備だとおもう
ソースを読み終えた時点で「/*」に対する「*/」が見つからなければ、除算演算子とポインタ演算子の組み合わせって判断できるからね

つまり何重の入れ子コメントになっていても、一番外側の「/*」「*/」ペアが成立する限り
その中身を読み飛ばせばいいだけ。入れ子コメントの実装は可能

ちなみに入れ子コメントに意味があるか、を問題にするのはナンセンス
正しく構文が解釈できる限り、プログラマに対する制限は緩い方向(自由度が高い方向)へ仕様設計すべきだからね
メモリーやディスク容量、コンパイル時間等によって制限されるなら仕方ないと言えるが
117116:2013/02/06(水) 11:05:32.14
すまん、訂正させて欲しい
誤> 規格上は問題なくて、単にコンパイラの不備だとおもう
正> 規格には問題ないのにエラーとして処理するのはコンパイラの不備だとおもう
118デフォルトの名無しさん:2013/02/06(水) 15:09:16.63
トークン分割の妨げにならなければ空白の数は無視するんだっけ?? ※文字列中は例外だけど。
119デフォルトの名無しさん:2013/02/06(水) 17:06:29.80
int x[2]={1,10};
int *i;
↑だとエラーが出ないのに
↓だとエラーが出ます
int x[2];
x[0] = 1;
x[1] = 10;
int *i;
error C2143: 構文エラー : ';' が '型' の前にありません。

何故こうなるのか分かりません・・・
120デフォルトの名無しさん:2013/02/06(水) 17:15:06.96
ttp://codepad.org/S2TcBwvl
エラー出ないけど
121デフォルトの名無しさん:2013/02/06(水) 17:20:48.07
>>119
C89規格でコンパイルしているからでしょう

int x[2];
int *i;
x[0] = 1;
x[1] = 10;

としたら大丈夫。
変数の宣言がブロックの先頭になければならない。
122デフォルトの名無しさん:2013/02/06(水) 17:21:49.54
C++なら通るな
Cは変数宣言をブロックの先頭でしないといけないからこうだろ

int x[2];
int *i;
x[0] = 1;
x[1] = 10;
123デフォルトの名無しさん:2013/02/06(水) 17:22:41.77
おっとリロードしてなかった、すまん
124デフォルトの名無しさん:2013/02/06(水) 19:13:06.06
>>116
じゃあさ、やってみてよ。
gccならオープンなんだからさ。
口だけなら、誰でも言えるんだよなー。
125デフォルトの名無しさん:2013/02/06(水) 20:08:49.32
>>116
アホか
コメントはコンパイラじゃなくプリプロセッサが処理するんだよ
演算子なんて解析しねーよ
126デフォルトの名無しさん:2013/02/06(水) 20:46:36.31
そうか!わかった!!
ifはコンパイラが処理するからネストできるけど
コメントはプリプロセッサが処理するからネストできない
ってことですね!
127デフォルトの名無しさん:2013/02/06(水) 21:04:10.66
違う。たとえば#ifはプリプロセッサが扱うがネスト出来る
http://ideone.com/rKasOJ
128デフォルトの名無しさん:2013/02/06(水) 21:15:56.31
>>127
わざわざありがとうございます!
コメントと間違うから/と*は離して書きましょう
ってことですね!
じゃあ 結局 コメントがネストできない理由ってなんすかねー Orz
129デフォルトの名無しさん:2013/02/06(水) 21:49:28.29
昔の人がそう決めたから。それ以上でも以下でもない
なぜ昔の人がそう決めたかと気になるかもしれないが、たいてい当時の技術的には難しかったとかそんなもんさ
130デフォルトの名無しさん:2013/02/06(水) 22:17:50.29
if/for → ネストできる
/* */ → ネストできない
両者を分かつ技術的困難が何なのか興味あるな。
カーニハンの存命中に尋ねてみたい。
131デフォルトの名無しさん:2013/02/06(水) 22:38:38.93
そうそう
わざわざサポートするメリットが無いとか、どうせそんな理由だよ
そもそも、コメントはネストさせるようなものでは無いし
デバッグで一時的に〜とかは、本来の使い方ではないわな
132デフォルトの名無しさん:2013/02/06(水) 22:41:38.10
>>130
コメントをコンパイルするとか、空間的にも時間的にも、ムダばかりでメリットがない
133デフォルトの名無しさん:2013/02/06(水) 22:41:42.35
本当にコメントを書く事しか頭に無かったんだろうな
コメントアウトは考慮外というか
134デフォルトの名無しさん:2013/02/06(水) 22:47:07.83
技術的な困難といえば、構文解析だろな

C++でもあったろ?テンプレート書くときの括弧が場合によって演算子に判断されるようなの
それが昨今の構文解析技術の進歩で解消されたあれ
135デフォルトの名無しさん:2013/02/06(水) 23:02:55.09
技術の進歩というか
単にそういう仕様変更をしただけというか
136デフォルトの名無しさん:2013/02/06(水) 23:11:01.67
>>132
>コメントをコンパイルするとか、
誰もそんなことは言ってないが?
137デフォルトの名無しさん:2013/02/06(水) 23:12:23.75
プリプロセスでもなんでもいいから
とにかく処理したくないってことだろう
昔はコンパイル凄く遅かったから
コメントアウトするくらいなら削除したんだろうよ
138デフォルトの名無しさん:2013/02/06(水) 23:16:03.47
ムダばかりなら最新の言語がサポートするはずないよな
http://wisdom.sakura.ne.jp/programming/d/d3.html
139デフォルトの名無しさん:2013/02/06(水) 23:27:21.45
ただの歴史的な理由以外に特に理由は無い
140デフォルトの名無しさん:2013/02/06(水) 23:27:54.86
>>137
これは一理あると思う。
そうでなくともifブロックやforループの解析で
どこまでソースを読み込まなくちゃならないかわからないのに
コメントごとき(笑)でワーキングメモリを消費したくないとか。
そりゃコメントネストの方が優先順位が低いわな。
「あん時 研究所にあったマシンがPDPじゃなくてVAXだったら
ワシらもちゃんと実装しておったよ」とかw
141デフォルトの名無しさん:2013/02/07(木) 00:35:51.33
蒸し返して悪いんだが、仕様上は/(除算)の後にスペースを入れるように規定されてるって理解すればいいのかな
今まで""の中以外ではスペースは入れても入れなくてもどちらでもいいと思っていたからこれは盲点(不勉強)だった
b=2/*p; b=2 / *p;
142デフォルトの名無しさん:2013/02/07(木) 07:18:42.35
スペースを入れるように規定されているというか、
スペースを入れないとコメントになってしまうように規定されているんだよ
143デフォルトの名無しさん:2013/02/07(木) 10:14:45.56
>>142
そのとおり。
JIS X 3010で「文字の並び/*は注釈の始まりを示す」
と規定されているよ(6.4.9) だからb=2/*p;をb=2/(*p);とは解釈しない。
116の間違いはこの点にあるとおもう。
除算を意図しても構文が【規格上間違っている】のだ。
これはコンパイラ(プリプロセッサを含む)のインプリの話ではなく
C言語規格の問題だ。125の揚げ足取りでは何の反論にもなっていない。
116の言う「コンパイラの不備」ではなく、規格に反した記述だったから
エラーではじかれたわけだね。
ネスティングができない理由は、当時の計算機リソースだとコンパイラ
(プリプロセッサを含む)のインプリが楽だったから…
くらいじゃないのかな。(←これはオレの想像)
144デフォルトの名無しさん:2013/02/07(木) 10:29:06.68
あの世から「だから#ifとか用意してやってるのに 最近の若いモンは!」みたく言われちゃいそうw
145デフォルトの名無しさん:2013/02/07(木) 19:46:12.57
#ifの方がparseしやすいってことなのか
146デフォルトの名無しさん:2013/02/08(金) 06:36:34.76
2GBくらいまではできるはずなのですが
callocで確保できるだけ確保したら1.6GBしか確保できません

メモリは1バイト確保しようとしたら8バイトに丸められると見たので
8の倍数から確保できなくなったらマイナス8して再度確保という感じでしています

for(unSize=262144; 8<=unSize; unSize-=8) {
do {
calloc(unSize, 1);
} while(確保できる間);
}

確保部分のソースとしてはこんな感じです
実際はリスト構造を使用してそこに確保したポインタを指定しています
リスト構造自体のサイズを考慮しても2GB - 1.6GBの400MBには達しないのですが
どうすればプロセス毎の最大値2GBまで確保できるようになりますか?
147デフォルトの名無しさん:2013/02/08(金) 08:57:37.51
> 2GBくらいまではできるはず
ただの妄想だろ
環境くらい書け
148デフォルトの名無しさん:2013/02/08(金) 09:17:28.49
環境
OS Vista Home 32bit
メモリ3GB

メモリクリーナーでは2GB超のメモリを空きメモリにできるのですが
その後>>146を試しても1.6GBしか確保できません
149デフォルトの名無しさん:2013/02/08(金) 09:52:54.78
仮想と物理をごっちゃにしてるような気がする... (´・ω・`)
150デフォルトの名無しさん:2013/02/08(金) 12:34:48.24
連続した1.6GB超えの領域がないんだろ。
151デフォルトの名無しさん:2013/02/08(金) 23:08:49.00
>>149
物理メモリ3GB
仮想メモリ4GB
です

>>150
1度に2GBを確保しようとしているのではなくて
>>146のソースで示した通り小分けにして確保しています
152デフォルトの名無しさん:2013/02/08(金) 23:20:00.68
32bitならそういうもんなんじゃねーの
153デフォルトの名無しさん:2013/02/09(土) 00:35:50.26
タスクマネージャでメモリサイズ見れば?
154デフォルトの名無しさん:2013/02/09(土) 03:19:49.29
タスクマネージャのパフォーマンスタブの空きメモリがまだあっても
プロセスタブにあるメモリ列が1.6GBになると止まってしまいます
155デフォルトの名無しさん:2013/02/09(土) 08:57:06.04
>>147
プロセス毎に動的確保できるのは2GBまで
156デフォルトの名無しさん:2013/02/09(土) 12:52:49.47
VC++は16バイトなんて噂もあるから、一度16バイトで試してみればいいんじゃ
157デフォルトの名無しさん:2013/02/09(土) 14:28:23.13
メモリ関連で思い出した
mallocで小分けにして物理メモリの空き領域以上を確保したら
それ以外の既存のデータがページファイルに追いやられるよね

これで一応メモリ掃除できたとか思ってたけど
見かけ上空きメモリが増えただけで
メモリクリーナーはまた別のやり方でメモリ空けてんの?
158デフォルトの名無しさん:2013/02/09(土) 16:38:58.76
>>154
ならWindowsはそういうものなのかもね
159デフォルトの名無しさん:2013/02/09(土) 18:53:40.35
>>157
メモリクリーナーも一緒(mallocじゃなくて別の関数かもしれんが)
ページファイルに追いやって、すぐ使える物理メモリを確保する
160デフォルトの名無しさん:2013/02/10(日) 01:11:25.69
こういうもんだと納得するしかないんですね
ありがとうございました
161デフォルトの名無しさん:2013/02/10(日) 20:42:03.54
mallocやcallocで確保した領域は
プログラム終了時に明示的にfreeするべきでしょうか。
それともやるだけムダでしょうか。
162デフォルトの名無しさん:2013/02/10(日) 20:59:42.09
終了時まで確保しっぱなしなの?
使わなくなったタイミングで解放しないの?
163デフォルトの名無しさん:2013/02/10(日) 21:09:49.18
>>161
基本的には適切なタイミングで解放しましょう
164デフォルトの名無しさん:2013/02/10(日) 23:04:15.12
返事ありがとうございます。
大昔、fj.comp.lang.cでこの辺りが話題になったことがありまして
上でmallocの話が出て思い出しついでにちょっと尋ねてみました。
当時、malloc/callocがメモリを確保するヒープ領域は、プログラム(正確にはプロセスだったか?)終了後に
OSが解放するんだからfreeは不要だ!と主張する人がいたことを憶えています。
プログラムを"安全側"に設計することに嫌悪する人もいたり…

私もfreeするべきだと思います。
プログラムもOSも、それぞれが自分がやったことの後始末は、基本的に
自分の中で責任持って完結するべき、と思ってます。
OSがやってくれるからサボってていいや〜みたいな考え方だと
余計なトラブルを招きかねないですよね。まぁ安全側の考え方ですが。
つまらない話、すみませんでした。
165デフォルトの名無しさん:2013/02/10(日) 23:55:27.08
>>164
その手の話は...

終了直前以外でfree不要と言うバカいるの?2人目
http://toro.2ch.net/test/read.cgi/tech/1359585842/

でやってくれ。
166デフォルトの名無しさん:2013/02/11(月) 00:37:45.35
宗教論争っぽくなるからな。。。
167デフォルトの名無しさん:2013/02/11(月) 13:34:42.38
>>164
プログラム終了時にOSなりライブラリが自動で解放してくれるのが
保証されているなら、解放処理は書かなくてもいいだろうが、
解放処理が書かれていれば
「このコードを書いた人はメモリをちゃんと把握しているな」
という示しになる。
168デフォルトの名無しさん:2013/02/14(木) 17:11:00.62
_beginthreadex(NULL, 0, fnFunction, NULL, 0, 0);
とする場合fnFunctionを変数参照で指定する場合は変数をどう定義したらいいですか?

イメージとしては
unsigned int *sum;
sum = fnFunction;
_beginthreadex(NULL, 0, sum, NULL, 0, 0);
としたいのですがパラメーターと互換性がありませんと出てしまいます
169デフォルトの名無しさん:2013/02/14(木) 17:28:51.30
いま手元にコンパイラがないので想像ですが、宣言を
unsigned int (*sum)(void *);
でしてみたらどうでしょうか?
170デフォルトの名無しさん:2013/02/14(木) 17:37:46.89
ありがとうございます
unsigned int (__stdcall *sum)(void*)
としたらいけました

でもなんか今まで書いた事のない書き方なので気持ち悪いです
もっとスマートな書き方は無さそうですし慣れるしかないんでしょうか

UINT (WINAPI *sum)(VOID*)
これくらいでしょうか
171デフォルトの名無しさん:2013/02/14(木) 17:46:26.26
>>170
typedef unsigned int (*FUNCPTR) (void *);
FUNCPTR pf;
pf = func;
pf(…);

で良いんじゃないの
172デフォルトの名無しさん:2013/02/14(木) 17:56:58.97
__stdcallはWin32APIの独自キーワードですが、それ以外は関数のポインタを
宣言する普通の(標準規格に沿ったの意)書き方です。
下段のように書き換えても本質は同じなんで、私はそんなにスマートさは感じませんけど。。。
173172:2013/02/14(木) 18:07:12.62
>>172
すみませんでした。アンカー(>>170)の入れ忘れでしたorz
174デフォルトの名無しさん:2013/02/14(木) 18:07:43.21
そこらへんは個人の好みだろ

何回も書くなら>>171みたいにしたらいいと思う
()の位置が気持ち悪いのはわかる
175デフォルトの名無しさん:2013/02/14(木) 18:37:45.62
>>170
>今まで書いた事のない書き方なので気持ち悪いです

関数ポインタ宣言の基本型さえ押さえときゃ気持ち悪くならないよ。
関数の返却値の型 (*変数名)(引数の宣言);

※オレの流儀は sum = &fnFunction; だなぁ。ま、好みの問題だww
176デフォルトの名無しさん:2013/02/14(木) 18:50:09.99
>>170
> でもなんか今まで書いた事のない書き方なので気持ち悪いです

関数ポインタの記述のしかたはCの中でも特例だから、
「そういうもんなんだ」と思う以外に選択肢は無い。
177デフォルトの名無しさん:2013/02/14(木) 19:33:53.05
__stdcallとかの呼び出し規則は独自拡張だから
括弧の位置がコンパイラによって互換性なくていちいちtypedefしてた記憶がある
178デフォルトの名無しさん:2013/02/14(木) 21:09:39.72
>>175
typedef struct hoge {
unsigned int (__stdcall sum)(void*)
};
って事?
hoge.sum hoge->sumができなくね?
179デフォルトの名無しさん:2013/02/14(木) 22:50:41.63
>>178
ちょっと175との絡みがわからないけど、hogeはタグ名であって構造体変数じゃないからできないんじゃないの?
180デフォルトの名無しさん:2013/02/14(木) 23:14:05.51
こういう事もできる

typedef unsigned int FUNC(void *);
FUNC* pf;
pf = func;
pf(…);
181デフォルトの名無しさん:2013/02/14(木) 23:43:30.85
>>179

unsigned int _(_stdcall sum)(void*)とか
hoge.sum = &fnFunction
hoge->sum = &fnFunction
できないんじゃない?
182デフォルトの名無しさん:2013/02/14(木) 23:57:18.01
ttp://ideone.com/CKPRSO
こういう話かな?
183デフォルトの名無しさん:2013/02/15(金) 00:10:59.25
>>182
コピペの恐怖
184デフォルトの名無しさん:2013/02/15(金) 00:12:58.03
182を読んでも178と181が何を言いたいのか良くわからんなぁ
そもそもなんで関数ポインタから関数の型の宣言に話がかわったんだ?
185デフォルトの名無しさん:2013/02/15(金) 00:17:24.03
割と知られていない関数の typedef の挙動
http://ideone.com/kwArU8
186182:2013/02/15(金) 00:56:48.43
>>183
ああ、指摘ありがとう。間違っていたので直しました
ttp://ideone.com/SZgkp1
187デフォルトの名無しさん:2013/02/15(金) 11:34:57.86
>>181
構造体のメンバに関数ポインタを持つことは可能

#include <stdio.h>

unsigned int MyFunc( char *buf )
{
 puts(buf);
 return 1;
}

int main(void)
{
 struct _hoge {
  unsigned int (*sum)(void *);
} hoge;

hoge.sum = &amp;MyFunc;

(*hoge.sum)("hello, world");

return 0;
}
188デフォルトの名無しさん:2013/02/15(金) 11:39:00.05
>>187
すまん。うかつだった orz
hoge.sum = &amp;MyFunc; は hoge.sum = &MyFunc;
189デフォルトの名無しさん:2013/02/15(金) 12:38:09.52
unsigned int (*sum)(void *);
hoge.sum = &MyFunc;
hoge.sum = MyFunc;
&があっても無くても同じ動作するのか

てっきり前者と後者で違うから
unsigned int (**sum)(void *);
hoge.sum = &MyFunc;

unsigned int (*sum)(void *);
hoge.sum = MyFunc;
こうしないといけないと思ってた
190デフォルトの名無しさん:2013/02/15(金) 12:44:01.23
暗黙に、関数は関数ポインタに変換される。
暗黙に、関数ポインタは関数に変換される。
191デフォルトの名無しさん:2013/02/15(金) 12:54:20.66
謎が消えたありがとう
192デフォルトの名無しさん:2013/02/15(金) 14:11:26.06
昨日から何を聞きたかったのか、やっとわかった… (´・ω・`)
193デフォルトの名無しさん:2013/02/15(金) 19:33:21.99
関数呼び出しや配列要素参照の定義って
無駄が多いように思うんだけど何か理由でもあるの?

関数呼び出し
 関数(引数リスト) or 関数ポインタ(引数リスト)
配列要素参照
 配列[インデックス] or ポインタ[インデックス]

関数が関数ポインタに暗黙に変換されるのなら
関数ポインタ(引数リスト)の定義1つで済む気がするのだが
194デフォルトの名無しさん:2013/02/15(金) 19:36:45.92
関数と関数ポインタは違うだろう
195デフォルトの名無しさん:2013/02/15(金) 19:58:43.75
関数ポインタ(引数リスト) の定義だけとする

式が必要な箇所で <値 or 括弧式> '(' の並びを見つけた時点で
関数呼び出しであるという判定を行ってパースするはずだけど、
ここでこの <値 or 括弧式> が関数ポインタに変換可能なら良いとすれば
関数も関数ポインタも両方受け付けられるのではなかろうか
196デフォルトの名無しさん:2013/02/15(金) 21:24:51.76
有り体に言えば、関数名は、その関数本体のアドレス(ポインタ)を持つということじゃないですかね。
197デフォルトの名無しさん:2013/02/15(金) 21:27:13.28
左辺値のまま呼び出しを行いたいのだろうか
関数ポインタに暗黙変換して右辺値になって何か不都合ある?
198デフォルトの名無しさん:2013/02/20(水) 14:00:23.88
プログラム

 グローバルに下記を設定しておく。
static int WIDTH=320,HEIGHT=240;
static array<bool,2>^ pixels_new=gcnew array<bool,2>(WIDTH+2,HEIGHT+2);    //一回ごとの細線化結果を入れる
static array<bool,2>^ pixels_old=gcnew array<bool,2>(WIDTH+2,HEIGHT+2);     //一回ごとの細線化対象を入れる
bool change_flag;

private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

  Graphics^ g=e->Graphics;

  int X0=10,Y0=10;
  int X1=340,Y1=10;

  int UPPER_LEFT=2,LOWER_RIGHT=6,UPPER_RIGHT=0,LOWER_LEFT=4;

  Color color1;
  int i,j;

  Bitmap^ bmap_exp=gcnew Bitmap(WIDTH+2,HEIGHT+2);    //拡張画像
  Bitmap^ bmap_thin=gcnew Bitmap(WIDTH,HEIGHT);      //最終線画化画像

とまだまだプログラムは続くのですが
「グローバルに下記を設定しておく。」とはどこからどこまでを設定すればいいのでしょうか
199デフォルトの名無しさん:2013/02/20(水) 14:04:33.35
そんなの他人に分かるわけないだろ
自分で決めろよ
200デフォルトの名無しさん:2013/02/20(水) 14:38:11.99
>>199
//homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.htm
こちらのHPを見て勉強しているのですが理解ががが
201デフォルトの名無しさん:2013/02/20(水) 14:56:33.41
>>200
初心者にC++/CLIやらせるとか糞だな
C++/CLIはC/C++じゃないのでスレ違い
http://toro.2ch.net/test/read.cgi/tech/1268613679/
まずはそんな画像処理なんかより言語自体の勉強をすべき
202デフォルトの名無しさん:2013/02/20(水) 15:06:39.71
>>201
スレチすいませんっした
203デフォルトの名無しさん:2013/02/21(木) 09:55:39.62
GetDiskFreeSpaceExで空き容量を取得したいんですが
今後1000000TBのHDDが出たとして
正常な空き容量を返せますか?
この関数が返す戻り値が__int64のようなので
これの最大値までは大丈夫なのでしょうか?
それともOSで最大値が制限されてたりしますか?
204デフォルトの名無しさん:2013/02/21(木) 10:24:59.38
__int64までなら大丈夫
205デフォルトの名無しさん:2013/02/21(木) 11:10:11.60
C言語のキャストと、reinterpret_castで違いってあるのでしょうか?
206デフォルトの名無しさん:2013/02/21(木) 11:23:53.75
あるよ
207デフォルトの名無しさん:2013/02/21(木) 11:34:51.91
ないだろ
あれは目印だめの存在
208デフォルトの名無しさん:2013/02/21(木) 12:03:32.66
const void* p;
(int*)p; // できる
reinterpret_cast<int*>(p); // できない
char c;
(double)c; // できる
reinterpret_cast<double>(c); // できない
209デフォルトの名無しさん:2013/02/21(木) 12:10:41.95
>>208
おおお。有難うございます。
後者のはstatic_castなら大丈夫なんですね。勉強になりました。
210デフォルトの名無しさん:2013/02/21(木) 15:37:36.23
間違った勉強の仕方をしても意味ないよ?
208が紛らわしいレスしてる責任があるけど
209が仕事で恥かいても俺は知らないけど
211デフォルトの名無しさん:2013/02/21(木) 15:52:10.10
>>210
初心者みたいだし仕方ないよw
212デフォルトの名無しさん:2013/02/21(木) 16:15:24.49
>>208のように嘘を教える者。嘘を信じる者がいるのが悲しいですね。
213デフォルトの名無しさん:2013/02/21(木) 18:43:50.27
int&x=a;
static_cast<unsigned long>(x) = b;
の挙動を正確に説明できる奴なんて早々居ないんじゃね
214デフォルトの名無しさん:2013/02/21(木) 19:47:48.41
aはなんなんだよ
215デフォルトの名無しさん:2013/02/21(木) 19:56:04.75
C++の型キャストで一番安全そうに見えるstatic_castが実は一番危険
216デフォルトの名無しさん:2013/02/21(木) 20:28:46.20
なんで釣堀になってんの
217デフォルトの名無しさん:2013/02/21(木) 20:34:55.14
unsigned long型の右辺値にキャストして代入なんてできるの
218デフォルトの名無しさん:2013/02/21(木) 21:12:45.00
ばかばっかかここ
219デフォルトの名無しさん:2013/02/21(木) 21:14:21.31
ばかばーっか
220デフォルトの名無しさん:2013/02/24(日) 03:34:10.67
ばかという奴がバカボンド
221デフォルトの名無しさん:2013/03/02(土) 14:09:21.00
プリプロセッサの一部適用てなんか方法あったけ?

gcc E -DPAPAN_DNA=1 maman.c > okochan1.c
gcc E -DPAPAN_DNA=2 maman.c > okochan2.c

PAPAN_DNAの部分だけ展開するような
222デフォルトの名無しさん:2013/03/02(土) 18:15:27.75
sed -e 's/PAPAN_DNA/1/'
223デフォルトの名無しさん:2013/03/02(土) 20:14:52.32
unifdef
224デフォルトの名無しさん:2013/03/02(土) 23:37:50.40
ある2つのライブラリがFuncを持ってて両方リンクしなきゃならない場合ってどうするんですか?
225デフォルトの名無しさん:2013/03/02(土) 23:54:27.68
WindowsのDLLなら
LoadLibrary と GetProcAddress で
それぞれのDLLのFuncのアドレスを取得して
別々に使う。
226デフォルトの名無しさん:2013/03/03(日) 13:08:25.80
>>224
linuxのsoなら
dlopen と dlsym で
それぞれのsoのFuncのアドレスを取得して別々に使う。

静的libなら。。。
227デフォルトの名無しさん:2013/03/03(日) 13:12:03.70
ラッパーdll噛ませるしかないのかな
228デフォルトの名無しさん:2013/03/04(月) 18:20:08.79
わざわざdl作らなくとも、ラッパー関数を作れば良いだけじゃないのか?
229デフォルトの名無しさん:2013/03/05(火) 18:37:20.77
印刷設定の用紙サイズを変更するAPIがあったら教えてください
変更したらOS上で変更しない限り永続させたいです
お願いしますm(__)m
230229:2013/03/05(火) 23:09:52.51
自己解決しました
231229:2013/03/07(木) 12:55:47.88
と思ったけどやっぱり分かりません
232デフォルトの名無しさん:2013/03/07(木) 18:35:00.59
>>231 ソース貼れや
233デフォルトの名無しさん:2013/03/07(木) 19:21:59.71
>>231
そりゃ誰にも分からん
234デフォルトの名無しさん:2013/03/07(木) 19:23:19.77
回答できないならレスするなゴミ
235デフォルトの名無しさん:2013/03/07(木) 19:31:58.28
ゴミ質問者にはゴミ回答者がよく似合う
236デフォルトの名無しさん:2013/03/08(金) 22:11:25.08
>>234
うるせえよゴミw
早く死ねよゴミw
237デフォルトの名無しさん:2013/03/08(金) 22:17:36.63
アマゾンギフト10万円で死んでやるよ
238デフォルトの名無しさん:2013/03/13(水) 00:19:54.91
どんだけぇ〜!
239デフォルトの名無しさん:2013/03/13(水) 01:31:36.41
STLのstringについて質問です。

char型の非constアドレスを要求するCのライブラリ関数などに
このオブジェクトの持つバッファのアドレスを渡すにはどうしたらよいでしょうか。
data()のアドレスをキャストして無理やり渡してみたら書き込む事は出来たのですが、
保証されない動作になると思われるうえ、当然length()の値との整合性が取れなくなってます。

と書いたのを読み返してみたら、関数側がlengthの仕組みを認識出来ない以上無理な気がしてきた。
char型のバッファでワンクッション置くしか無いんでしょうか…
240デフォルトの名無しさん:2013/03/13(水) 02:57:19.42
たぶんない
241デフォルトの名無しさん:2013/03/13(水) 07:39:56.18
242デフォルトの名無しさん:2013/03/13(水) 21:49:02.60
std::basic_string<T>はメモリの連続性を保証しないのでstd::vector<char>を通した方がよい
ttp://ideone.com/0Njz2Y
243デフォルトの名無しさん:2013/03/14(木) 00:26:51.41
保証するよ
C++11から
244デフォルトの名無しさん:2013/03/14(木) 01:03:48.76
そうだった失礼
245デフォルトの名無しさん:2013/03/14(木) 03:25:53.19
>>241
なるほどresize()を使って帳尻を合わせておけばいいんですね
ありがとうございます

>>242
連続性が保証されていないバージョンがあったんですね
参考になります
246デフォルトの名無しさん:2013/03/14(木) 07:39:01.96
>>245
C++03までは規格上は保証はされていないけど、
連続性の無い実装は1つも無いよ
だからこそC++11で保証するようになったんだし
247デフォルトの名無しさん:2013/03/17(日) 15:33:29.83
誰か立ててくれませぬか


スレ立てるまでもない質問はここで 126匹目

質問する前にGoogleで検索しましょう。http://www.google.co.jp

プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。

前スレ
スレ立てるまでもない質問はここで 125匹目
http://toro.2ch.net/test/read.cgi/tech/1361608847/
248デフォルトの名無しさん:2013/03/17(日) 21:16:39.62
>>247
他人任せの精神異常者はさっさと消えてください
249デフォルトの名無しさん:2013/03/17(日) 21:20:02.22
VC++にてBluetooth通信するプログラムを作成しているのですが、
Bluetoothデバイスをサーチするときの
BLUETOOTH_DEVICE_SEARCH_PARAMSの設定を詳しく教えてください。
fReturnAuthenticated = 以前にペアリングしたことがある
fReturnRemembered = ペアリングしたことはないが、以前検索に引っかかったことがある?
fReturnConnected = 現在接続しているデバイス
fReturnUnknown = 一度もペアリングしたことのないデバイス
fIssueInquiry = ?
他のところも間違えていたら指摘お願いします
250デフォルトの名無しさん:2013/03/17(日) 23:08:05.38
>>249
その情報にいくら払えるって?
251デフォルトの名無しさん:2013/03/18(月) 01:09:52.09
>>250
そんなこといわんといて・・・
252デフォルトの名無しさん:2013/03/19(火) 23:15:50.72
英語を勉強しるよ
253デフォルトの名無しさん:2013/03/27(水) 01:34:33.89
すいません、教えてください。
#include <signal.h>
void (*signal(int signum, void (*handler)(int)))(int);

intを引数に取り、void型の戻り値を持つ
関数ポインタの宣言。
とは、違うんですよね?
どのように解釈するのでしょうか?
この宣言から
signal( SIGINT, SIG_IGN );
がコンパイルエラーにならない理由が良く分からないです。
254デフォルトの名無しさん:2013/03/27(水) 02:49:26.68
>>253
signal()の戻り値は関数ポインタ。
第一引き数はint。
第二引き数は関数ポインタ。
SIG_IGNは関数ポインタのはず。
255デフォルトの名無しさん:2013/03/27(水) 07:11:37.48
typedef void (*signal_handler)(int);
signal_handler signal(int signum, signal_handler handler);

こう解釈する
256デフォルトの名無しさん:2013/03/27(水) 21:27:43.24
K&Rですら反省しているうんこ文法なのでそういうものだと思って覚えましょう
257デフォルトの名無しさん:2013/03/31(日) 01:19:26.30
C言語初めて、2ヶ月程度の初心者です。
free関数に関する質問です、よろしくおねがいします。

free関数は、どうやって、どこまでのメモリを解放するか判定しているのでしょうか?
free関数にわたすのは、先頭のポインタですよね。終了点はどこから情報を得ているのでしょうか。

int* px;
px = (int *)malloc(sizeof(int) * 10);
という感じで、メモリを動的に確保した後に、
free(px);
で普通に解放。

しかし、ためしに、
px++; /*してから*/
free(px);
解放してみると、派手にエラーを吐いたので、
実行時の解放中に気づいた?ようです。

px++;
px--;
free(px);
だと正しく解放したようです。

よろしくおねがいします。
258デフォルトの名無しさん:2013/03/31(日) 01:49:58.29
>>257
処理系依存の話になるが、
たいていはmallocが呼ばれたときに、ポインタからサイズが得られるように
構造体を使ったヒープや配列で管理している。
259デフォルトの名無しさん:2013/03/31(日) 02:00:42.14
>>257
_msize(px);
でサイズ得られるから
内部で管理されてる事になるね
260257:2013/03/31(日) 02:06:49.02
>>258
ありがとうございます。
別のところで、管理されているのですね。

ということは、
malloc() で動的に確保したメモリのポインタに
(別のアドレスを)再代入しない方がよさそうですね。
261デフォルトの名無しさん:2013/03/31(日) 02:08:47.21
>>260
当たり前だろボンクラ
どんな本で勉強してんだパーかおめ
262257:2013/03/31(日) 02:15:33.97
>>259
自分の環境では、
undefined reference to '_msize'
となりましたが、たしかに、環境によってはメモリサイズが得られるようですね。
ありがとうございます。

>>260
たぶん当たり前すぎて、書いてありませんでした。。(^^;)
263デフォルトの名無しさん:2013/04/01(月) 03:34:20.26
>malloc() で動的に確保したメモリのポインタに
>(別のアドレスを)再代入しない方がよさそうですね。
これって行った場合、
プログラム終了時に一般的なOSならfreeされますよね?
264デフォルトの名無しさん:2013/04/01(月) 06:26:11.43
C++でguiアプリ作りたいんだけどオススメの方法おしえて
265デフォルトの名無しさん:2013/04/01(月) 14:57:44.15
C++/CLIでCLR
266デフォルトの名無しさん:2013/04/01(月) 15:36:19.33
C++Builder
267デフォルトの名無しさん:2013/04/01(月) 18:15:40.08
以前は、wxWidgetsをやってたひとが、最近は、FLTKをつかってるといってた
268デフォルトの名無しさん:2013/04/01(月) 22:43:38.31
ええとQT?
269デフォルトの名無しさん:2013/04/01(月) 22:53:09.70
Qtがいいの?
270デフォルトの名無しさん:2013/04/02(火) 06:21:12.50
>>263
free()していないメモリブロックは、OSなりでよきに計らわれる。
なので、生存期間の短い大量のメモリを使用しないようなプログラムでは
ポインタ変数の使い回しによるfree()の省略はしばしば行なわれる。
271デフォルトの名無しさん:2013/04/02(火) 18:01:31.59
freeしない派ってほんとうざいわ
272デフォルトの名無しさん:2013/04/02(火) 22:52:57.08
free必須信者ってほんとうウザい。 死ねばいいのに
273デフォルトの名無しさん:2013/04/02(火) 23:11:27.39
くだらん宗教論争する連中が一番ウザいです
274デフォルトの名無しさん:2013/04/02(火) 23:22:42.22
freeしたいやつは自分が担当するソースだけしとけ
freeしたくないやつは自分が担当するソース以外はfree消すな
275デフォルトの名無しさん:2013/04/02(火) 23:50:50.89
>>274
そのうちゴチャゴチャになって
freeしたメモリブロックをべつのソースモジュール内で再度freeしてしまう罠
276デフォルトの名無しさん:2013/04/03(水) 19:40:26.92
初心者は、
&nbsp;&nbsp;if(ptr)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(ptr);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr&nbsp;=&nbsp;NULL;
&nbsp;&nbsp;}
みたいに書くといいよ。俺はしないけど
277デフォルトの名無しさん:2013/04/03(水) 19:41:42.30
うわ、変になった。

 if(ptr) {
  free(ptr);
  ptr = NULL;
 }
278デフォルトの名無しさん:2013/04/03(水) 19:49:50.78
if(ptr) って要るのか?
279デフォルトの名無しさん:2013/04/03(水) 20:42:48.36
free(0);
はなにもしないことが保証されている。
ISO/IEC 9899:1999 7.20.3.2.2
void free(void *ptr);
If ptr is a null pointer, no action occurs.
280デフォルトの名無しさん:2013/04/03(水) 21:15:12.16
フリー(無職)の俺も何もしない
281デフォルトの名無しさん:2013/04/03(水) 21:17:45.38
>>280
282デフォルトの名無しさん:2013/04/03(水) 22:04:13.21
ptrが指してるものがなにか別のポインタを持っていて、
それを先にfreeしてからptrをfreeするという手順を取るというときに
すでにptrがfreeされたものが与えられてしまってもぬるぽにならないように。
283デフォルトの名無しさん:2013/04/03(水) 22:07:30.16
((man *)280)->deleteThis();
284デフォルトの名無しさん:2013/04/03(水) 23:07:59.81
>>282
nullpoになるわけないじゃん
285デフォルトの名無しさん:2013/04/03(水) 23:14:39.60
 
  ∧_∧
  ( ・∀・)      | | ガガッ!
 と    )      | |
   Y /ノ      .人
    / ) .人   <  >_∧∩
  _/し' <  >_∧∩`Д´)/
 (_フ彡 V`Д´)/   / ←>>282
            / ←>>284
286デフォルトの名無しさん:2013/04/04(木) 10:29:14.06
>>282
malloc〜free  malloc〜free と処理が分離されててptrを使い回すならわかるけど
malloc malloc 〜 free free みたいな状態でptrを使い回すってこと?
287デフォルトの名無しさん:2013/04/04(木) 17:50:44.07
int i;
char **ptr;

ptr = malloc(sizeof(char*) * 5);
for(i=0;i<5;i++){
ptr[i] = malloc(sizeof(char) * _MAX_PATH);
}

for(i=0;i<5;i++){
free(ptr[i]);
}
free(ptr);

こういう事じゃないの
288デフォルトの名無しさん:2013/04/04(木) 17:52:24.94
289デフォルトの名無しさん:2013/04/04(木) 18:21:23.84
>>279
炎上学習法で得た知識はダメだな。www
未だに生きていてNULLをfreeしても良いとしていない規格がある。でも教えてやらない。www
290デフォルトの名無しさん:2013/04/05(金) 05:19:37.34
>>289
そんなマイナーな環境があるんだ‥‥というか、それってシステムコールを直呼びしているだけの手抜きライブラリだねえ
ま、アロケータはmalloc()/free()といえどもラッピングして使うようにしているから、問題ないけどね、1callぶんだけ手数とスタックがちょびっとだけもったいないけどね、ま、ちょびっとだけど
291デフォルトの名無しさん:2013/04/05(金) 08:30:49.23
>>290
> そんなマイナーな環境があるんだ
自分の知らない規格はマイナー wwww
炎上学習法にはのらない。教えてやらない。www

> それってシステムコールを直呼びしているだけの手抜きライブラリだねえ
システムコールを知らない事を自白しちまったな。wwww

死ねよクズ
292デフォルトの名無しさん:2013/04/05(金) 08:48:39.06
春だねぇ
293デフォルトの名無しさん:2013/04/05(金) 10:37:46.85
HAL
294デフォルトの名無しさん:2013/04/05(金) 10:48:57.50
2013: A 2ch odyssey
295デフォルトの名無しさん:2013/04/05(金) 22:41:37.37
規格?
規格と実装をごっちゃにしてないか
296デフォルトの名無しさん:2013/04/05(金) 22:57:30.45
バカはほっとけよ
297デフォルトの名無しさん:2013/04/07(日) 11:26:10.01
列挙型enumについて質問です。
// 向き
enum MUKI {EAST,SOUTH,WEST,NORTH}は実質MUKI {0,1,2,3}とのことですが、
MUKUI muki_states;

muki_states = 1;みたいな演算って可能でしょうか?
298デフォルトの名無しさん:2013/04/07(日) 11:30:35.32
>>297
なんでやってみないの?
これからの人生、そういうスタンスで生きていくつもりなの?
299デフォルトの名無しさん:2013/04/07(日) 11:31:41.46
言語が書いてないし、代入は演算じゃないし、自分で試さないのはなんで
300デフォルトの名無しさん:2013/04/07(日) 11:32:53.21
人間の屑ばっかりのスレで役に立たねぇなぁ
キャストすりゃいいんだな、調べたら分かったわ
お前らは用済み
301デフォルトの名無しさん:2013/04/07(日) 11:34:36.27
Yahoo知恵袋で聞いて来いよ
やさしく教えてくれんだろ
302デフォルトの名無しさん:2013/04/07(日) 11:35:32.23
>>300
これからの人生、そういうスタンスで生きていくつもりなの?
303デフォルトの名無しさん:2013/04/07(日) 11:58:37.57
enumで列挙宣言しておきながら敢えて整数値を代入する、その意図(理由)に興味があるな
304デフォルトの名無しさん:2013/04/07(日) 12:08:01.91
調べてわかるなら最初からそうしろと

ま、釣り針だろうけど
305デフォルトの名無しさん:2013/04/07(日) 12:13:02.75
>>303
ファイルから
306デフォルトの名無しさん:2013/04/07(日) 12:33:07.31
>>305
なるほど
ファイルにはコード化されたMUKIデータが入っていてそれを読み込むんだね
読み込んだ後に
int muki_states;
if(muki_states==1)
より
MUKI muki_states;
if(muki_states==SOUTH)
のほうが分かりやすかろうと
なるほど、なるほど。ありがとう
307デフォルトの名無しさん:2013/04/07(日) 12:50:13.41
ファイルから読み込むと普通は文字列になるんだけど、一旦intに変換してさらにenumにするの?
308デフォルトの名無しさん:2013/04/07(日) 13:00:08.05
>>307
> ファイルから読み込むと普通は文字列になるんだけど、
それは作り方次第(というか読み方次第?)。たとえばfscanfという関数があってだな…
309デフォルトの名無しさん:2013/04/07(日) 13:14:02.33
>>308
いきなりfscanfしちゃうの?
データの妥当性何かのチェックとかしない派?
310デフォルトの名無しさん:2013/04/07(日) 13:29:36.19
>>308
おいおい
文字列として読み込んで、妥当性チェックした後に変換だろ
sscanfでもstrtolでもいいが、俺はあまりsscanf の優位性を感じない
311デフォルトの名無しさん:2013/04/07(日) 13:30:44.71
現在の議論の本質と無関係なポイントで揚げ足をとりたければ勝手にどうぞ。
312デフォルトの名無しさん:2013/04/07(日) 13:37:30.53
揚げ足というのは誰のどの点なんだ?
313デフォルトの名無しさん:2013/04/07(日) 14:52:15.04
ファイルから読み込むと普通は文字列になるんだけど、…
ファイルから読み込むとき、普通は(まずは)文字列として読み込むんだけど、…

前と後では質問した人の知識背景がちがうよね
314デフォルトの名無しさん:2013/04/07(日) 15:55:15.73
というのが揚げ足取り
315デフォルトの名無しさん:2013/04/07(日) 15:57:04.51
まぁ質問していた無能はいなくなったからもういいんじゃね
316デフォルトの名無しさん:2013/04/07(日) 16:15:07.76
>>313
fwrite,freadは場合によっては使うけど、まさかfscanfするなんて想像もしなかったからね
317デフォルトの名無しさん:2013/04/07(日) 16:26:29.01
iostreamの拡張?てどうやるんですか?なんのためにやるんですか?
318デフォルトの名無しさん:2013/04/07(日) 16:31:37.06
>>316
まぁ「ファイルから読み込むと文字列になるw」という誤解をとくための例ならべつにいいんじゃん?
319デフォルトの名無しさん:2013/04/07(日) 16:32:09.04
#define EAST 0
#define SOUTH 1
...
にして
int muki_states としとけば muki_states=1 も muki_states=SOUTH も(*^ー゚)b

これじゃダメなん?て聞こうとしたけど、PCに戻ってみたら、すでに祭りは終わっていましたとさ (゜Д゜) メデタシ メデタシ
320デフォルトの名無しさん:2013/04/07(日) 17:40:14.63
>>318
いや…
それの例にfscanfなんて出すから、余計におかしくなっていると言う話じゃね?
321デフォルトの名無しさん:2013/04/07(日) 17:42:41.42
fscanf が読み込むのは紛れもない文字列だと言う事に気付いて無いんじゃないかな。
322デフォルトの名無しさん:2013/04/07(日) 18:10:01.67
%dで読み取ってint変数に入れた値も文字列というのか?
323デフォルトの名無しさん:2013/04/07(日) 18:33:19.84
>>322
それなら直接enum変数に読めばいいよね。
態々int変数経由するまでもなく。
324デフォルトの名無しさん:2013/04/07(日) 18:42:45.38
>>322
ファイルには文字列で書いてあるだろう?
325デフォルトの名無しさん:2013/04/07(日) 18:54:43.25
>>323
> それなら直接enum変数に読めばいいよね。
いや、だからさ。
intでもenumでもfloatでもいいんだよ。ファイルから読み込むと文字列になる、と考えてる人に対して
文字列型以外で読み込むこともできるよ、ていう例なんだろうから。

>>324
>ファイルには文字列で書いてあるだろう?
お前は帰っていいよw
326307,309:2013/04/07(日) 19:07:47.47
>>325
君が言ってるのは多分俺のことだろうけど、俺も別にファイルを読むと必ず文字列になるなんて思ってないし、俺の他にも誰もそんな人いないから、見えない敵と戦う必要ないよ。

俺はただ単に、ファイルからデータを読み込む文脈で、int経由でenum変数に代入するなんてシチュエーションないだろって思っただけだから。
327デフォルトの名無しさん:2013/04/07(日) 19:14:30.06
あのぉ… 皆さん オレの書き込み(319)はスルーですか… そうですか… (ノД`)
328デフォルトの名無しさん:2013/04/07(日) 19:17:31.15
329デフォルトの名無しさん:2013/04/07(日) 19:23:18.49
以下、無限ループ
330307,309:2013/04/07(日) 19:23:35.06
>>328
ん?
その>>307が俺なんだけど。
331デフォルトの名無しさん:2013/04/07(日) 19:32:31.80
一体何人が参加した議論だったんだろうな
カオスになっててワロタ
332デフォルトの名無しさん:2013/04/07(日) 19:33:30.66
誰か >>327 を構ってやれよ
333デフォルトの名無しさん:2013/04/07(日) 19:37:05.97
>>331
自演っぽいのもいるからユニーク・ビジター数は案外少ないかもな
334デフォルトの名無しさん:2013/04/07(日) 19:38:35.44
fscanf()するとか言っちゃった奴が暴れただけ
335デフォルトの名無しさん:2013/04/07(日) 19:45:34.91
>>330
> >>328
> ん?
> その>>307が俺なんだけど。
だから自分が >>307 で書いた文章を深呼吸して落ち着いてからよく読め って意味じゃないの?
ファイルから読み込むと文字列になるって自分で書いてんじゃんw
336デフォルトの名無しさん:2013/04/07(日) 19:48:45.90
>>335
落ち着いて読むも何も、俺がファイルを読んだら必ず文字列になるなんて思ってないから、見えない敵と戦わなくていいんだよってことで。
337デフォルトの名無しさん:2013/04/07(日) 20:02:35.02
コンピューター言語をいじくる前に先に日本語の読み書きを勉強した方がいろいろと捗るとおもうぞ
ま、これが落としどころ、ということで

327はタイミングが悪かったね〜 これに懲りずに、またいらっしゃい
338デフォルトの名無しさん:2013/04/07(日) 20:07:43.07
見苦しいわ。
339デフォルトの名無しさん:2013/04/07(日) 20:19:22.86
匿名性の面白さが出たカオスっぷりだったね。
まぁ、楽しめたんじゃないの?
340デフォルトの名無しさん:2013/04/07(日) 20:42:46.81
さっきから一生懸命に終わらそうとしている奴はなんなの
341デフォルトの名無しさん:2013/04/07(日) 20:47:04.53
>>340
> さっきから一生懸命に終わらそうとしている奴はなんなの
自分に不利な議論の流れだから。当然しょっw
342デフォルトの名無しさん:2013/04/07(日) 20:54:51.19
端から見てると、どいつが終わらせようとしているかもわからんぞ
343デフォルトの名無しさん:2013/04/08(月) 00:13:52.32
面白そうな流れだったのにリアルタイムで参加できなくて残念ですw

>>319
#defineのアイデア
ソースの可読性という点においては大差なさそうだけど、
enum型には規定された値以外の使用(代入等)をコンパイル時にチェックできる、という利点がありますね。
なのでenumのほうが多少はメリットがあるんじゃないでしょうか。
(ご本人抜きにして部外者がプログラムの仕様を語っても仕方ないですが)

>>336
> 落ち着いて読むも何も、俺がファイルを読んだら必ず文字列になるなんて思ってないから、
最初に、ファイルから読み込むと普通は文字列になる、って自分で書いてますよねw
物忘れが激しいタイプ?揮発性メモリ?
荒れた原因を作った真犯人が、見えない敵と戦わなくていい、とか、ほとんど人事不省ですかねw
その上にデータの妥当性チェックに話をすり替えるから、ますます流れがおかしくなったんですね。
344デフォルトの名無しさん:2013/04/08(月) 00:24:12.46
>>343
普通は文字列になるということは、文字列にならない場合もあるということ。
妥当性チェックの話は、それがfscanfを使ってはいけない理由だから。内容が保証されているバイナリデータをfreadで読み込む場合以外では、普通は文字列として読み込んで、パーズしてバリデーションだよね。
345デフォルトの名無しさん:2013/04/08(月) 12:28:50.28
テキストはダメでバイナリなら中身が保証されてる(キリッ って決めつけちゃってるところが… ま、その何というか… ええ、アレ、ですわ
346デフォルトの名無しさん:2013/04/08(月) 12:46:56.71
>>345
バイナリなら中身が保証されているなんて言ってないよ。
内容が保証されているバイナリデータなら、freadで読む場合もあるって書いてるでしょ。

それにテキストが駄目なんて書いてないし。
テキストファイルをfscanfで読むのが駄目だって書いてるだけだし。

ちゃんと読んでくれよ。
347デフォルトの名無しさん:2013/04/08(月) 13:13:45.51
テキストファイルをfscanfで読むのがダメなんてことはない
348デフォルトの名無しさん:2013/04/08(月) 13:32:19.85
内容が保証されているバイナリファイルをfreadしていいなら
内容が保証されているテキストファイルもfscanfしていいよね
349デフォルトの名無しさん:2013/04/08(月) 13:46:44.00
これで最後。

fscanf()は、scanf()とよく似た致命的な欠陥があって、「完全に正しい」とは限らないテキストファイルの読み込みには向いてないの。
で、普通はどうするかというと、1行毎あるいはファイル全体を文字列として読み込んで、parseしてvalidationしてから変数に保存する。
それが安全なやり方。
350229:2013/04/08(月) 13:55:01.80
freadにも致命的な欠陥があって、
「完全に正しい」とは限らないバイナリファイルの読み込みには向いてないな。
351デフォルトの名無しさん:2013/04/08(月) 13:57:23.32
>>350
man freadして、向いてるか向いてないか自分で考えろ
352デフォルトの名無しさん:2013/04/08(月) 14:18:42.30
意味の無いやり取りはもうやめてくれよ。
353デフォルトの名無しさん:2013/04/08(月) 16:57:55.85
object->~object()で好きなタイミングでクラスのデストラクタを呼び出せることは知っているのですが…
Destroy(object);
みたいな感じでデストラクタを好きなタイミングで呼び出す関数を定義することってできますか?
既に上記のような関数が存在してればその関数でも構わないのですが…。
354デフォルトの名無しさん:2013/04/08(月) 16:59:56.84
すみません…質問の仕方が悪かったですorz
一旦スルーしてください…。
355デフォルトの名無しさん:2013/04/08(月) 17:08:09.16
delete this;
356デフォルトの名無しさん:2013/04/08(月) 19:39:17.35
delete c++;
357デフォルトの名無しさん:2013/04/09(火) 12:57:44.03
16ビトのサイズとか具体的に決まってる場合多いじゃないですか。ハイルの形式って。
そういうハイルを読み書きするときには決まったサイズを保存する型って
どうしたらいいですか。
358デフォルトの名無しさん:2013/04/09(火) 13:18:51.53
16ビトてきまてるなら、16ビトの変数をよういすればいいじゃないかな
359デフォルトの名無しさん:2013/04/09(火) 13:23:51.24
>>357
short [], usort [], int16_t []など
360デフォルトの名無しさん:2013/04/09(火) 14:54:43.50
>>359
ありがとうございまする。
後ろについているカッコはなんですか?
shortはintより短いことを保証するに過ぎませんよね。
int16_tが正解ですか?
さようならば。
361デフォルトの名無しさん:2013/04/09(火) 15:10:03.19
>>360
[]は配列。
複数の連続した16ビットのデータを読み書きすると思って配列にしただけなので、そうでなければ無視してくれ。
362デフォルトの名無しさん:2013/04/09(火) 20:07:16.23
int16_tってどう定義されているの?
363デフォルトの名無しさん:2013/04/09(火) 21:10:54.11
typedef select<sizeof(int) == 2, int,
select<sizeof(char) == 2, char,
select<sizeof(short) == 2, short,
select<sizeof(long) == 2, long, void>::type>::type>::type>::type int16_t;
364デフォルトの名無しさん:2013/04/09(火) 23:22:07.17
LONG_MAX >= 2^31-1 じゃなかったっけ?
365デフォルトの名無しさん:2013/04/25(木) 11:44:49.76
unsigned
366デフォルトの名無しさん:2013/04/25(木) 21:23:08.85
unsigned float
unsigned double
367デフォルトの名無しさん:2013/04/26(金) 07:32:57.44
そしてこのように話が進むと、めんどくなって「じゃーint使うのやめてshortでいいわ」って
ことにしてしまいたくなる
368デフォルトの名無しさん:2013/04/26(金) 23:18:17.12
>>364
CHAR_BITが16かもしれない
369デフォルトの名無しさん:2013/04/26(金) 23:19:18.65
しかしこれはint16_tの定義だからその場合は==1か!
脊髄反射はダメだなやっぱ
370デフォルトの名無しさん:2013/04/27(土) 00:28:17.14
まあ sizeof(T)*CHAR_BIT==16 のようにビット数で比較したとしても
>>363 じゃ不十分なんだけどね
371デフォルトの名無しさん:2013/04/27(土) 00:31:14.22
もう環境依存の予約語でいいよ
372デフォルトの名無しさん:2013/04/28(日) 14:18:43.57
Cからポータビリティを捨てたらゴミしか残らん
373デフォルトの名無しさん:2013/04/29(月) 20:36:55.45
ヘッダファイルとインクルード関係の使い方がよく分かりません。
cppに関数を継ぎ足すたびにhを編集して・・・とやっていけばいいのでしょうか。ものすごく間違えそうで危ない気がするのですが。
374デフォルトの名無しさん:2013/04/29(月) 20:53:01.03
外に公開するものはヘッダに書く
はずかしいところはcppに書く
375デフォルトの名無しさん:2013/04/30(火) 16:42:32.78
>>373
間違えるとコンパイラが教えてくれるから危ないことなど全くない
376デフォルトの名無しさん:2013/05/01(水) 15:19:32.18
>>373
.hは目次、.cppは本文と思えば分かりやすいんじゃないかな。

先に.hを書いて、.cppは後で書く。
377デフォルトの名無しさん:2013/05/01(水) 17:42:53.36
逆に.cppから書く俺みたいなのもいるがね
テストまでやってから公開って考え方
378デフォルトの名無しさん:2013/05/01(水) 18:27:09.99
公開する .h は、設計段階で決定するから、
.cpp に合わせて .h を編集ってことはあまり無いなあ
379デフォルトの名無しさん:2013/05/03(金) 02:07:25.68
いろいろ決めてから書く人はヘッダから、具体的に処理書いてって肉付けしてく人はソースから
書くんじゃない?
380デフォルトの名無しさん:2013/05/03(金) 02:49:05.09
いきなりコード書きだすのは良くない。
趣味のプログラムなら勝手だが。
381デフォルトの名無しさん:2013/05/03(金) 03:12:26.67
お前らビルドはいつするんだよ
ビルドすること無しに.cppを書き続けるのか?
382デフォルトの名無しさん:2013/05/03(金) 11:11:56.22
慣れてくるとビルドはたまにしかしないな
週一とか
383デフォルトの名無しさん:2013/05/04(土) 00:23:49.31
コード書くの遅すぎ
384デフォルトの名無しさん:2013/05/04(土) 00:54:43.09
最近はビルドが早いからな。
ビルドエラーや実行時エラーに頼ったコーディングスタイル、
設計や机上デバッグを軽視している輩が増えているような
気がする。
385デフォルトの名無しさん:2013/05/04(土) 01:21:39.53
開発中は、基本今変更したファイルのみコンパイル対象になるから
もうずっと前からビルド時間なんて気にならなかったが
386デフォルトの名無しさん:2013/05/04(土) 02:29:02.20
組み込みで特に小さいチップだと、EEPROM書き換え回数に制限があって
もったいないので無闇にビルド→書き換えをしないよう設計と机上デバッグを煮詰める。
387デフォルトの名無しさん:2013/05/05(日) 08:19:06.89
>>386
組み込みのこと全然知らないんだけど、書き込みせずにテストは出来ないの?
388デフォルトの名無しさん:2013/05/05(日) 08:27:21.10
フラッシュメモリも内容の保持保証が約10年だとは割りと知られてないようだな
SDカードに入れたデジカメの画像は大切ならBD-REに焼いとけよ
389デフォルトの名無しさん:2013/05/05(日) 13:18:27.53
ROMと言えば。。。 (  ̄ー ̄)y-~~
「ROMだってランダムアクセスできるんだから、そういう意味ではRAMじゃないの?」
とのたまう、素直で内気な少年でした… 今から○十年前の話です。
390デフォルトの名無しさん:2013/05/05(日) 14:48:55.02
>>389
その頃から既に屁理屈っぽい萌芽が育ち始めていたんだろうね
391デフォルトの名無しさん:2013/05/05(日) 15:46:17.91
>>387
環境によるんじゃね?
だからこそ、環境がどうであろうが実施できる机上デバッグなんだと思う
392デフォルトの名無しさん:2013/05/05(日) 18:33:04.84
>>387
ICEで確認してからだな
393デフォルトの名無しさん:2013/05/05(日) 23:17:52.35
>>389
律儀に RWM とか書いてたな…
394デフォルトの名無しさん:2013/05/06(月) 08:49:38.73
390は技術屋には向かないな
395デフォルトの名無しさん:2013/05/06(月) 09:07:35.97
>>394
あら傷ついちゃったの?www
396デフォルトの名無しさん:2013/05/07(火) 11:07:39.34
>>393
> >>389
> 律儀に RWM とか書いてたな…
初めて知ったけど、これってなんて読むの?リウォム?リワォム?
397デフォルトの名無しさん:2013/05/07(火) 23:19:37.70
記憶があやふやだけど、素直に「アールダブルエム」とか言ってたような気がする。
「ロム」みたいな言い方ができなかったのも、流行らなかった理由かも。
398396:2013/05/08(水) 00:18:54.08
>>397
たしかに、こりゃ一文字ずつ読むしかないですよねw レス、ありがとう!
なんとなく WORM (Write Once, Read Many)を思い出すなぁ。。。
399デフォルトの名無しさん:2013/05/08(水) 19:27:35.78
名前のみが重要な#defineは全部enumでまとめた法が良いの?
400デフォルトの名無しさん:2013/05/08(水) 19:57:58.15
ちょっとなにいっているかわかんない
401デフォルトの名無しさん:2013/05/08(水) 20:15:36.49
つまりだな
識別子(?)として「RED」「GREEN」「BLUE」を使いたい。割り当てられる値はどうでもいいって時に
#define RED 1
#define GREEN 2
#define BLUE 3
とするより、
enum color { RED , GREEN , BLUE };
した方がいいか、って質問だろ?
答えはYES。
使い方によるがenumなら値の妥当性チェックをしてくれるから。
402401:2013/05/08(水) 20:22:02.07
しまった!揚げ足とられる前に訂正しておくわ
#define RED 0
#define GREEN 1
#define BLUE 2
に差し替えてくれ
403デフォルトの名無しさん:2013/05/08(水) 20:42:55.65
差し替えの意図がわからん。
404デフォルトの名無しさん:2013/05/08(水) 21:23:07.53
>>401
それよりもスコープの問題の方がでかいね
405399:2013/05/08(水) 21:45:52.70
>>401
ありがと
そう言いたかった

#defineは全部enumに直すよ
406デフォルトの名無しさん:2013/05/09(木) 00:09:03.32
> enumなら値の妥当性チェックをしてくれる
どういうこと?
407デフォルトの名無しさん:2013/05/09(木) 00:14:48.90
typedefしたときの話だろ
408デフォルトの名無しさん:2013/05/09(木) 01:16:31.80
typedefにそんな機能ないだろ
409デフォルトの名無しさん:2013/05/09(木) 01:20:39.03
>>408 馬鹿か
typedef enum{...} E;
void f(E e){}

f(10); // compile error
410デフォルトの名無しさん:2013/05/09(木) 02:07:27.30
enum E{...}
void f(enum E e){}

でいいじゃんtypedef関係ないよね
そもそもCではエラーにならないし
C++でエラーになるのは「値の妥当性チェック」じゃなくて単純に型によるもの
411デフォルトの名無しさん:2013/05/09(木) 12:10:36.05
enumのあとになんで名前をつける必要があるの?
この名前使うの?
412デフォルトの名無しさん:2013/05/09(木) 12:16:53.28
>>411
他の人間にコードの説明するときに使う
413デフォルトの名無しさん:2013/05/09(木) 12:42:29.22
グループ名
414デフォルトの名無しさん:2013/05/09(木) 15:43:11.89
>>411
> enumのあとになんで名前をつける必要があるの?
> この名前使うの?
列挙型の定義と変数宣言を別に行う際に使える。
※この名前をタグ名と呼ぶよ。

enum ScreenColor {RED, GREEN, BLUE};
enum ScreenColor color;

定義と変数宣言を同時に行うなら省略可能だよ。

enum {RED, GREEN, BLUE} color;

ちなみに別途、
enum PrintColor {CYAN, MAGENTA, YELLOW, KEYPLATE};
という定義があっても
color = CYAN;
と代入するコーディングミスはチェックできる。
ScreenColor型変数のcolorにCYANは有効じゃないから。
415デフォルトの名無しさん:2013/05/09(木) 20:03:04.58
スレチらしいのでこちらに来ました

playsound関数についてなんですが、
プログラム起動時に.wav形式のものを再生したいのです。
リソースからひっぱってきて再生する形にしたいのですが、
どうもうまくいきません。playsound関数など調べても
いまいち自分がやりたいのと大きく違って、あまり参考にはなりませんでした
そして、ON/OFFを切り替えることができるボタンなども、自分なりに探しましたが
探すのが下手らしくあまり参考にはならなかったです。
もしよろしければ、サンプルソースコードを書いていただけると嬉しいです。
もしくは、上記のヒントや方法などを教えて下さい。
(C++でフォームを使用するものです)
416片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/09(木) 20:20:23.96
//PlaySound.c
#include <windows.h>
int main(void){
PlaySound("SOUND1", GetModuleHandle(NULL), SND_SYNC|SND_RESOURCE);
return 0;
}

//PlaySound.rc
SOUND1 WAVE "sound1.wav"
417片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/09(木) 21:08:48.87
SND_RESOURCEを付けるのがポイント。
GetModuleHandle(NULL)の代わりにWinMainのhInstanceを使ってもいい。
418デフォルトの名無しさん:2013/05/09(木) 21:21:46.92
>>416
>>417さん

すいません、先に言うのを忘れていましたが、私初心者に近いので
ソースコードの詳細利用方法があまりわかりませんでした。
すいません。
また別のスレに移動します。

ソースコード、情報提供 誠に感謝します。
419片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/09(木) 21:51:34.07
そんなに難しい話じゃないよ。
<windows.h>をインクルードしておき、PlaySound APIを呼べば音が鳴る。フォームを使ってる場合でも同じ。
420デフォルトの名無しさん:2013/05/09(木) 22:39:22.99
プログラム板 自治スレッド Part6
http://toro.2ch.net/test/read.cgi/tech/1368020285/

強制IDの導入議論を行っています。
421デフォルトの名無しさん:2013/05/09(木) 23:01:43.67
クラスのメンバ変数をconstにしたい場合
staticにしないと初期化出来ませんか?
422デフォルトの名無しさん:2013/05/09(木) 23:11:09.99
は?
423デフォルトの名無しさん:2013/05/09(木) 23:19:48.04
>>421 コンストラクタ
424デフォルトの名無しさん:2013/05/09(木) 23:24:04.06
C++とは言ってないが
425デフォルトの名無しさん:2013/05/09(木) 23:47:07.72
>>421
メンバ初期化子

でもあまりconstメンバ変数は使わない
426デフォルトの名無しさん:2013/05/12(日) 03:37:57.97
グローバル変数は危険だと聞いて、ローカル変数のみでゲームプログラムを組む練習をしたいのですが、スコープ外に出る時に変数は消えてしまいますよね。
どうすればいいんでしょうか。
427デフォルトの名無しさん:2013/05/12(日) 03:51:35.25
>>426
スコープ外、例えば関数を読んだ先で使いたければ、
呼び元で必要な変数群を構造体で用意しそのポインタを渡す
428デフォルトの名無しさん:2013/05/12(日) 11:02:05.68
××は危険だと聞いてそれに向き合わず逃げるようでは
Cなんぞ使うべきではない

なぜならC言語そのものが危険だから

・・・あれ、Cの話だっけ?
429デフォルトの名無しさん:2013/05/12(日) 11:05:26.57
グローバル変数と聞いただけで火がついたように襲い掛かってくる連中がいるから
そういう意味では確かに危険
430デフォルトの名無しさん:2013/05/12(日) 14:02:12.02
>>424
グローバル変数とローカル変数と動的確保は適材適所。
どれがよくてどれが悪いという話ではない。
一般論としてグローバル変数は少ないほどいいというだけ。
431デフォルトの名無しさん:2013/05/12(日) 20:50:58.76
>>429
ほかにもGOTOを諸悪の根源とする原理主義者たちとかw いそうだねぇ
432デフォルトの名無しさん:2013/05/12(日) 22:05:23.47
gotoはだめだろ
433デフォルトの名無しさん:2013/05/12(日) 22:12:25.89
んなことはない
434デフォルトの名無しさん:2013/05/12(日) 22:29:48.04
C言語初心者です。

#include <stdio.h>
int main(void){
int water = 198;
int milk = 138;
double tax = 1.05;
int pay = 1000;
int change;

printf("%d", pay- (int)(tax * (water + milk * 2)));
return 0;
}

これは汚いプログラムですか?
友人に聞いたら、先に宣言をまとめてしてしまったほうがいいと言われたのですが、よくわかりません。
回答よろしくお願いします。
435デフォルトの名無しさん:2013/05/12(日) 22:56:26.09
なんか自己解決したような気がします。

これだと見ただけでは何がしたいのか分かりづらいというか分からないですね。
全部宣言し、各商品の値段を出し、何を答えとして出すっていう分かりやすい順序を
作ったほうがいいということなんでしょうか。
一応自分で改善案をつくってみました。

#include <stdio.h>
int main(void){
int water,milk,pay,sum,change;
double tax;

water = 198;
milk = 138;
pay = 1000;
tax = 1.05;

sum = (int)((water + milk * 2)* tax);
change = pay - sum;

printf("%d",change);
}
どちらが理想に近いプログラムですか?
436デフォルトの名無しさん:2013/05/12(日) 23:50:40.44
>>432
例えば多重ループの中から抜けたいとき

for() {
 for() {
  for() {
   〜
   if() goto LoopExit;
  }
 }
}
LoopExit:

gotoなしで書くとフラグと複数breakの組み合わせになると思うが
それよりもいっきにジャンプしたほうがシンプルで分かりやすくないだろうか?
「goto=悪」を金科玉条とするんじゃなくて、
要するに使い方(プログラマの思想?)次第じゃない?
437デフォルトの名無しさん:2013/05/13(月) 01:29:19.43
>>435
考え方による。正解はない。
とにかく冗長でも分かりやすい記述を好む派と、簡潔で少ない行数であることを好む派がいる。
ちなみに前者の書き方は関数型言語に近いから前者の思考で書きたければそっちも勉強した方がいいかもしれん。
その書き方専用の定石というのも存在する。
438デフォルトの名無しさん:2013/05/13(月) 01:41:02.33
>>435
最初にまとめて宣言するのはC89的な古くさいプログラムで、C++ではナシだな
「変数が初期化されていない」期間は
できるだけ短い方がバグが入りにくい

例外的なものは全体的に使い回す変数かな
その場合は初めて使う時に宣言すると、
その処理をやっぱ2番目に置こうと思った時に不便
439デフォルトの名無しさん:2013/05/13(月) 01:42:00.54
>>436
基本的にそういう場合は関数に分けた方がいい
で、returnで抜ける
ただ、gotoの方がいい場合もあるので100%関数にした方がいいとは言わない
440デフォルトの名無しさん:2013/05/13(月) 07:49:01.60
>>436
そのための大域脱出=try-catch-throw ですよと
441デフォルトの名無しさん:2013/05/13(月) 08:20:07.67
正常系で例外使うのはgotoと変わらない
442デフォルトの名無しさん:2013/05/13(月) 08:58:33.12
goto否定の発端ってほぼ全部gotoで書いちゃうような輩のせいだろ。
チョコチョコ使う分にはむしろ直感的で読みやすいソースになる。
443デフォルトの名無しさん:2013/05/13(月) 09:00:54.86
>>439
> >>436
> 基本的にそういう場合は関数に分けた方がいい

syori();

---------

void syori()
{
for() {
 for() {
  for() {
   〜
   if() return;
  }
 }
}
return;
}

動くだろうけど、これが基本とは思わないな
関数コールのオーバーヘッドと引き替えにどういう利点がある?
444デフォルトの名無しさん:2013/05/13(月) 09:15:05.12
むしろループそのものをiteratorやvisitor使って抽象化する
445デフォルトの名無しさん:2013/05/13(月) 09:18:43.44
おっ 構造化プログラミングの話か? 
#今の若い人は知らないだろうな
I/OやASCIIでPascalが流行った時期があったよ
オヤジの懐古趣味w すまんね
http://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0#goto.E8.AB.96.E4.BA.89
446デフォルトの名無しさん:2013/05/13(月) 12:28:33.47
goto      を使わない馬鹿 そればかり使う馬鹿
グローバル変数 を使わない馬鹿 そればかり使う馬鹿
C言語      を使わない馬鹿 そればかり使う馬鹿
447デフォルトの名無しさん:2013/05/13(月) 16:03:01.09
>>444
やりすぎはコードの見通しを悪くする
448デフォルトの名無しさん:2013/05/13(月) 19:03:55.82
>C言語      を使わない馬鹿 そればかり使う馬鹿
仕事上、Cを使わざるを得ない、とか、(ほかの言語を使うから)Cを使う必要がない、って人もいるかもよw
449デフォルトの名無しさん:2013/05/13(月) 20:48:14.04
実際の開発でGOTOなんか使うの?
450デフォルトの名無しさん:2013/05/13(月) 20:49:50.99
>>443
ループがそれほどあるだけで
普通は結構な行数だろ

短いなら別にgotoでもいいけど、
大抵は関数に分けた方がいい場合が多い
451デフォルトの名無しさん:2013/05/13(月) 21:17:07.88
独りよがりな考えを普遍的事実のように書く輩って自分では意識してない(できない)んだろうな (´・ω・`)
452デフォルトの名無しさん:2013/05/14(火) 01:04:04.68
>>450
環境によっては、無駄な関数コールを減らすことを考えざるを得ないこともある。
RAMが256byteしかないとか
453デフォルトの名無しさん:2013/05/14(火) 07:38:22.89
そんなならもうアセンブラ使えよ
454デフォルトの名無しさん:2013/05/14(火) 07:49:50.52
多少goto使ってでも、Cだとアセンブラと比べて作業効率が桁違いなのだ
455デフォルトの名無しさん:2013/05/14(火) 08:04:22.16
do〜while(0)でbreakしてるのをみると、
素直にgoto使ったんでいいんじゃないかと思う時はある
456デフォルトの名無しさん:2013/05/14(火) 09:23:01.15
ただ、goto嫌いな人が無理に使うことはないよ
スキルの低いうちは封印した方がいい
457デフォルトの名無しさん:2013/05/14(火) 09:48:17.25
俺ならbreakフラグを使う
458デフォルトの名無しさん:2013/05/14(火) 11:17:16.54
全てのループはgotoで置き換えられる
459デフォルトの名無しさん:2013/05/14(火) 12:02:47.58
gotoとifで置き換えられる

すべてのプログラムは、連接、分岐、繰り返し、の三要素で必ず表現できるんだっけ?
えーっと なんの定理だっけ?

まぁ論理的に可能というだけで、
必ずしも見通しのよいコードになるとは限らないと思うけど
460デフォルトの名無しさん:2013/05/14(火) 12:09:15.58
フラグをいくつも使って多重ループから脱出するよりは
gotoを使ったほうが見通しが良くなる場合もある
461デフォルトの名無しさん:2013/05/14(火) 12:46:34.88
// フラグをいくつも使って多重ループから脱出するよりは
// gotoを使ったほうが見通しが良くなる場合もあるので

というコメントを残しておけば、引き継いで保守する人も納得する。
納得されなかったらム板かマ板のコメントスレにあげられる。
462デフォルトの名無しさん:2013/05/14(火) 13:45:57.58
>>461
そんなコメントいらんわ
463デフォルトの名無しさん:2013/05/14(火) 20:15:39.40
ラベル名にBREAKを含めてるね
464デフォルトの名無しさん:2013/05/14(火) 20:30:38.47
むかしから...
goto肯定派は、何でもかんでもgotoでやりたい、と主張している「わけではない」のに
goto否定派は、gotoなんか不要だ、使う必要は全くない、という主張になっていることが多そうな気がする
この温度差はいったい何なんだろうって思うよ
465デフォルトの名無しさん:2013/05/14(火) 20:52:04.14
break が「一つ上のレベルに脱出する」という機能でしかないからではないか?
ラベル付き break であれば温度差は解消される

ラベル付きbreak‥‥‥これって goto?
466デフォルトの名無しさん:2013/05/14(火) 21:01:15.75
redoはgotoでなければ実現できない
467デフォルトの名無しさん:2013/05/14(火) 21:56:56.61
条件脱出用に関数内で1つだけの脱出ラベルに対するgotoなら
個人的には容認かな。setjmp / longjmpのほうがいやらしい。
468デフォルトの名無しさん:2013/05/15(水) 00:53:45.95
前後を見ないとgotoによりすっ飛ばされている区間を見落としてしまうという恐れ
goto-free で縛ればそんなことを「一切」気にしなくて済む
469デフォルトの名無しさん:2013/05/15(水) 08:03:16.94
ラベルで検索すればいいだけだから、いろんなところで
使われてそうなbreakよりもしかして見落としにくいんじゃね?
470デフォルトの名無しさん:2013/05/15(水) 08:25:36.96
gotoは便利なんだよ。
ただ、馬鹿に使わせるととんでもないことになるから信用できない奴には使わせたくないってだけで。
471デフォルトの名無しさん:2013/05/15(水) 09:13:50.45
C++の規格書って日本語版はないの?
472デフォルトの名無しさん:2013/05/15(水) 09:26:40.57
JIS X3014(C++03)がある
C++11はまだ

ただし他のいらない規格票もたくさん入っていて分厚い本の一部
1万前後だったかなあ
473デフォルトの名無しさん:2013/05/18(土) 14:13:52.83
FindFirstFileでヒットしたファイルの、タイムスタンプを取得するために、
WIN32_FIND_DATA構造体にセットされる値を読みに行っていますが、セットされる値は
キャッシュされるようでして、頻繁にファイルのタイムスタンプが更新される場合には
使えません。FindFirstFileでヒットしたファイル名を用いて、stat 関数なども使ってみましたが
状況は同じでした。このキャッシュをクリアする方法を教えてください。
Windows7上で動く、ネイティブコードのコンソールアプリです。
よろしくお願いします。
(マネージコードですと、Refresh()というメソッドが使えるようなのですが・・・)
474デフォルトの名無しさん:2013/05/18(土) 14:16:23.12
上記への追加です。
デバッグビルドしました場合は、キャッシュされず、毎回最新のタイムスタンプが
取得できるのですが、リリースビルドしました場合にはキャッシュされた値しか
取得できないという状況です。
475デフォルトの名無しさん:2013/05/18(土) 14:18:33.68
GetFileTime
476デフォルトの名無しさん:2013/05/18(土) 14:30:27.28
477474:2013/05/19(日) 21:12:18.74
>>475-476

情報ありがとうございました。キャッシュされているようだと断言して
いましたが、結局私の環境ではキャッシュが原因ではなく、FindFirstFileの
誤動作(仕様?)が原因でした。

FindFirstFileで検索するファイルが置かれているパスは、かなり深い階層の
フォルダにありまして、検索用の文字列としてとても長い文字数のものを
指定していました(恐らくMAX_PATH数を超える文字数)。その結果、ヒットした
ファイルそのもののタイムスタンプではなく、そのファイルが置かれているフォルダの
タイムスタンプがWIN32_FIND_DATA構造体にセットされていました。
教えて頂いたGetFileTimeでも、引数にファイル自体のパス名を与えているのに
フォルダのタイムスタンプが取得されました。
(ただし、デバッグビルドした場合はヒットしたファイル自体のタイムスタンプが
とれていました)
478474:2013/05/19(日) 21:12:58.95
そこでためしに、ファイルを置くフォルダをもっと浅い階層にして、検索用の
文字列ももっと短くて済むようにしてみました。その結果、きちんと検索で
ヒットしたファイル自体の最新のタイムスタンプがセットされるようになりました。
(デバッグビルド、リリースビルド双方とも)

MAX_PATH数を超える文字数を引数に与えていたと思いますので、FindFirstFile
の使い方の間違いだとは思いますが、それではデバッグビルドしても同様の動きを
してくれれば、それこそもっと早くデバッグできたと思いますのに、デバッグビルドした
やつを使ったら、かえってデバッグの障害になったという顛末でした。
479デフォルトの名無しさん:2013/05/22(水) 21:49:37.28
シングルトンの重要性を教えてほしい
普通にstaticとどう違うの?
480デフォルトの名無しさん:2013/05/22(水) 21:53:52.38
最初に取得する時までコンストラクタが動かない
ただのstaticメンバ変数だと、複数のシングルトン間の初期化の順番が仕様で未規定
481デフォルトの名無しさん:2013/05/22(水) 22:02:00.08
>>479
シングルトンのが響きがかっこいい
482デフォルトの名無しさん:2013/05/22(水) 22:04:59.46
複数のシングルトン間のじゃないわ
複数のstaticメンバ変数間の、だわ

シングルトンだと初期化順は取得した順
相互に使うようなものでも、コンストラクタでお互いを使わない限りは問題ない
483デフォルトの名無しさん:2013/05/22(水) 22:48:46.32
シングル + クルトン
484デフォルトの名無しさん:2013/05/23(木) 22:29:09.40
CやC++って
Microsoftが作ったの?
485デフォルトの名無しさん:2013/05/23(木) 22:30:56.40
ちょっとは検索してみようとか思わないのかね。
486片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/23(木) 22:58:12.25
「C言語 作った人」「C++ 作った人」で検索
487デフォルトの名無しさん:2013/05/23(木) 23:45:30.34
情報系学科の出身でもない限り、最近の若いエンジニアはカーニハンやリッチーの名前を知らないんだろうな…
リッチーは故人になってしまったし、J・マッカーシーも同時期に鬼籍に入ったんだっけ。
C・シャノンなんて歴史上の人物と思っていたけど21世紀になって他界したんだよなぁ。
488デフォルトの名無しさん:2013/05/24(金) 00:14:57.77
int i;
などで作った?定義した?変数には最初なんの数字が入っているのでしょうか?

#include<stdio.h>
int main(void){
int a;
printf("%d",a);
retrun 0;
}
を実行すると2883044という数字が出てきますが、この数字はなんなのでしょうか?
489デフォルトの名無しさん:2013/05/24(金) 00:21:13.80
環境にもよるが、
まあ大体の環境は変数の領域を確保した際に
たまたまそのメモリに残っていた値だな
490デフォルトの名無しさん:2013/05/24(金) 00:55:45.34
最初に何の数字が入っているか分からないからこそ何か仮の数を入れて初期化するという作法がある。
491デフォルトの名無しさん:2013/05/24(金) 01:58:57.01
>>488
変数を作る、というのは概念的な話で
実際はメモリのどっかの部分に名前を付けただけなんだよ。
だから、たまたまその部分にあった値が入ってる。

でもコード、コンパイラ、リンカ、システム共に同じなら
毎回別の値が出たりすることはあんまり無いと思う
コンパイラやリンカ、システムごとのメモリの扱い方の癖がそこに出てくる感じ
コードをちょっと弄ると別の値が出たりするからやっぱアテにしちゃダメだけどね
492デフォルトの名無しさん:2013/05/24(金) 07:10:17.09
>>491
このプログラムなら別の値が出る事は少ないだろうけど
現実的なプログラムだと大抵別の値が出るぞ
493デフォルトの名無しさん:2013/05/24(金) 07:47:40.32
>>492
そうか…現実的なプログラムだとまず試さないからな…
494デフォルトの名無しさん:2013/05/24(金) 09:49:49.31
JIS X3014が見られん(*1)ので記憶違いならすまんが
外部変数とstatic変数は初期値ゼロが保証されていて
それ以外の場合は不定じゃなかったっけ?
ちなみにauto変数は記憶域がスタック上に割り当てられるんで
そこのゴミが入ってくるような気がします。

(*1)
JISCでオンラインで規格書を閲覧しようとしたらAcrobatのバージョンを更新しろとポップアップが。
すでに最新バージョンにしとるのにどうしろと? (`へ´)凸
495484:2013/05/24(金) 12:06:48.09
C言語を作った人はデニスリッチーって分かったけど
結局、C言語の権利はどこが持ってるの?
496デフォルトの名無しさん:2013/05/24(金) 12:37:11.01
言語の権利は誰も持ってないけど
ランタイムライブラリの権利は各実装者が持ってる
497デフォルトの名無しさん:2013/05/24(金) 14:18:50.93
>>495
権利って著作権のことか?
あるプログラム言語で書かれたプログラムは著作権の対象になるが
プログラム言語自体が著作権対象になるかは知らん
小出しに質問してるけどいったい何が聞きたいの?
498デフォルトの名無しさん:2013/05/24(金) 15:20:55.58
商標権かね
まあまず何を聞きたいか具体的にしないといかんな
499デフォルトの名無しさん:2013/05/24(金) 17:59:12.76
>>497
言語自体もプログラムだろ
500デフォルトの名無しさん:2013/05/24(金) 18:04:58.05
>>499
言語仕様のことだろ
501デフォルトの名無しさん:2013/05/24(金) 18:55:13.59
C/C++のコンパイラとライブラリなどを自作したから、これを売って儲けたいとか、か?K&Rも知らない人間がありえねーー
502デフォルトの名無しさん:2013/05/24(金) 21:54:35.65
>>494
singletonの話なら、static変数は普通ポインタだよ。
503デフォルトの名無しさん:2013/05/25(土) 07:14:34.07
>>487
>J・マッカーシーも
10代の頃例の言語の卓越したアイディアに神をみた、というか20年たってこの歳になっても理解がまだまだおよばない可哀相な状態です。
>C・シャノンなんて歴史上の人物と思っていたけど21世紀になって他界したんだよなぁ。
ダイクストラも。
504デフォルトの名無しさん:2013/05/25(土) 15:42:23.56
LISPって、AIが流行った頃にもてはやされていたから
わりと近年の言語かと思っていたけど、2番目に古い高級言語だったとは (゜Д゜)ポカーン

コンピュータサイエンスが20世紀中頃から勃興した学問だから
その頃に活躍された先生や技術者が、最近になって亡くなるのは
淋しいけど歴史の流れだよね… (ノД`)
505495:2013/05/25(土) 16:12:52.40
C言語の権利をどこも持っていないってどういうこと?
JavaだったらSunMicrosystemsだと思うけど
C言語は本当にどこにもないの?
506デフォルトの名無しさん:2013/05/25(土) 17:21:30.44
むしろ Javaがおかしい
507デフォルトの名無しさん:2013/05/25(土) 17:32:11.01
Sunはもうないけどそれは置いておいて...
プログラミング言語の言語仕様を指して権利うんぬん、と言ってるのなら著作権の概念はないらしい。
http://oshiete.goo.ne.jp/qa/7862358.html
仮にもし、誰かが権利を主張するとしたら、リッチーの在籍していたベル研になると思う。
ところでなんでC言語の権利を気にしているの?
508デフォルトの名無しさん:2013/05/25(土) 21:17:51.74
>>505
まず「C言語の権利」が何を指してるか明確にしろってば
著作権じゃないんだろ?
509デフォルトの名無しさん:2013/05/25(土) 21:22:49.48
言語仕様は著作権ないけど、
Sunを買い取ったOracle様がJavaのAPI仕様自体(API仕様書や実装ではない)に
権利主張してたよね。Androidの仕様を訴えてたあれ。
そんなもは認められないはずだけど、まだ完全には解決していないはず。
510デフォルトの名無しさん:2013/05/25(土) 23:15:51.03
「 Java APIは著作権保護対象ではない 」
http://sourceforge.jp/magazine/12/06/03/2329238
511デフォルトの名無しさん:2013/05/25(土) 23:25:45.79
あれは権利ゴロの嫌がらせだろ
512デフォルトの名無しさん:2013/05/26(日) 01:27:23.09
プログラミング言語は工業規格(ネジ穴の大きさとか形とか)みたいなもんで、それそのものに権利を主張したりする性質のものじゃないよ。
強いて言えば規格を策定してるANSIのものとも言えるけど、それでも実装は個々のコンパイラ任せだし。
結局、C言語のコンパイラにはそれぞれ作者がいて権利を有してるけど、C言語そのものを持っている人は存在しない、ということになる。
513デフォルトの名無しさん:2013/05/26(日) 02:20:12.14
基本情報やITパスポートで勉強するだろ

・言語仕様に著作権はない
・アルゴリズムに著作権はない
・コードに著作権は有る
・ドキュメントに著作権は有る

apiの仕様そのものに対する著作権はわからんが
apiのインターフェイスを記述したコードがあるならそのapiには著作権が発生する
当然第三者が勝手に利用したらアウト
514デフォルトの名無しさん:2013/05/26(日) 07:55:09.87
>>513
GIF はアルゴリズム特許で問題が勃発したよね
515デフォルトの名無しさん:2013/05/26(日) 08:14:19.13
著作権や特許という概念が、まず邪悪なんだよ
足し算や、足し算の記述に誰かの物なんて権利はあるか?ないだろ
それが当たり前なんだよ数学も物理もすべて神様が創造して、人間に与えたものだ
人間が新たに発明したから独占しようなどと考えるのはおこがましい
すべての知識は平等に誰からも利用されるものだ
足し算が独占できないように、少し複雑化しただけの他の知識も独占なんかしてはならないんだよ
516デフォルトの名無しさん:2013/05/26(日) 08:24:55.92
うわぁ…
事実と理想が混同されてる
517デフォルトの名無しさん:2013/05/26(日) 08:35:31.08
現実など糞食らえだ
518デフォルトの名無しさん:2013/05/26(日) 09:35:47.06
R・ストールマンに傾倒されている方ですか?
519デフォルトの名無しさん:2013/05/26(日) 10:19:18.66
ちなみに GIF の読み方は 「自負」 であって 「岐阜」 に非ず
520デフォルトの名無しさん:2013/05/26(日) 10:23:44.96
俺は、コードが著作権で保護されて、ソフト会社がプログラムを売って金儲けするのに文句は言わないが
ソフトに欠陥があってもメーカーとして免責されるという状況には疑問だな
*PL法でカヴァーできないならソフトウェア専用の法律を整備すべきだ
メーカーとして権利(著作権)を主張するなら、メーカーとしての義務(責任)も果たせよ、と言いたい
521デフォルトの名無しさん:2013/05/26(日) 10:37:56.38
すべてがFREEな世界に
522デフォルトの名無しさん:2013/05/26(日) 11:05:58.71
すべてがFREE FREEな世界に
523デフォルトの名無しさん:2013/05/26(日) 20:23:49.75
結局、彼の質問の意図は何だったんだろう
Cの参考書でも書くつもりなんかな
プログラミング言語の権利を気にする、その理由に興味があるな。 煽りじゃなくて、さ
524デフォルトの名無しさん:2013/05/26(日) 20:53:55.71
うざいわ
525デフォルトの名無しさん:2013/05/26(日) 21:18:54.86
法学部の学生かなんかで、ソフトウェアがらみの知財権か何かについて調べてたんじゃん?Dリッチーの名前すら知らなかったし。
526デフォルトの名無しさん:2013/05/26(日) 22:07:46.59
>>525
俺も法学部だったけどあの訊き方じゃそれは無い。
法学部で重視するのは「誰か」じゃなく「どんな権利か」だし、C言語だけにこだわる理由もない。
527デフォルトの名無しさん:2013/05/26(日) 22:47:07.32
>>526
> C言語だけにこだわる理由もない。
C以外のの言語には 【こだわってない】 という証拠は?
528デフォルトの名無しさん:2013/05/26(日) 23:28:59.15
>>527
他の言語スレをひと通り見てきて同じ質問がされていたかを見てくれは済むんじゃない?
別に俺の言いたいことはそこじゃないからこだわっていようがいなかろうがどうでもいいけど。
529デフォルトの名無しさん:2013/05/26(日) 23:40:56.62
他の言語スレを見てないのに言ってやんのwww 語るに落ちてるよw
530デフォルトの名無しさん:2013/05/26(日) 23:41:59.97
知的財産権のばあい、権利の種類および、
誰が権利を所有しているのか、も当然、重視される事柄だが. 本当に法学部?
531デフォルトの名無しさん:2013/05/27(月) 00:51:30.52
オマエらーー


もう許してやれ
532デフォルトの名無しさん:2013/05/27(月) 02:27:10.79
>>530
その「誰が」ってのはあくまで概念上の話であって、具体的にCがどうのJAVAがどうのって話はしないよ。
ましてや権利の種類すら明らかにせず訊くなんてことは有り得ない。
少なくとも法学部のやる法学なら100%そう。
533デフォルトの名無しさん:2013/05/27(月) 07:09:35.66
ここに書かれてることをできるだけ詳しく説明して欲しいです。
http://cansecwest.com/slides/2013/DEP-ASLR%20bypass%20without%20ROP-JIT.pdf
534デフォルトの名無しさん:2013/05/27(月) 11:31:54.68
C言語から派生した言語はいろいろあるけと
全てデニスリッチーが作ったの?
535デフォルトの名無しさん:2013/05/27(月) 11:44:37.94
デニスさんマジパネェッス
536デフォルトの名無しさん:2013/05/27(月) 11:45:44.56
ケントンプソン涙目
537デフォルトの名無しさん:2013/05/27(月) 12:06:56.53
デニスリッチーが作った言語のはCとC++のみ?
538デフォルトの名無しさん:2013/05/27(月) 12:08:59.06
C++はビョーンスポッスポッ
539デフォルトの名無しさん:2013/05/27(月) 12:32:26.06
デニスリッチーが作った言語は
C言語のみなの?
540デフォルトの名無しさん:2013/05/27(月) 13:05:50.03
>>536
ケントンプソンだってチューリング賞をもらってんだ なにも泣くことはあるまいw
541デフォルトの名無しさん:2013/05/27(月) 15:34:45.37
おちんぽミルク出ちゃいましゅ!
542デフォルトの名無しさん:2013/05/27(月) 19:50:01.48
BCPL -> B -> Cだな。
543デフォルトの名無しさん:2013/05/28(火) 00:40:08.35
>>542
Cの次は特に無し?
544デフォルトの名無しさん:2013/05/28(火) 01:33:38.81
C → C++ → C# → D
545デフォルトの名無しさん:2013/05/28(火) 01:34:26.57
Java
546デフォルトの名無しさん:2013/05/28(火) 12:28:00.68
Javaもデニスリッチーなの?
神じゃん
547デフォルトの名無しさん:2013/05/28(火) 12:51:48.43
カプセル化は望ましいといわれます。
すると実務ではメンバ変数なら全てカプセル化するもんなのでしょうか?
カプセル化はメンバ一つにつき2つアクセスのためのメソッド(読みと書き)を書く必要があり、めんどくさいんですが
548デフォルトの名無しさん:2013/05/28(火) 12:55:31.55
>>547
メンバ変数に煩雑にアクセスするんならクラスの設計を見なおした方がいいよ
読み書きするアクセサを付ける位ならクラスの意味ないじゃん
549デフォルトの名無しさん:2013/05/28(火) 13:00:27.44
>>547
やりたきゃやればいいと思うけど
550デフォルトの名無しさん:2013/05/28(火) 13:03:39.64
publicにしてもいいしな
でも後から泣くような気がする
551デフォルトの名無しさん:2013/05/28(火) 13:17:41.79
>>547
メンバ変数が public/private に綺麗に分かれているという前提で
public なメンバのみアクセッサを付けるというのがポピュラー
C#とか rubyとか専用の構文を持つ言語すらある

特に setter だけでも作っておくとデバッグがもの凄く楽になる
552デフォルトの名無しさん:2013/05/28(火) 13:24:05.91
アクセサってattr_accessorとか@propertyとか書いてパッと作れたりしないんですか?
553デフォルトの名無しさん:2013/05/28(火) 13:44:13.99
ないよ
ヘッダファイルにプロトタイプを書いて
ソースファイルに関数実体を書くのが男の流儀だよ

ヘッダに書いてインライン関数にしたりIDEの機能で追加したりするのも邪道
おれがゆるさない
554デフォルトの名無しさん:2013/05/28(火) 13:48:06.30
そもそも
そういう無駄な設計技法を取り入れて実行時パフォーマンスを犠牲にするやり方は
Cのお作法ではない

JavaなりC#なりに移るべき
555デフォルトの名無しさん:2013/05/28(火) 13:48:52.55
いやむしろDに(ry
556デフォルトの名無しさん:2013/05/28(火) 15:43:24.57
>>551
publicは自由にアクセスできるのになんでアクセッサを付ける必要があるの?
557デフォルトの名無しさん:2013/05/28(火) 15:58:18.38
C++ならではの汚い文法だけど、特定の関数やクラスだけにfriendとして
公開する方法もある

大抵はこれで行ける
558デフォルトの名無しさん:2013/05/28(火) 15:59:48.15
文法が汚いというか、設計が汚いね、それ
559デフォルトの名無しさん:2013/05/28(火) 16:03:23.54
friend は公開じゃなくて
1つのクラスをやむを得ず複数に分割せざるをえないような時に使うもの
560デフォルトの名無しさん:2013/05/28(火) 16:10:10.56
でもstd::ostresmやstd::istreamに渡す時はfriendにするしかないだろ?
561デフォルトの名無しさん:2013/05/28(火) 17:11:59.16
<<か。上の話とはあまり関係無い気がするが。
562デフォルトの名無しさん:2013/05/28(火) 19:27:32.23
まとめると
デニスリッチーが作って今使われてる言語は
C、C++、C#、Java
ってことでOK?
563デフォルトの名無しさん:2013/05/28(火) 20:08:09.40
>>562
> デニスリッチーが作って今使われてる言語は
> C、C++、C#、Java
> ってことでOK?
その文章だと、C++もC#もJavaも、リッチーが作ったという意味になる。そう理解してるの?
564デフォルトの名無しさん:2013/05/28(火) 20:34:21.59
人に聞くばっかりじゃなくて少しは検索しようぜ。
wikipediaとかもあるわけだし。
565デフォルトの名無しさん:2013/05/28(火) 21:04:31.20
そろそろ目的を白状しようぜ!!!
大勢の人間がレスしてんだから、質問の意図ぐらい開示してくれてもいいだろう
566デフォルトの名無しさん:2013/05/29(水) 01:14:52.48
白状しろとか怖い
567デフォルトの名無しさん:2013/05/29(水) 05:17:42.57
 
             /. : . : . : . : . : . : . : . : ヽ
           /. : . : . : . : . : . : _,. -┐. : :|        貴
            |. : 「`¨ ー-‐     j. : :!
          !. : 〉         〈. : :.│    目  様
           l. :ノ-―≧从r≦=― 、ヽ、 j
            「V     }丞{     }气rfミ     的  の
           Yハ.__ ,ノj ヾ、   ノ  jら}》
          ヾ    {〈  r }  ̄   Lハノ     は
         _   ⊥ _/ゾj__ ヽ      厂
       /       \辷_ヽ }l    入    何
     /              ヾ-く丿j  /  }\
      |             Y´  /   /   ヽ だ
      |   ,∠ ̄ ヽ     ├-ァく     /
      l   (廴 )/     l /  \
568デフォルトの名無しさん:2013/05/29(水) 09:57:39.16
オイオイ
あまりみんなで脅すと本人が萎縮しちゃって
言いたいことも言えなくなってしまうじゃないか! もっと優しく聞けよ!

ん? 怒らないからオジさんに言ってごらん
恥ずかしがること ないんだよ
ほら もうこんなに....
569デフォルトの名無しさん:2013/05/29(水) 11:10:11.92
だってとっくに本人いなくなってるし
570デフォルトの名無しさん:2013/05/29(水) 12:40:16.35
ポインタって動的になるの?
571デフォルトの名無しさん:2013/05/29(水) 13:04:01.82
ポインタによる無効なアドレスへの参照
>>1002
572デフォルトの名無しさん:2013/05/29(水) 13:05:02.14
ハイパーリンクつかないのか。チッ余計なことを
573デフォルトの名無しさん:2013/05/29(水) 13:20:17.12
例えばmallocで帰ってくるポインタ(アドレス)は動的に変わりうるが
静的なインスタンスに対するポインタならプログラムの実行を通して不変だろう
いまいち質問の意味がわからん
最近こんなのばっかり
574デフォルトの名無しさん:2013/05/29(水) 13:26:25.99
>>547
外部公開するクラスだけでいいよ
575デフォルトの名無しさん:2013/05/29(水) 23:31:45.98
ポインタってnewみたいに
動的って解釈で良いの?
576デフォルトの名無しさん:2013/05/29(水) 23:34:07.19
意味が分からない問いには答えられない
577デフォルトの名無しさん:2013/05/30(木) 15:35:51.03
ポインタ自体は静的だな
char *p;
free(&p);
なんてことしないだろ?
578デフォルトの名無しさん:2013/06/05(水) 02:33:43.75
SUCCEEDEDってif文の中の処理が正常に実行されたらif文実行ってことで良い?
579デフォルトの名無しさん:2013/06/05(水) 02:42:43.09
>>578
それはWindowsプログラミングにおけるSUCCEEDED()マクロのこと?
もしそうだとしたら、HRESULTで調べてみて
580デフォルトの名無しさん:2013/06/05(水) 10:40:53.54
>>578
自分がぷろぐらむを書くんじゃなくて読むだけならそう思っておいていい
581 ◆QZaw55cn4c :2013/06/05(水) 22:42:35.14
>>577
最近教えていただいたネタ http://codepad.org/ChgEkuVs
582デフォルトの名無しさん:2013/06/05(水) 23:18:33.26
何の関係があるのか分からん
583デフォルトの名無しさん:2013/06/06(木) 01:56:51.92
IOCCC的なネタだな。
584デフォルトの名無しさん:2013/06/08(土) 11:48:34.71
floatとdoubleの違いはなんですか?
mainの中のfloatの部分をdoubleにすると、変な値が表示されてしまうのですが
#include<stdio.h>

void dprint(double d){
printf("打率は%fです\n",d);
}

int main(void){
float sum;
printf("打率はいくつですか?\n");
scanf("%f",&sum);
dprint(sum);
return 0;
}
585デフォルトの名無しさん:2013/06/08(土) 11:53:20.43
1.0*10^38 ~ 1.0*10^-37
1.0*10^308 ~ 1.0*10^-307
586デフォルトの名無しさん:2013/06/08(土) 12:04:05.32
自己解決しました
scanfの中でdoubleで定義された文字を使う場合は%lfでないとだめなのですね
587デフォルトの名無しさん:2013/06/08(土) 18:26:25.13
@C++
1.テキストの先頭に追記したいです
2.テキストの先頭文字を削除したいです

・やりたいこと
test.txt aaa → bbbaaa
test.txt abc → bc

・あまりやりたくないこと
バッファに文字列を一度読み込んで,同じファイルに上書き再出力
588デフォルトの名無しさん:2013/06/08(土) 18:28:27.04
エラー耐性が高いのは、
別ファイルに出力して、元ファイルを消して、別ファイルをリネーム

エラー耐性不要なら
バッファに文字列を一度読み込んで、同じファイルに上書き再出力
589デフォルトの名無しさん:2013/06/08(土) 18:30:21.54
一度読み込むと言っても全部読み込む必要はなくて
適宜上書き出力すれば良い
上書きしてもまだ読んでない所には上書きされないので
590デフォルトの名無しさん:2013/06/08(土) 18:41:16.04
ありがとう
素直に読み込んどきます
591デフォルトの名無しさん:2013/06/08(土) 18:43:30.24
仕事ではやるなよ
592デフォルトの名無しさん:2013/06/08(土) 19:21:45.52
普通は元になるデータを保持しておいて
適宜最初から書き出すとは思う
593デフォルトの名無しさん:2013/06/10(月) 12:26:28.43
intのバイト数って環境によって変わるらしいけど
何が原因でかわるの?
594デフォルトの名無しさん:2013/06/10(月) 12:28:12.47
ハードウェアの都合で
595デフォルトの名無しさん:2013/06/10(月) 13:16:34.82
64bit版とか32bit版とか1度くらい聞いたことあるべ
596デフォルトの名無しさん:2013/06/10(月) 14:48:14.70
一応
short≧int≧long
ってなってるはずだけどな
597デフォルトの名無しさん:2013/06/10(月) 14:48:34.30
逆だろう
598596:2013/06/10(月) 14:52:18.76
あ、ほんとだ
599デフォルトの名無しさん:2013/06/10(月) 15:13:43.55
あと、intはそのマシンの自然な語長にする、という規定があったような… 俺の勘違いかな??
600デフォルトの名無しさん:2013/06/10(月) 18:14:56.62
8ビットCPU用Cのintは16ビットだった気がする
601デフォルトの名無しさん:2013/06/10(月) 18:55:53.44
さっそくの反例 ありがとうございます。 勘違い、失礼いたしました。
#CP/Mの時代か〜 俺の産まれる前だわ (←ウソ)
602デフォルトの名無しさん:2013/06/10(月) 19:35:52.77
いくらマシンが貧弱な時代でも
0-255 の範囲で整数型(キリッ などと考える馬鹿がいるものか
603デフォルトの名無しさん:2013/06/10(月) 19:54:56.73
>>599
合ってるんだけど、何をもって自然とみなすかは規定されてないんだよね
604デフォルトの名無しさん:2013/06/10(月) 20:00:48.95
多分、CPUの一番使用頻度の高いレジスタサイズで決めるんじゃない?
605デフォルトの名無しさん:2013/06/10(月) 20:01:06.71
>>600
そりゃ規格でintは16ビット以上が
要求されてるからな
606デフォルトの名無しさん:2013/06/10(月) 20:12:33.25
>>604
64bit機でもint=32bitが一般的
レジスタサイズなどあくまで目安にしかならない
607デフォルトの名無しさん:2013/06/10(月) 21:32:58.72
>>606
それは win32api のソースを全面刷新させないための、つごー
608デフォルトの名無しさん:2013/06/10(月) 22:13:11.67
ちょっと!なに言ってんのかわかんない
609デフォルトの名無しさん:2013/06/10(月) 22:14:06.93
なにがわからないのかがわからない
610デフォルトの名無しさん:2013/06/10(月) 22:45:50.89
gccだって32bitなのに
611デフォルトの名無しさん:2013/06/10(月) 22:54:29.40
糞プログラマーのレベルに合わせて
互換性を優先したってことだろ
文字通りの解釈しかできないアスペか
612デフォルトの名無しさん:2013/06/10(月) 23:26:37.27
>>607
x86 & Windows 以外の処理系もあるのに それは理由にならんだろ
613デフォルトの名無しさん:2013/06/10(月) 23:29:17.88
>>611
> 文字通りの解釈しかできないアスペか
お前はWindows以外を知らないアスペねw
614デフォルトの名無しさん:2013/06/11(火) 02:04:51.46
x64 なんて後ろ向きの妥協の局地で動かすんだから
互換性最優先なのは当然だろ
615デフォルトの名無しさん:2013/06/11(火) 02:59:42.21
char=1,short=2から4を飛ばしてint=8にするのはおさまりが悪い
short=4じゃ2が空くしな
616デフォルトの名無しさん:2013/06/11(火) 03:03:28.40
いっそ int2, int4, int8, int16 ってすればいいのに
将来 int3, int7が出てきても大丈夫w
617デフォルトの名無しさん:2013/06/11(火) 06:28:39.85
x64が64bitならx86は86bitじゃないの?なんで32bitなの?命名者馬鹿なの?
618デフォルトの名無しさん:2013/06/11(火) 06:59:53.50
単にCPUの名前から由来してるからしょうがない
Corei7とかもどこにも64なんてついてないだろ?
そういうことだ
619デフォルトの名無しさん:2013/06/11(火) 07:36:12.62
x86 は 80x86 の略だからな
620デフォルトの名無しさん:2013/06/11(火) 09:31:56.87
>>616
処理系独自の拡張は既にあるよ。たとえば
__int8、 __int16、 __int32、 __int64
621デフォルトの名無しさん:2013/06/11(火) 11:06:40.05
文句があるなら IA64 を捨てた奴らに言え
622デフォルトの名無しさん:2013/06/11(火) 11:09:30.51
>>616
>int3, int7ってなんだよ
もし作っても、メモリレイアウト上パディングされるだろ
623デフォルトの名無しさん:2013/06/11(火) 13:02:00.17
C99でint8_tとかint16_tとか追加されてるね
624デフォルトの名無しさん:2013/06/11(火) 18:33:51.41
>>623
それってオプションじゃなかった?
625デフォルトの名無しさん:2013/06/11(火) 18:41:47.56
least16みたいなのは必須でも
16丁度みたいのはオプションだね
626デフォルトの名無しさん:2013/06/11(火) 19:52:40.91
>>616
7bitレジスタのCPUは昔存在したはず
627デフォルトの名無しさん:2013/06/11(火) 19:56:05.32
CHAR_BITは8以上だから・・・
というかそのレスはバイト数の話だし
628デフォルトの名無しさん:2013/06/11(火) 19:56:50.41
intの違いはOSの32bit64bitだけなの?
629デフォルトの名無しさん:2013/06/11(火) 20:01:48.67
間違えた

intのビット数が変わる要因はOSの32bit64bitだけなの?
630デフォルトの名無しさん:2013/06/11(火) 20:03:57.71
神様の気分次第
631デフォルトの名無しさん:2013/06/11(火) 20:06:27.19
>>629
コンパイラーを作る人の気分による。
コンパイラーは開発プログラム動作する環境の
オペレーティングシステムを強く意識している。
632デフォルトの名無しさん:2013/06/11(火) 21:18:50.23
むかしDECのマシンでアプリを作ってた。
VAXからAlphaにマイグレーションしたんで、intが64bitなるか、と調べてみたら32bitだった。多分コンパチのためだろうけど。
intが64bitの処理系ってあんのかな。
PA-RISCやSPARCマシンは使ったことないけど、どうだったんだろう?
633デフォルトの名無しさん:2013/06/11(火) 21:31:46.73
ILP64は一応あるにはある
634デフォルトの名無しさん:2013/06/12(水) 19:53:44.00
任意ビットのintが宣言でき、ビットフィールドのごとく配列にして使えるようになると便利かな
CPUの制約は、この際無視w
635デフォルトの名無しさん:2013/06/12(水) 19:59:13.93
使いどころが無いと思う
636デフォルトの名無しさん:2013/06/12(水) 20:09:08.24
operator 駆使して自分で実装すればいい
637デフォルトの名無しさん:2013/06/12(水) 22:01:50.22
#pragmaのいくつかをもうちょっと標準にしてくれるとか。
#pragma onceとか#pragma pack()とか。
あとendian関係とか。
638デフォルトの名無しさん:2013/06/13(木) 01:58:59.16
>#pragma pack()
プリプロセッサーの仕事から逸脱してるし
そもそも同等のことは既に標準化されてる
>あとendian関係
ちょっと意味わかんない
639デフォルトの名無しさん:2013/06/13(木) 07:38:27.60
bswapは欲しい
640デフォルトの名無しさん:2013/06/26(水) 17:40:14.75
>>602
TL/1
641デフォルトの名無しさん:2013/06/26(水) 19:54:58.99
TL/1wwww

昔のPC板かよ
642デフォルトの名無しさん:2013/06/26(水) 19:55:57.39
そういやGAME/86ってのもあったな
記号だらけの言語
まあBASICの予約語を記号に置き換えただけなんだけど
643デフォルトの名無しさん:2013/06/26(水) 22:34:11.77
月刊ASCII読者のOB会はココですか?
ナノピコのコンピュータ世界の最前線が面白かった
644 ◆QZaw55cn4c :2013/06/27(木) 11:11:16.09
それよりbitのナノピコ教室がー
645デフォルトの名無しさん:2013/06/27(木) 12:18:08.50
当時のCPUには当然FPUなんかなかったから浮動小数点演算は全部手書きだぞ
あれで相当勉強になった

これはアセンブラスレで書いた方がいいな
646デフォルトの名無しさん:2013/06/27(木) 15:27:03.45
8087買う金がなかったんじゃないの? (* ̄ー ̄)y-~~~
647デフォルトの名無しさん:2013/06/27(木) 17:04:12.92
要りもしないところに小数演算は甘え
648デフォルトの名無しさん:2013/06/27(木) 17:52:27.79
んーー 645はアセンブリ言語を使ってたんかな?
MS-Cのばあい、FP演算には、87用、87がなくてもソフトで完全エミュレート、演算精度より速度優先、
みたいに幾つかライブラリを用意してたとおもう。
当時は(コスト的に)マシンにFPUがついてないのが当たり前だったからなぁ (遠い目…)
649デフォルトの名無しさん:2013/06/27(木) 23:22:30.54
8bit CPU の話だろう

そういや、FACCとかいってたねえ > ROM
ふぁっく!
650デフォルトの名無しさん:2013/06/28(金) 02:25:15.79
>>646
8087馬鹿みたいに高かっただろ
しかも遅いし
あれで大学の研究室でマンデルブロ集合の絵描いたんだぞ
FPUとは思えないほどの遅さだった

>>648
ソフトウェアエミュレーションの場合FPUの全ての命令をエミュレート
してるわけじゃないんだよな
C言語で使う物だけ最低限入ってた
651デフォルトの名無しさん:2013/07/30(火) NY:AN:NY.AN
coutの出力時に precisionで指定した桁数より下の桁は四捨五入されますが
四捨五入ではなく切り捨てで出力する方法はないでしょうか?
double second = 59.9999999999997;
cout.precision(8);
cout << second <<endl;
で 60 ではなく 59.999999と表示されて欲しいです。
(std::scientificではなく std::fixed で表示したいです。)
お分かりの方がいらっしゃいましたらご教授いただけますと
大変ありがたいです。何とぞよろしくお願いいたします。
652デフォルトの名無しさん:2013/07/31(水) NY:AN:NY.AN
>>651
stringstreamに一桁精度高く流し込んで一文字削ったら?
653デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
>>651-652
stringstreamは流し込んだ時点でどうしても四捨五入されてしまうな

double src = 59.9999999999997;
src *= std::pow(10.0, 8);
dst = std::floor(src);
dst = dst * std::pow(10.0, -8);

std::cout << std::setprecision(10) << dst << std::endl;

結局これしかうまく行かなかった
654デフォルトの名無しさん:2013/09/08(日) 00:20:32.77
保守
655デフォルトの名無しさん:2013/09/26(木) 01:52:08.25
レス・ハンコックの「C言語入門 改訂第3版」という少し古い本はどうですか?
使ったことある方がありましたら感想お願いします
656デフォルトの名無しさん:2013/09/28(土) 20:28:28.73
揚げ物
657デフォルトの名無しさん:2013/10/10(木) 22:31:55.02
Wikiの引数の項目で
「C言語のように明示的にアドレス演算子を使うものは参照渡しとは呼ばない」
って書いてあるけど、巷のC言語本ではこれを「参照渡し」って解説してない?
まぁWikiとしては「ポインタ渡し」と言いたいところだろうが、この機構の本質的な部分において
両者は同じ原理で動作するんだから、「参照渡しではない」と言い切るのは違和感があるな。
実際、Wikiの解説が今の時代は正しいのだろうか?
658デフォルトの名無しさん:2013/10/10(木) 22:48:42.58
>>657
プログラミング言語を限定しない汎用的学術的な定義と、
各言語の専門用語や方言として使われる定義が一致しない…
…って事でも良い気がするのだけど。

Cのポインタは参照渡しとしても利用できるし、「ポインタと言う値」として扱う事も可能である。
参照渡しとして利用する限りは参照渡しだ.が、言語実装的にはポインタ形の値渡しである。

どう見なして扱うか。言語のパラダイムとかってのはそういうモンだよな。
オブジェクト指向の設計をアセンブリ言語で実装とかも可能なのだし。
659デフォルトの名無しさん:2013/10/10(木) 23:38:54.64
K&Rでは参照渡しじゃないって書いてあった気もするけど
たぶん今の規格にそんな記述はないだろうな
660デフォルトの名無しさん:2013/10/11(金) 00:28:11.18
>>657
C++ に参照渡しがある以上,C のあれは参照渡しじゃないだろう.
wikipedia の「参照渡しではない」と言い切る,あるいは「Cは参照渡しCallByReferenceを持たない」と言い切るのが正確無比といえよう.
661デフォルトの名無しさん:2013/10/11(金) 09:49:20.88
なるほどね!すごく納得。
言語仕様として用意されてるのは値渡しだけで
プログラマが引数にポインタ演算子を使ってアドレスを突っ込むことで 『プログラマが』 参照渡しのコードを書いてる…と言える。
配列だって仮引数で*宣言するのはプログラマだしね。
俺の理解が間違っていたのか… orz
662デフォルトの名無しさん:2013/10/11(金) 16:27:52.16
>>661
まぁ、今間違いに気付き正しく理解したのだから、一生間違ったままでいるよりよかったじゃん。
663デフォルトの名無しさん:2013/10/11(金) 16:39:23.08
プログラム書くのには関係なさげ
664デフォルトの名無しさん:2013/10/12(土) 16:40:18.70
フォームアプリケーションでの質問だけど、
テキストボックス(名前:textBox1とする)を配置すると、
textBox1->Text
でString型の文字列がとれるんだけど、これをatoiしたいがためにchar型に変換しようとして、
atoi(textBox1->Text->c_str());
って書くと、
「c_strはSystem::Stringのメンバではありません」って表示される。
c_strってメンバじゃないの?
665デフォルトの名無しさん:2013/10/12(土) 16:45:22.72
メンバじゃないから続きはC++/CLIのスレできけ
666デフォルトの名無しさん:2013/10/12(土) 19:01:21.07
six six six
667デフォルトの名無しさん:2013/10/13(日) 03:40:19.13
>>664
c_str()はstd::string(標準C++ライブラリの文字列クラス)のメンバ。
System::Stringは標準C++ライブラリではない、別のライブラリのクラスで、そこにc_str()は無いのだろう。
668デフォルトの名無しさん:2013/10/13(日) 14:19:34.42
C++でゲームを作っているのですが
ゲーム本編のクラスに細かい機能のクラスを追加したかった場合
どのように追加したクラスを本編クラスにくっつけるものなのですか?
本編クラスのメンバーでそのクラスを生成すれば良いのですか?
669デフォルトの名無しさん:2013/10/13(日) 14:21:37.85
委譲で
670デフォルトの名無しさん:2013/10/13(日) 15:57:42.99
委譲も一つの有効な手だけどもデリゲートコードを自動生成する機能がC++にはないので
(多重)継承を使ったミックスイン手法を使う
多重継承は基本さえ押さえていればJava陣営が喧伝するほど危険なものではない
671デフォルトの名無しさん:2013/10/13(日) 21:26:05.35
いや、多重継承は普通に危険だろ。
一瞬一瞬は便利だけど後になればなるほど肝心な部分の変更が難しくなっていくし。
ゲーム開発はソフトウェアの中でも特にコア部分をいじりまくる分野なんだから多重継承を推奨すべきではないと思うよ。
移譲で解決を図るべきだと思う。
672402:2013/10/14(月) 00:42:24.97
>>671
その点で委譲と継承に違いなんてないだろ
ミックインされるクラスがちゃんと設計されていれば
protectedメンバはあってはならない
673デフォルトの名無しさん:2013/10/14(月) 00:43:32.93
名前欄の402は消し忘れです
674デフォルトの名無しさん:2013/10/14(月) 08:30:21.93
>>670
まあ、gotoみたいなもんだと思う。
使う範囲を絞らないとグチャグチャになってしまう。
だからJavaなんかはgotoと同じく禁止にして
代替機能としてinterfaceを用意したんだろうね
…出来ればmixinも用意して欲しかったけれど
675デフォルトの名無しさん:2013/10/17(木) 19:17:34.62
質問です

構造体のメンバ?の値渡しって処理に時間がかかりますか?

構造体自体を値渡しすると処理が遅くなるのはわかりますが、
メンバの値渡しも同じぐらい処理が遅くなるのでしょうか?

構造体を使うときは、基本的に値渡しは行わないものなのでしょうか

よろしくお願いします
676デフォルトの名無しさん:2013/10/17(木) 19:24:30.94
>>675
補足します
現在販売されている一般的な家庭用パソコンでの処理速度の話です
構造体の多きさは2キロバイト程度です
677デフォルトの名無しさん:2013/10/17(木) 19:34:41.72
処理時間よりスタックオーバーフローが怖い
678デフォルトの名無しさん:2013/10/17(木) 21:33:15.23
スタックオーバーフローでぐぐったら
どうすべきなのか判りました。ありがとうございます
679デフォルトの名無しさん:2013/10/18(金) 00:49:09.60
いや構造体のメンバの型次第だろ
680デフォルトの名無しさん:2013/10/18(金) 06:57:28.27
構造体のメンバでググったらわかりました
681デフォルトの名無しさん:2013/10/18(金) 17:11:11.92
アドレス渡しとけよ
682デフォルトの名無しさん:2013/10/18(金) 22:30:24.31
値渡し自体は全然問題ないが、
2kはさすがに大きすぎるからポインタのがいいだろ
683デフォルトの名無しさん:2013/10/19(土) 15:31:59.30
渡すのは構造体じゃなくて、そのメンバだろ?
684デフォルトの名無しさん:2013/10/19(土) 15:40:27.39
構造体全体の大きさは2k Byteだけど、渡したいメンバのサイズが4 Byteだったりしてな
685デフォルトの名無しさん:2013/10/19(土) 17:45:48.57
どうしても分からない問題が発生したので教えて下さい。

static関数を定義してるんですけど、何故かクラスファイルでエラーが発生します。
'static' can only be specified inside the class definition
と言うメッセージが出ます。

クラス内の宣言↓
static bool
Util::isEmpty(Tizen::Base::String* str) {

if (str == null || str->IsEmpty()) {

return true;
}

return false;
}

ヘッダーファイルです↓
class Util {
public:
Util();
virtual ~Util();

static bool isEmpty(Tizen::Base::String* str);
};

よろしくお願い致します。
686デフォルトの名無しさん:2013/10/19(土) 18:01:43.29
定義にstaticはいらん
687デフォルトの名無しさん:2013/10/20(日) 04:50:29.33
>>686
コンパイルできました!
初歩的な質問に答えて頂きありがとうございました!(´・ω・`)
688デフォルトの名無しさん:2013/10/20(日) 17:00:59.12
人生は初めてなのですが、どうしたらいいですか?
689デフォルトの名無しさん:2013/10/20(日) 21:35:13.08
力抜けよ
690デフォルトの名無しさん:2013/10/20(日) 21:50:33.72
深呼吸して
691デフォルトの名無しさん:2013/10/21(月) 11:44:32.29
うまくいかないな〜と感じたら、迷わずシャットダウン&リブート
692デフォルトの名無しさん:2013/10/21(月) 14:42:13.09
>>691
Idle状態で放置していたら何も仕事を受け付けなくなりました
一度シャットダウンしたほうがいいですか?
693デフォルトの名無しさん:2013/10/21(月) 16:35:46.76
その時にはリブートしても同じ現象が出るだけなので、パッチを当てるなり、ソフトをアップグレードするなり、抜本対策が必要でしょう。
694デフォルトの名無しさん:2013/10/21(月) 17:30:06.08
シャットダウン&リブートって
リブートにシャットダウン含まれてるんじゃ
695デフォルトの名無しさん:2013/10/22(火) 12:07:29.47
>>694
マジレスすると、(正常な)シャットダウンを含まないリブート(例えば、電源断やハードリセット、システムクラッシュetc後の再起動)もあるよ。
wikiの再起動の項を参照してみんさい。
696デフォルトの名無しさん:2013/10/23(水) 15:19:42.21
http://ideone.com/GhzHfX

↑クラスのメンバ関数に関数ポインタや関数リファレンスを使うにはどうしたらいいんですか?
697デフォルトの名無しさん:2013/10/23(水) 17:37:50.41
auto f = std::bind(&Foo::func, &foo);
f();
698デフォルトの名無しさん:2013/10/23(水) 17:58:41.32
699デフォルトの名無しさん:2013/10/23(水) 18:40:35.54
そういえば、vtableをディスパッチテーブルとみなして、
積極的に書き換える時、きれいに書けなくて困ったことがある
vtableのサイズ、各メソッドの位置を、、
できればVCで
700デフォルトの名無しさん:2013/10/23(水) 18:51:49.27
なんなんだそのモヤモヤしたレスは
質問ならはっきり疑問形で書け
701デフォルトの名無しさん:2013/10/23(水) 19:39:47.70
>>697-698
d
void (&rfunc)() = func; のほうは出来ないの?ポインタだけ?
702デフォルトの名無しさん:2013/10/23(水) 19:41:44.71
無理に決まってんだろ常識的に考えて
703デフォルトの名無しさん:2013/10/23(水) 20:04:57.65
>>702
d
エイリアスみたいに違う名前で呼び出したりとかは出来んのか残念
704デフォルトの名無しさん:2013/10/25(金) 04:07:16.54
http://sourceforge.jp/pastebin/655

これのエラーの原因が分かりません
705デフォルトの名無しさん:2013/10/25(金) 04:27:42.44
>>704
テンプレートはコンパイル時に解決できる必要があるから、
ヘッダに中身も書いてやらないと駄目
もしくは特殊化してやる必要がある
706デフォルトの名無しさん:2013/10/25(金) 04:34:25.43
>>704
コンパイル時に定義が見えている必要がある
707704:2013/10/25(金) 05:03:55.97
>>705-706
d
つまりテンプレートで定義したクラスも関数もヘッダに全部書く必要があるってことですね
便利そうであまり便利じゃないんですねテンプレートって・・・
708デフォルトの名無しさん:2013/10/25(金) 05:10:08.08
その程度のことでテンプレートの利便性が否定できるか
709704:2013/10/25(金) 05:38:16.70
テンプレートって何でもつっこめる汎用な関数や汎用なクラスを作れるものだと勝手に勘違いしてました
テンプレートって読んで字のごとくでコンパイラにとってのテンプレートって意味だったんですね
Value<int>やValue<long>が使われてたらコンパイラがint専用やlong専用のをテンプレートに従って再定義し直してたんですね
710デフォルトの名無しさん:2013/10/25(金) 08:36:23.14
プリプロセッサマクロが生まれ変わったようなもの
711デフォルトの名無しさん:2013/10/25(金) 13:31:02.42
すまん、>>705は用語を間違えてる。特殊化はオーバーロードみたいなやつのことだったな

「明示的な実体化」とかになるのかな?
cppに書いたのを定義するために、ヘッダで型をいれて宣言しておく必要がある
712デフォルトの名無しさん:2013/10/27(日) 15:42:38.84
もう全てのコードをヘッダだけに書いてcppはコンパイル単位を分割するだけにしてOK
713デフォルトの名無しさん:2013/10/27(日) 15:45:26.64
コンパイルエラー
定義が重複しています
714デフォルトの名無しさん:2013/10/27(日) 15:46:22.28
リンクエラー
定義が見つかりません
715デフォルトの名無しさん:2013/10/27(日) 15:47:53.92
for文やwhile文などでくりかえし処理をすると,繰り返しの回数が99回目までは問題ないのですが
必ず100回目で「sqrt domain error」が必ず出ます。
数値を色々変えてみても必ず起きます.
sqrt domain errorはルートの中身が負のときでるエラーだと思うのですが
それ以外に出る原因はありますか?
716デフォルトの名無しさん:2013/10/27(日) 16:19:53.51
>>715
infとかnanとか
sqrtに渡してるのを調べればすぐに分かるだろ
717デフォルトの名無しさん:2013/10/27(日) 16:33:21.72
>>715
マルチ
718デフォルトの名無しさん:2013/10/27(日) 20:14:55.49
高速道路が無料化するって本当ですか?
719デフォルトの名無しさん:2013/10/31(木) 17:26:23.25
クラスの配列を返却する関数を作りたいんですが、どうすればよいですか?

関数内でクラス型のダブルポインタを作って、必要な要素数の配列ポインタをnewする。
さらに配列の要素ごとにnewして、そのポインタを返す。
これであっていますか?

関数内でnewしたら変数の寿命はどうなるんですかね?
初歩的な質問ですいません...

イメージとしては
Hoge** getHogeArr() {

Hoge** ppHoge = new Hoge*[100];
for (int i = 0; i < 100; i++) {

ppHoge[i] = new Hoge();
}

return ppHoge;
}
720デフォルトの名無しさん:2013/10/31(木) 17:32:36.27
コンテナ使え
721デフォルトの名無しさん:2013/10/31(木) 20:28:37.56
ありがトン。引数にArrayListのポインタを渡す事にします。
722デフォルトの名無しさん:2013/11/03(日) 01:23:46.76
ArrayList?JavaかC#と勘違いしてるんじゃないのか

http://ideone.com/kxiZ3U

コンテナ+スマポで一挙に解決
723デフォルトの名無しさん:2013/11/14(木) 20:20:38.45
(1) //clog << ...;
(2) a.out 2>/dev/null

速いのは?
724デフォルトの名無しさん:2013/11/14(木) 21:07:18.94
ループ回して試せ
725デフォルトの名無しさん:2013/11/16(土) 19:54:08.64
参照変数について教えてください。

ポインタにnewした領域を参照変数に渡します。
参照変数が破棄されると、newしたポンタはどうなります?
そのまま残りますか?

また、参照変数で指したポインタを明示的に破棄することは可能ですか?

イメージとしてはこんな感じです

参照変数 = *(newしたポインタ)
delete 参照変数;
726デフォルトの名無しさん:2013/11/16(土) 19:57:02.26
残るに決まってんだろアホか
727デフォルトの名無しさん:2013/11/16(土) 19:58:55.44
日本語で頼む

char *str1, *str2;

str1 = new;
str2 = str1;
delete str2;

これならdelete str1と同じ
728デフォルトの名無しさん:2013/11/16(土) 21:01:15.85
delete 参照変数;じゃなくてdelete &参照変数;じゃね
729デフォルトの名無しさん:2013/11/17(日) 00:34:41.67
shared_ptrで包んどけ
数が少ないうちはいいけど、多くなるととても自分では管理しきれなくなる
730デフォルトの名無しさん:2013/11/17(日) 02:08:52.76
コンテナを全て乱数で初期化する、最も良い方法は何ですか?
vector<int> v(100);
for(int i=0;i<v.size();i++) v[i]=乱数生成()
などとすれば可能なのはわかりますが,v(100)の時に全て0で初期化されるのは無駄が気がします。
731デフォルトの名無しさん:2013/11/17(日) 03:59:01.53
>>730
vector<int> v;
v.reserve(100);//メモリだけ確保しておく、ただしこの時点でsize()は0

あとはpush_backを使う。
for (size_t i=0; i<100; ++i) v.push_back(rand());
or
std::generate_n(std::back_inserter(v), 100, rand);

vector内部のsizeがpush_backのたびに加算されるのでその分のコストは掛かるかもしれない。
732デフォルトの名無しさん:2013/11/17(日) 04:35:00.45
>>731
最適化無しだとpush_backの呼び出しコストがアホみたいに掛かるし、
最適化が掛かればループ内で参照しない文のsize加算は消滅が期待できるんじゃね?
733デフォルトの名無しさん:2013/11/17(日) 07:10:41.97
期待通りに動くと思うな
734デフォルトの名無しさん:2013/11/17(日) 08:26:52.17
つまりcppはゴミってことさ
Dを使おうよ
735デフォルトの名無しさん:2013/11/17(日) 08:28:02.02
安定したら教えてくれ
736デフォルトの名無しさん:2013/11/17(日) 08:58:28.85
安定は死を意味する > D
D道に果てはない
737デフォルトの名無しさん:2013/11/18(月) 20:12:00.71
空行はインデントする派?しない派?
738デフォルトの名無しさん:2013/11/18(月) 21:00:40.37
空行のインデントって何?

_____int i;

_____for(i=0;i<10;i++)・・・

この場合こうするかって事?

_____int i;
_____
_____for(i=0;i<10;i++)・・・
739デフォルトの名無しさん:2013/11/18(月) 21:01:50.74
気づいたらVSがインデント消してるから気にしない
740デフォルトの名無しさん:2013/11/22(金) 23:11:43.19
ディレクトリ内の特定の拡張子のファイルを全て選択して指定のプログラムで開くプログラムを作りたいんですが使えそうな関数を教えてもらえないでしょうか?

コンテキストメニューにあるような別のプログラムで開くに相当する関数が見つけられなくて困ってます
741デフォルトの名無しさん:2013/11/22(金) 23:52:41.22
Cには無理だからOSのAPIを使うしかない
742デフォルトの名無しさん:2013/11/23(土) 01:43:34.50
C使いは、(Winなら)バッチ使いでもあるべき
for %s in (*.xxx) do start /w %s
みたいにもできるわけだ
743デフォルトの名無しさん:2013/11/23(土) 16:55:50.93
最大限にエスパーして、環境はWindowsで
既にダイアログを開いて選択するところまでは作れているものとして

とりあえず ShellExecute かな
744デフォルトの名無しさん:2013/11/26(火) 08:26:21.15
system()でもできるだろ。
745デフォルトの名無しさん:2013/11/26(火) 08:54:14.75
COMコンポートを使うといいよ
746デフォルトの名無しさん:2013/11/26(火) 16:38:40.76
system使うならプログラムせんでいい
747デフォルトの名無しさん:2013/11/26(火) 23:56:43.50
>>746
シェルスクリプトやバッチファイルでエスケープされてるか気にしながら書くよりは、
systemを乱用してコード書いたほうがマシなケースも有るような気がしなくもない。
748デフォルトの名無しさん:2013/11/27(水) 01:32:06.13
>>747
さすがC/C++厨の発想だな

おまおれ
749デフォルトの名無しさん:2013/11/27(水) 08:14:36.75
systemじゃあ出力が取れんだろ
750デフォルトの名無しさん:2013/11/27(水) 12:39:08.44
>>749
つ[popen()]
751デフォルトの名無しさん:2013/11/27(水) 16:24:30.31
そこまでするか
752デフォルトの名無しさん:2013/12/21(土) 12:57:54.83
wchar_tを使ったことはないが試しに使ってみてもうまくいかないな。
標準出力にもファイル出力にも何も出てこないぞ。
あんまりまともに説明の書いてる本とか見たことないな。
使ってる人も少ないんかいな。下のプログラムは、nsize1 == 12 と標準出力するだけ
になる。wcscpy()関数しか言うことを聞いてくれないな。
何でやねん。

#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <assert.h>

int main(void)
{
FILE *fp1;
wchar_t wcstr1[256];
size_t nsize1;
fp1 = fopen("writefile.txt", "w");
assert(fp1);
fputws(L"ワイド文字列 wchar_t型\n", fp1);
wcscpy(wcstr1, L"漢字 alphabet\n");
nsize1 = wcslen(wcstr1);
printf("nsize1 == %u\n", nsize1);
fputws(wcstr1, fp1);
fclose(fp1);
_putws(L"終了");
return 0;
}
753デフォルトの名無しさん:2013/12/21(土) 14:29:59.28
>>752
http://msdn.microsoft.com/ja-jp/library/t33ya8ky(v=vs.90).aspx
"wb"でファイル開け
754デフォルトの名無しさん:2013/12/21(土) 15:29:29.31
>>752
setlocaleしてないからだ
755デフォルトの名無しさん:2013/12/21(土) 19:36:30.84
752の問題は解決したので、次はC++の入出力ストリームやstringクラスでなくwstringクラス
で試したら、std::cout にwchar_t配列を渡しても正しく表示しないし、wstringクラスの
オブジェクトを渡すとコンパイルエラーに、困ったもんだな。

#include <iostream>
#include <string>
#include <cwchar>
#include <clocale>
#include <cassert>

int main(void)
{
const char *pc1;
wchar_t wcstr1[256] = L"漢字 Alphabet";
pc1 = setlocale( LC_ALL, "JPN" );
assert(pc1);
std::cout << wcstr1 << L'\n'; // "0018FCAC10"と表示する
std::wstring wstrobj1(wcstr1);
// std::cout << wstrobj1 << L'\n'; コンパイルエラー
return 0;
}
756デフォルトの名無しさん:2013/12/21(土) 20:01:42.20
wcout
757デフォルトの名無しさん:2013/12/21(土) 20:11:50.58
wcoutに変更したら解決したし、cinではなくwcinで標準入力するんだろうと思って
試すと成功しました。
それでは、ifstreamとofstreamクラスもwchar_tの対応型のクラスもあるんですか。
758デフォルトの名無しさん:2013/12/21(土) 20:35:39.89
お前もう自力でやれ
759デフォルトの名無しさん:2013/12/21(土) 20:36:26.32
wifstreamとwofstreamクラスでコンパイルできたけれど、下のプログラムで実行すると、
「yti0num1 == 2」を標準出力して、readfile.txtの内容が「yti0」とおかしく表示して、
writefile.txtで作成したファイルには何も出力されてません。何で?

-- readfile.txt 文字コード Unicode(LE) 改行 CR LF
ワイド文字列 wchar_t型
漢字 alphabet
-- プログラム
#include <iostream>
#include <string>
#include <cwchar>
#include <clocale>
#include <fstream>
#include <cassert>

int main(void)
{
const char *pc1;
pc1 = std::setlocale( LC_ALL, "JPN" );
assert(pc1);
std::wifstream wifs1("readfile.txt");
assert(wifs1);
std::wstring wstr1;
int num1 = 0;
760デフォルトの名無しさん:2013/12/21(土) 20:36:58.49
-- 続き --
for (;;) {
std::getline(wifs1, wstr1);
if (wifs1.eof()) {
break;
}
std::wcout << wstr1 << L'\n';
++num1;
}
std::cout << "num1 == " << num1 << '\n';
std::wofstream wofs1("writefile.txt");
assert(wofs1);
wstr1 = L"書き込み文字列 (Write string)";
wofs1 << wstr1 << L'\n';
return 0;
}
761デフォルトの名無しさん:2013/12/21(土) 20:57:51.05
やはりwchar_tの情報は少ないな。
本にはおまけ程度にwchar_t型を書いてるくらいで、具体的なサンプルコードまで説明
してるものを見たことがないし、C++ Builder 5のヘルプファイルもwchar_t対応版の
関数名を書いてるくらいで具体的なサンプルコードはないし、Visual Studio .NET 2003
のMSDNも同様だな。ネットも情報が少ないし。
やっぱりCやC++でUnicodeの入出力とかする人は少ないんかいな。
VB.NetやC#.NetかJavaとかで作ったほうがいいんかいな。
762デフォルトの名無しさん:2013/12/21(土) 21:07:16.16
>>761
_wsetlocale(LC_ALL, L"JPN");とchar or wchar_tを統一するか
TCHARを使用
763デフォルトの名無しさん:2013/12/21(土) 21:08:36.71
言語開発者自身の書いた「プログラミング言語 C++ 第3版」の本でも1ページも
書いてるページがなかっな。こんなに情報量が少なければ、知識のある人や実際
にプログラミングしてる人って、多分少ないんだろうな。
764デフォルトの名無しさん:2013/12/21(土) 21:22:33.67
iostreamのstd定義見たら
cout, wcout, ・・・って載ってるだろ
765デフォルトの名無しさん:2013/12/21(土) 21:23:10.17
>>761
ていうか、wcoutでもwprintfでもいいけどUnicodeにしかない文字を出力してみるといい。
WindowsならWin32API触らないとCP932の文字しか出力されない構造になってるんだよ。
cmd.exe /UみたいなのがあるくらいにはコンソールプログラムのUnicode対応はメンドイ。
cscript.exeとかもパイプに繋ぐと出力APIが切り替わってCP932に強制変換されてしまう。

WindowsならWin32API使わなきゃ駄目で、Unixは最悪ロケールCにUTF-8流し込むだけ。
UnixはUTF-8でwchar_tは使わないし、WindowsはUTF-16だけどwchar_tじゃなくWCHAR。

wchar_tでUTF-16ってのはWCHARの変わりに使える、位しか意味無いんじゃないかな。
766デフォルトの名無しさん:2013/12/21(土) 21:36:57.19
>>761
std::locale::global(std::locale("japanese"));にしろ
767デフォルトの名無しさん:2013/12/22(日) 10:33:42.34
766の通りにしても、ファイルから読み出して標準出力のところは、ASCII文字は
1つのスペース置きに文字が表示されて、漢字はでたらめな文字が表示され、
ファイル出力のところは、UTF16 LEではなくShift-JISで出されますが。
modeにbinaryを指定しても。

std::ios_base::openmode mode;
mode = std::ios_base::in | std::ios_base::binary;
std::wifstream wifs1("readfile.txt", mode);
mode = std::ios_base::out | std::ios_base::binary;
std::wofstream wofs1("writefile2.txt", mode);
768デフォルトの名無しさん:2013/12/22(日) 11:09:00.27
>>767
>>759->>760のこれを削除
> pc1 = std::setlocale( LC_ALL, "JPN" );
> assert(pc1);

これを追加でいけるだろ
> std::locale::global(std::locale("japanese"));

---------標準出力結果
ワイド文字列 wchar_t型
漢字 alphabet
num1 == 2

---------
---------ファイル出力結果
書き込み文字列 (Write string)

---------
769デフォルトの名無しさん:2013/12/22(日) 11:11:37.65
>>767
コードはこれ使って全て入力して
ttp://ideone.com/
770デフォルトの名無しさん:2013/12/22(日) 13:51:05.84
無理でした。

標準出力
---- Visual C++ .NET 2003
、0ノ0eW[ R w c h a r _ t 妓
"oW[ a l p h a b e t
num1 == 2

-- Borland C++ Compiler 5.5
num1 == 0

-- Digiral Mars C and C++ Compiler
d0・ W[ R w c h a r _ t ・
"oW[ a l p h a b e t
num1 == 2

---- ファイル出力結果
Visual C++ .NET 2003 - - - - Shift-JISで出力
Borland C++ Compiler 5.5 - - Shift-JISで出力
Digital Mars C and C++ Compiler - - - 不明な文字コードで出力。
SJIS, JIS, EUC, Latin1, UTF-16 LE, UTF-16 BE, UTF-8, CESU-8, UTF-7のいずれでもない。
ただし、この中でUTF-16以外でならASCIIコードの文字はそのまま表示する。

----- 以上、終了 ----
771デフォルトの名無しさん:2013/12/22(日) 16:14:59.59
>>770
Visual C++ Express Edition 2010でやってみたらどうなる?
772デフォルトの名無しさん:2013/12/23(月) 09:43:58.92
>>771
Visual C++ Express Edition 2010ではないが、Windows SDKでVisual C++ 2010の
64bitのコンパイルでも、2003と同じ結果だった。
773デフォルトの名無しさん:2013/12/24(火) 17:31:11.42
odd-even merge ソートについての質問です。
再帰有りの処理は以下のとおりに実装しました。
http://ideone.com/F7QMld

これを再帰無しの処理に実装し直したいんですが、(odd_even_mergesort関数一つにまとめたい)
いい方法が思いつきません。ヒントや方法等を教えて下さい。
774デフォルトの名無しさん:2013/12/24(火) 20:29:02.70
>>773
コード読まずにレスするけど、まずは
関数のローカル変数としてスタックを用意する。
んで関数の引数をスタックに積む。
んでスタックが空になるまで一個ずつ取り出すループの中に処理を書く。
んで再帰する代わりにスタックに積む。
775デフォルトの名無しさん:2013/12/28(土) 00:31:34.53
>>774
回答ありがとうございました。
その方法を足がかりとしてもう少し考えてみたいと思います。
ありがとうございました。
776デフォルトの名無しさん:2013/12/31(火) 18:35:58.74
c++ で rubyの.send()
のように、変数に入っている関数を実行する方法は無いでしょうか??
教えていただけると嬉しいです。
777776:2013/12/31(火) 18:36:52.51
すみません、変数に入っている関数というより、
変数に入っている文字列と同名の関数を実行する方法、
といった方がただしかったです
778デフォルトの名無しさん:2013/12/31(火) 19:02:39.49
>>777
構造体やクラスメンバとしての変数名はリンク時に消えるから、構造体やクラスのメンバの状態でそのまま呼ぶのは無理。
.DLLとか.soとかデバッグ情報付きの実行ファイルとかリンク情報が残ってる場合にそれ辿る事も可能ではあるが普通はやらん。
std::map<std::string,目的の関数ポインタ>とか作って自前で関数名と関数を紐付けしとくのが正攻法、かな。
オーバーロードまで考えると型情報も要るけど。
779デフォルトの名無しさん:2013/12/31(火) 22:14:38.61
オーバーロード考えるくらいなら
関数ポインタの仮引数に定番となる引数の他にvoid*ひとつ持たせたり…

もっと拡張性持たせるならJavaチックになるけど
共通のインタフェースを実装した関数クラスにしたりとかね

まあ、一番はsend()相当を使って何がしたいのか、だと思う
780デフォルトの名無しさん:2014/01/01(水) 02:22:13.69
なるほど・・ありがとうございます。
結構色々実装しないといけない感じになるんですね。

すみませんあともう1つ質問させていただきたいのですが、

int sample1[2][2] = {{1,2}, {1,2}};
int sample2[3][2] = {{1,2}, {1,2}, {1,2}};

int* p;
if (true) {
p = sample1;
} else {
p = sample2;
}


こういったことがしたいのですが、
p = sample1;
p = sample2;
の部分で
cannot convert error のような感じになってしまいます。

sample1 と sample2 の両方が格納できるような変数を作りたいのですが、
どのような書き方をすればいいでしょうか。
アドバイスいただけると嬉しいです。
781デフォルトの名無しさん:2014/01/01(水) 12:05:29.36
>>777
呼び出したい関数が、ただの関数なのかクラスのメンバ関数なのか、さらに
メンバ関数の場合、仮想関数(virtual)なのか、オーバーロードされているか
どうかによって多少異なる。

普通の関数なら、C言語のみの記述でも、下記のようなデータ構造で名前と
関数エントリを管理することはできる。 ただ、下記のように単純にテーブル
から関数ポインタを取得して呼び出す場合、引数の並びと、順序毎の引数の
型はすべての関数で同じでなければならない。 引数をスタックに積むのと、
スタックの解放は、呼び出し側で行うので、引数の数が多い分には構わない。

typedef struct func_info
{
char func_name[32];
void (*func_entry)();
} FUNC_INFO;

static FUNC_INFO func_table[]={{"strcpy",strcpy}
,{"strcat",strcat}
,{"strlen",strlen}};

>>780

int *p[2];

ただ、ポインタでは要素の数は管理できないし、両者の区別もできない。
782片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/01(水) 17:48:01.34
typedef int SAMPLE[2];
SAMPLE *p;
または
int (*p)[2];
783デフォルトの名無しさん:2014/01/02(木) 11:35:53.83
&nbsp;  
784776:2014/01/02(木) 22:31:43.73
>>781
>>782
なるほど・・丁寧に教えていただきありがとうございました。
C++小技みたいのがたくさんあって難しいですね・・
785デフォルトの名無しさん:2014/01/02(木) 22:47:11.14
ループカウンタって何でいつもiから始まるのか?iに何か特別な意味があるのか?
786デフォルトの名無しさん:2014/01/02(木) 22:49:39.97
>>785
「i」ndex
787デフォルトの名無しさん:2014/01/02(木) 22:49:50.47
integer
788デフォルトの名無しさん:2014/01/02(木) 22:52:46.53
真のプログラミング言語FORTRANではI,J,K,L,M,Nで始まる変数は整数という決まりがあったのじゃ
789デフォルトの名無しさん:2014/01/02(木) 23:02:32.34
>>786-788
ありがとうございました!
790デフォルトの名無しさん:2014/01/02(木) 23:23:17.38
iterator
791デフォルトの名無しさん:2014/01/03(金) 07:20:41.53
j-k フリップフロップ
792デフォルトの名無しさん:2014/01/03(金) 08:44:31.07
女子高生FF
793デフォルトの名無しさん:2014/01/08(水) 01:10:36.47
c++を本格的に勉強しようと思ったら
n3337を読めば良いの?
794デフォルトの名無しさん:2014/01/08(水) 01:21:07.00
C++を全く知らないなら規格書はオススメできないな
795デフォルトの名無しさん:2014/01/08(水) 01:24:47.66
>>794
規格書を参照するクセつけといた方が良いかなと・・・
796デフォルトの名無しさん:2014/01/08(水) 01:38:47.87
規格なんてケツ拭く紙にすらならないよ
797デフォルトの名無しさん:2014/01/08(水) 01:47:23.56
プロに教えてほしいんでつけど、
なんで例外ってあるんでつかねぇ?
Cのときには無くてもやっていけたじゃないでつか?(´・ω・`)
798デフォルトの名無しさん:2014/01/08(水) 01:51:22.58
便利だからじゃないでつかねー
799デフォルトの名無しさん:2014/01/08(水) 02:09:54.80
つ setjmp/longjmp
800デフォルトの名無しさん:2014/01/08(水) 02:46:22.00
>>795
それはその通りだと思う
でも全くの初心者が最初に読むべきものでは無いんじゃないかと
あれはそこそこ作れるようになってきた人が横に置いておくものでしょ
801デフォルトの名無しさん:2014/01/08(水) 03:08:40.62
>>795
深く理解するのはいいことだけど、そもそも規格書を厳密に参照しなきゃいけないようなタイトなコードを書く必要がある時点で大抵何か設計を間違えてる。
あと稀なケースではあるけどコンパイラがバグ抱えてたり未実装だったりする場合、いくら規格書が正しくてもコードはコンパイラに合わせてあげないといけないわけで。
本末転倒に感じるかもしれないけど規格書が常に正しいとは限らないからあんまりその辺の原理主義者に惑わされない方がいいと思うよ。
それに肝心なのは言語そのものの文法より使いこなし方だから、C++本体の規格書とか読む暇があるんだったらBoostのドキュメント読んだ方がよっぽど有意義だと思う。
802デフォルトの名無しさん:2014/01/08(水) 07:23:06.92
>>797
割り込みってのが大昔からある
803デフォルトの名無しさん:2014/01/08(水) 07:50:49.96
つ setjmp/longjmp
デストラクタ「」
804デフォルトの名無しさん:2014/01/08(水) 08:45:11.38
boostなんて使わせてくれるの?
805デフォルトの名無しさん:2014/01/08(水) 11:27:20.22
>>801
> 規格書を厳密に参照しなきゃいけないようなタイトなコードを書く必要がある時点で大抵何か設計を間違えてる
> 規格書が常に正しいとは限らない
これ、世の中の大多数のプログラマの共通認識なんですか?
806デフォルトの名無しさん:2014/01/08(水) 12:25:47.26
>>805
時々自問するといい、コードを書くのは手段であって主目的ではない
規格書をひもとく必要があるコードってのは、誰でも読める書き方になってないことがある

もちろん、規格書が頭に入ってないといけない人ってのはいる
極端な話、コンパイラ、ライブラリ書いてる人は、そうだな
807デフォルトの名無しさん:2014/01/08(水) 12:29:03.51
> 規格書が常に正しいとは限らない
ここだけ抜き出すと意味が変わる
処理系にバグがあると、規格書に準拠して書いてもコンパイル出来なかったり、実行時にエラーになることはある
808デフォルトの名無しさん:2014/01/08(水) 12:30:59.42
>>806
あと、ここでバトルする場合規格書に精通していないと負ける
809デフォルトの名無しさん:2014/01/08(水) 13:10:27.60
見識不足が原因で負けるのであって
規格に詳しいかどうかは本質的に関係ない。
810デフォルトの名無しさん:2014/01/08(水) 20:08:06.17
勝ち負けに拘ってるうちはなんとやら
811デフォルトの名無しさん:2014/01/08(水) 20:16:28.12
そのセリフは片山に負けたおバカさんにかけてやれ
812デフォルトの名無しさん:2014/01/09(木) 08:22:10.60
負けるっていうか、「規格書みろ(ドヤッ」とくると、お、おう、ってことで、
そこで話が終わってしまう

正直、読めるモノなら、読んでるからねえ
813デフォルトの名無しさん:2014/01/09(木) 22:38:32.28
boolは1/0派?true/false派?
814デフォルトの名無しさん:2014/01/09(木) 23:56:49.81
C99以前なら
#define true 1
#define false 0
とするのが常套手段かな‥
815 ◆QZschizo.ptH :2014/01/10(金) 01:35:22.08
原則にもどって 非零/零派なのは間違いないとして、心情的には -1/0 派か
816デフォルトの名無しさん:2014/01/10(金) 03:12:33.21
==とか!とかの演算結果がとる値って決まってなかったっけ?
うろ覚えだけど1と0だったような・・・

エラー値としては結構-1が使われる事が多い気がするけど、
それは単に0を含む自然数を正常値として扱うからだろうし。
817デフォルトの名無しさん:2014/01/10(金) 04:32:40.45
Cでプログラムしてるのに
C++のtrue falseを使用してた事もあったな
818 ◆QZschizo.ptH :2014/01/10(金) 04:47:35.31
>>816
そのとおり決まっている、すなわち、出力としての比較演算子/等値演算子や論理演算子&&/|| は真のときには 1 を返すことは確約されている。
ISO/IEC 6.5.8.5, 6,5,9,3, 6.5.13.3, 6.5.14.3
しかし、<ctype.h> の諸関数(isalpha() とか)は真のときに1を返すとは限らず、あくまで非零で真、零で偽だったりする。
819デフォルトの名無しさん:2014/01/10(金) 07:11:25.06
_Boolなら0/1で書くのはありだが
boolといいつつ0/1で書くのは
頭がおかしいのでは?
820デフォルトの名無しさん:2014/01/10(金) 11:43:43.50
>>817
言いたいことがよく分からん。
日本語で会話しているのに
英語のyes/noを使用するような感じ?
821デフォルトの名無しさん:2014/01/10(金) 11:59:57.42
>>820
どちらかというと
「日本語の文章なのに 銀行ATM とか NTT とかアルファベット文字使っちゃった」
というイミフなレベル
822デフォルトの名無しさん:2014/01/10(金) 16:27:01.58
野球選手がボクサーに転向して「右手は殴る方だからグローブはしない」って言っちゃう感じ
823デフォルトの名無しさん:2014/01/10(金) 20:40:33.32
bool型true/falseはC++じゃないのか
824デフォルトの名無しさん:2014/01/10(金) 22:32:29.43
>>823
んなこたーない
Cにも昔からある
825デフォルトの名無しさん:2014/01/11(土) 00:35:47.75
それTRUE/FALSEでは
826デフォルトの名無しさん:2014/01/11(土) 01:17:45.59
>>825
ISO/IEC 9899:2011 7.18p2
『macro bool expands to _Bool』

この仕様は14年前からあったはず
827デフォルトの名無しさん:2014/01/11(土) 01:42:15.67
仕様ならC99からあったけど実際使えるようになったの最近じゃね
828デフォルトの名無しさん:2014/01/11(土) 01:45:15.89
と思ったけどgccなら2001年くらいから使えるようになってたのね
つまりVSが
829デフォルトの名無しさん:2014/01/11(土) 01:50:56.55
GCCのstdbool.hは2000年直後ぐらいだが
真面目に実装されたのが2005年
830デフォルトの名無しさん:2014/01/12(日) 02:18:48.37
>>797
プロとしてはクラッシュが一番怖い。面目丸潰れ。例外なら予想されるクラッシュに先手を打てる。
831デフォルトの名無しさん:2014/01/12(日) 02:52:04.54
>>830
アプリケーションが動作を停止しましたってやつ?
832デフォルトの名無しさん:2014/01/12(日) 05:26:18.32
>>797>>830
WindowsでC/C++だと、言語自体の例外処理機構使わずにSEH(構造化例外処理)使ったりもするんだけどな。
これ、C++じゃなくてC/C++。Cで普通に使える例外機能。
「クラッシュ」って大半が(特にヌルポでの)アクセス違反だから、クラッシュ避けだけならこれで十分だよ。

まぁそれは置いといて、スタック巻き戻しでデストラクタが走るからエラー処理を簡潔に書けるのがメリットかと。
833デフォルトの名無しさん:2014/01/12(日) 12:00:42.55
IT用語集で調べて"クラッシュ"はアプリにもOSにも使われることは知ってるんだけどさ
"クラッシュ"と聞くとアプリよりもOSが落ちることを連想するんだよな
俺が育った会社や親の躾のせいかもしれないが‥
834デフォルトの名無しさん:2014/01/12(日) 15:43:20.83
Win32のコールバック関数渡して列挙するenumhoge系のAPIでは
コールバック関数内でのエラー通知するために例外を使う
835デフォルトの名無しさん:2014/01/12(日) 16:33:38.68
>>833
すごいしつけをする親もいたもんだな
836デフォルトの名無しさん:2014/01/12(日) 23:47:49.62
>>833
WindowsはNT系になってから落ちにくくなったからなぁ…
落ちるときはハードかドライバの故障・バグが大半だし。

9x系やDOSはアプリの暴走でOSが巻き込まれるから、
「アプリのクラッシュ≒OSもクラッシュ」だったんじゃね?

無限ループ発生→ビジー状態→うぼぁ
ヌルポ発生→一般保護例外連発→うぼぁ
837デフォルトの名無しさん:2014/01/13(月) 06:34:33.27
そもそも「クラッシュ」はあまり使わないなあ
使うなら具体的な現象(アプリケーションエラー、ブルースクリーンなど)
を使うから
838デフォルトの名無しさん:2014/01/13(月) 06:59:06.38
>具体的な現象(アプリケーションエラー

こんな具体性に書ける説明は信用ならない
839デフォルトの名無しさん:2014/01/13(月) 09:37:02.50
そもそも「アプリケーションエラー、ブルースクリーンなど」を具体的とは言わない
840デフォルトの名無しさん:2014/01/13(月) 15:43:11.88
「クラッシュ」よりは具体的ではある。
でもOS巻き込んで落ちてた時代に両者の区別ができるかって言うと・・・ねぇ・・・?
841デフォルトの名無しさん:2014/01/13(月) 16:50:00.63
それは屁理屈
○○より××だから〜
842デフォルトの名無しさん:2014/01/13(月) 17:26:09.43
>>836
Windows2000、XPはDirectXを入れはじめた時でもあって、GDIまでカーネルモードだと
遅くて仕方がないのでここだけユーザーモードにした

だから画面関係でトラブるとやはりOS巻き込んで落ちる
Flashの再生でよくXP固まってたでしょ
Flash再生しながらChromeで別タブで他のページ開こうとすると結構な確率で
うんともすんともいわなくなってた

Vistaからは元に戻した
ハードウェアの性能が上がってカーネルモードでも問題なくなったからだね
843デフォルトの名無しさん:2014/01/14(火) 04:00:47.47
> 結構な確率
リソース不足でGUIが固まったことはあるが、その条件で固まった覚えは特に無いんだが・・・
個体差が有る(ハード・ハード構成・ドライバに依存している可能性がある)問題だったりしないか?それ。

そもそも固まるのと落ちるのはちと違うし、9xよりは遥かにマシなのは間違いないと思うが。
844デフォルトの名無しさん:2014/01/14(火) 05:44:34.27
スワップ中の動作遅延を固まると勘違いしてるんじゃないのか
845デフォルトの名無しさん:2014/01/21(火) 06:58:32.99
NRVOってstd::moveで返すよりも遅い?
コピーもムーブも起こってないのに、実測で倍くらいになって???ってなってる
ちなみにVS2013Exp
気持ち悪くてしょうがない
846デフォルトの名無しさん:2014/01/21(火) 08:36:01.64
そもそもコピーが起こらないんだからそんなに変わらないはずなんだが
本当にNRVOされてるかアセンブリ見てみないと
847デフォルトの名無しさん:2014/01/21(火) 11:06:49.76
DirectX かどうかは知らんがC-Media の音源ドライバ on XP でよくBoD を喰らったな
ゲームのWave 差換えしたりして対処してた
848デフォルトの名無しさん:2014/01/21(火) 11:59:23.05
クソハード、クソドライバで落ちるのはしゃあない
どうやったって対抗しきれるもんじゃないだろうし
849デフォルトの名無しさん:2014/02/11(火) 18:24:11.74
三次方程式の解を
カルダノの公式を使って
出力するプログラミングしようと思ってるんですが

例えばx^3-6x^2+11x-6という式だった場合
それぞれa,b,c,dの入力値を
http://shadowacademy.web.fc2.com/tartagliacardano.html
上記のページの最後の方のx1の式に当てはまるようにプログラミングすれば
解の一つが出るってことでしょうか?
試しにやってみたんですがまったく違う答えが出ます。
どうすればいいでしょうか?
お願いします。
850デフォルトの名無しさん:2014/02/11(火) 19:40:31.63
>>849
試しにやってみたソースを上げてみ
851デフォルトの名無しさん:2014/02/11(火) 20:30:39.08
>>850
式に当てはめた処理の部分ですがお願いします。

double p = (27.0 * a * a * d) + (2.0 * b * b * b) - (9.0 * a * b * c) / (54.0 * a * a * a);
double q = (3.0 * a * c) - (b * b) / (9.0 * a * a);

double D = (p * p) + (q * q * q);

double kai = (-p + Math.Sqrt(D)) + (-q - Math.Sqrt(D) - b) / (3 * a);
852デフォルトの名無しさん:2014/02/11(火) 20:32:53.78
>>851
最後の行間違えました。
double kai = (-p + Math.Sqrt(D)) + (-q - Math.Sqrt(D)) - (b / (3 * a))
です。
853デフォルトの名無しさん:2014/02/12(水) 06:23:32.00
http://ideone.com/IUi67G

この時点でp=-1になっちゃうからuが求まらない事になっちゃうんだが
これも無理矢理虚数単位を使うのか?
854デフォルトの名無しさん:2014/02/15(土) 17:36:21.18
C++でできることは全部VBでできますか?
855デフォルトの名無しさん:2014/02/15(土) 18:31:29.95
できません
c++はVBの様な高級言語ではありません
856デフォルトの名無しさん:2014/02/15(土) 18:38:56.03
できません
VBはC++のような低級言語ではありません

のほうが正しいような
857デフォルトの名無しさん:2014/02/15(土) 19:28:53.77
そうだね^^;
858デフォルトの名無しさん:2014/02/15(土) 20:03:15.58
言語として、VBにできることは大体VCにできるように思うが、
(#import, _bstr_t, _variant_t はかなり便利)
VBランタイムに備わってるライブラリが一式VCランタイムにあるかというと
そうじゃないので、実は併用最強なんだなきっと

VBは正直食わず嫌い
859デフォルトの名無しさん:2014/02/15(土) 22:20:09.06
簡単なものや速度要求されるもんじゃなきゃ
VBでもいいんだよね、楽だし
生産性で考えるならUIをVBにするのが一番だとは思う
860デフォルトの名無しさん:2014/02/16(日) 01:19:38.83
アセンブリとC++でも違いありますか?
861デフォルトの名無しさん:2014/02/16(日) 04:37:10.13
アセンブリ言語が万能ってわけじゃないんだよ
862デフォルトの名無しさん:2014/02/16(日) 08:44:23.88
手の込んだUIをVBでやるのはかなり苦痛だぞ。ネットワークは簡単だった
863デフォルトの名無しさん:2014/02/16(日) 09:15:18.53
古代BASICにとってつけた拡張で、超汚い構文
士ねVB
VBAのせいで生き延びてるんだな
864デフォルトの名無しさん:2014/02/16(日) 17:36:31.06
高級言語が乱立してて困る。環境が変わらなくても高級言語を使ってる場合
言語が変わると環境も変わる。言語同士のブリッジはC++にしかできない。
WEBでは結構まとまってるようだが
865デフォルトの名無しさん:2014/02/16(日) 20:39:15.88
・・・まとまってるか?
866デフォルトの名無しさん:2014/02/16(日) 23:34:14.42
まとまってるっつーか最終的に吐くにも読むにもHTMLとJavascriptが必要になるからそうならざるを得ないだけじゃないか?
867デフォルトの名無しさん:2014/02/17(月) 14:48:00.87
生産性という話をする際に
作ったものが用途に合わなくなったら捨てるという「前提」が
すっぽり頭から抜けてるやつばかりで困る
868デフォルトの名無しさん:2014/02/17(月) 20:10:25.04
ニュートン法を使って
三次方程式の解を求めるプログラムを作りたいと思ってます。
三つの異なる解を出す場合の処理がわかりません。
その処理の部分のソースがあります。
どうすればいいかアドバイスください。
三つの内、一つだけなら今のところ求められます。

double x, h, h2;
x = 0.0;
for (int n = 1; n < 100; n++)
{
h = (i[0] * x * x * x) + (i[1] * x * x) + (i[2] * x) + i[3];
h2 = (3.0 * i[0] * x * x) + (2.0 * i[1] * x) + i[2];
h = h / h2;
if (Math.Abs(h) < 0.000000000000001) break;
x = x - h;
kaitou[0] = x;
}
869 ◆QZaw55cn4c :2014/02/17(月) 20:19:50.60
>>868
ニュートン法で、複数の解の一部または全部を取得するために初期値を定める一般的な方法はない
http://toro.2ch.net/test/read.cgi/tech/1313183984/652
870デフォルトの名無しさん:2014/02/17(月) 21:33:53.11
複数の解を求める方法は何かないでしょうか?
871デフォルトの名無しさん:2014/02/17(月) 21:45:24.21
3つ求まるまで初期値変更
872デフォルトの名無しさん:2014/02/17(月) 22:05:14.97
一つ求まったら
次の初期値は前に求まった解ってことでいいんですか?
873 ◆QZaw55cn4c :2014/02/17(月) 22:29:29.23
>>872
それはたぶんうまくいかない
874デフォルトの名無しさん:2014/02/17(月) 22:44:31.53
どうすればいいでしょう?
ヒントください。
875デフォルトの名無しさん:2014/02/17(月) 22:45:55.43
>>872
山登り(または谷下り)するときに、頂上(谷底)でその斜面からより高い(低い)場所に向かって歩いて別の頂上(谷底)に到達できるの?君。
876デフォルトの名無しさん:2014/02/17(月) 22:49:16.38
複数解を持つ方程式をニュートン法で解く場合、与える初期値によって求める解が決まるそうです。
リンク先に「どの解を求めるかによって初期値を人間が適切に判断しなければならない」とありますから
この部分はプログラムで自動化することは困難なのでは…
http://ryuiki.agbi.tsukuba.ac.jp/~nishida/lecture/numerical/Newton.html
877デフォルトの名無しさん:2014/02/17(月) 22:57:14.32
初期値よりも微分が手作業なのをなんとかしろよ
初期値はランダムでもいい
878デフォルトの名無しさん:2014/02/17(月) 23:06:40.07
よく知らんがMathematicaやMapleをつかえば微分もプログラムでやれるんじゃね?
879 ◆QZaw55cn4c :2014/02/17(月) 23:15:07.61
>>877
数値微分
880デフォルトの名無しさん:2014/02/17(月) 23:17:28.87
どんな関数を入力しても、微分も初期値も全自動でないと。
881デフォルトの名無しさん:2014/02/17(月) 23:27:34.63
>>875
局所最適解山乙
882デフォルトの名無しさん:2014/02/18(火) 20:58:34.18
昨日ソース貼った者だけど
あれからソース変えてみました。
ここから解を3つ出力できるようにできますでしょうか?

int count = 0;
double x = 0.0;
double h, h2;
for (int n = 1; n < 100; n++)
{
h = (i[0] * x * x * x) + (i[1] * x * x) + (i[2] * x) + i[3];
h2 = (3.0 * i[0] * x * x) + (2.0 * i[1] * x) + i[2];
h = h / h2;
x = x - h;
if (Math.Abs(h) < 0.000000000000001)
{
kaitou[count] = x;
count++;
n = 1;
x++;
}
if (count > 2.0)
{
break;
}
}
883デフォルトの名無しさん:2014/02/18(火) 21:33:57.62
自分で試してみないの?
884デフォルトの名無しさん:2014/02/18(火) 21:43:49.58
試したけどできなかったので
何かアドバイスが欲しいのです。
885デフォルトの名無しさん:2014/02/18(火) 22:49:13.10
・何を試したのか
・試した結果、どう上手く行かなかったのか

のリストをまとめてからどうぞ
886デフォルトの名無しさん:2014/02/19(水) 11:27:45.14
試したのなら
>>885
> ・試した結果、どう上手く行かなかったのか
これを添えて質問するのは当たり前だろう
887デフォルトの名無しさん:2014/02/19(水) 17:50:20.34
>>882
コード読んでないけど、x++;をx=ldexp((rand()+(rand()*1.0/RAND_MAX))/RAND_MAX , (rand()%1024)-512);
とかにでもすれば?
888デフォルトの名無しさん:2014/02/22(土) 01:24:47.68
.outっていうファイルを解析して一部書き変えて動作を変更したいのですが
調べてみると.outはC言語の実行ファイルらしいというとこまでしかわかりませんでした
.outのファイルを開くとほとんど文字化けで見れないんですが
.outファイルを逆コンパイルして人間が読めるようなソースを作ることは可能なのでしょうか?
たすけてください
889デフォルトの名無しさん:2014/02/22(土) 01:57:03.42
テキストファイルとして開く時点でお前には能力がない
あきらめろ
890デフォルトの名無しさん:2014/02/22(土) 04:29:07.37
「逆コンパイルして人間可読にする」って思考してる時点で
「テキストファイルとして文字化けしてる」って認識になるはず無いんだが・・・釣りかね?
891デフォルトの名無しさん:2014/02/22(土) 07:01:08.97
テキストとして開いてみた
→文字化けしてるからリコンパイルかな
って流れくらいわかるだろ
892デフォルトの名無しさん:2014/02/22(土) 08:26:25.25
そもそもリバースエンジニアリングには注意が必要なわけで
流石に自分で全部調べられるレベルにないとやって欲しくないな
893デフォルトの名無しさん:2014/02/22(土) 12:43:27.70
>>888
ム板の天災 片山MZに師事しろ
http://toro.2ch.net/test/read.cgi/tech/1380002328/
894デフォルトの名無しさん:2014/02/22(土) 14:18:02.72
最近javaばっかりしてて
久々、C++でデスクトップアプリを作ろうと
思ってるんですが(何を作ろうとは考えて無いけど)
自分の持ってるVSって2005なんだけど
VSってmfc以外の利点は無いし
2005だからだからVC++も中途半端な作りだし
やっばVC++の新しいバージョンのEE入れたほうが良い?
それともマルチプラットフォームのQtが良い?
どなたか教えて!
895デフォルトの名無しさん:2014/02/22(土) 14:28:24.14
作りたいものでてから考えろや
896デフォルトの名無しさん:2014/02/22(土) 15:13:47.52
っgcc
897デフォルトの名無しさん:2014/02/22(土) 15:52:59.73
>>894
VS2005に、最新のEEのコンパイラ組み合わせてはどうか

>>896
gcc, clang もたしなみ
898デフォルトの名無しさん:2014/02/22(土) 17:12:31.75
>>888
無理
スキルがあるなら逆アセンブルしてパッチをあてるくらいだが
それすら現実的でない

助けてくださいということはクラックされて何か仕込まれた?
899デフォルトの名無しさん:2014/02/23(日) 05:50:36.81
初心者ですが、文字列の比較について教えて下さい

class A {
static const char * sprit(const char* chr);
}
const char * sprit(const char* chr){
std::string str(chr);
const char subChr = substr(0,3).c_str();
return subChr;
};

という文字列を半分にするクラスを作成し、

const char * chr = A::sprit("123456");
if (!strcmp(chr,"123")){ }

という比較を行うと、真になって欲しいのですが
毎回結果が違ってしまいます。
chrの中を見ると「123」となってはいるのですが。
これは何を勘違いしているのでしょうか

環境はAndroid NDKです。
よろしくお願いします。
900デフォルトの名無しさん:2014/02/23(日) 06:36:23.77
アドレスが異なるから違うよと言われる
値の比較をするならそうしよう
901デフォルトの名無しさん:2014/02/23(日) 07:16:49.78
そもそも、ポインタを返す関数で整数を無理やり返してコンパイルできてるのかね。
つーか、AndroidNDKでC++なのか?
902デフォルトの名無しさん:2014/02/23(日) 08:04:31.29
>>899
ローカル変数のポインタを返してるからじゃないの?
903デフォルトの名無しさん:2014/02/23(日) 17:33:03.17
そこら中誤字まみれでどうしようもねぇな
文字(Chr)と文字列(Str)すらごっちゃになってるし、spritはsplitだろうし、4行目A::が抜けてるし…

static const std::string A::split(const char* str){return std::string(str).substr(0,3);};
でよくね
904デフォルトの名無しさん:2014/02/23(日) 20:23:03.88
>>889-893
>>898
ありがとう、あきらめたよ
905デフォルトの名無しさん:2014/02/23(日) 22:55:03.82
C++のSTLのstd::vectorのコードを見ていたら、
コンテナに格納可能な最大数を返してくれるメソッドmax_sizeが以下のようになってたんですけど、

size_t max_size() const
{ return size_t(-1) / sizeof(_Tp); }

どうしてこれで求められるかが理解できません。
教えてください。お願いします。
906デフォルトの名無しさん:2014/02/24(月) 00:20:59.56
>>905
・size_tはunsignedだから、-1をキャストすると最大値が出る
・sizeof(_Tp)で要素1つ辺りのサイズが算出できる

そこから、vectorの実装に明るくない俺でも

・使えるのは最大で「size_tの最大値」バイトまでなんだろう
・それを要素1つ辺りのサイズごとに区切って使うのだろう

というくらいは推測するよ
まあ、区切るも何も、C/C++の仕様考えたら
ポインタに演算や添字与えりゃ済むんだろうが…

それ以上はもっかい自分できちんと。
処理系や実装者によって多少の差異があるかも?知らんけどw
907デフォルトの名無しさん:2014/02/24(月) 00:36:44.71
でも、どう考えてもmax_size()個行く前に仮想メモリ空間が足んなくなるよねコレ
スパコン用とかどうにかそれが出来るC++実装がどこかに存在するのかな…
908デフォルトの名無しさん:2014/02/24(月) 07:39:46.17
メモリーをnewして失敗しなくても、実際にアクセスするまで
メモリー確保できたかどうかわからないアーキテクチャなOSがあるんでな
最大サイズも「あれば使える」程度でいいんよ
909デフォルトの名無しさん:2014/02/24(月) 08:21:53.96
>>906
なるほど!
よくわかりました!
ありがとうございます。
910デフォルトの名無しさん:2014/02/24(月) 17:01:31.55
あの罠仕様は実メモリ・実スワップが割り当てられないだけで仮想メモリ空間自体は割り当てされるんじゃないのか
911デフォルトの名無しさん:2014/02/25(火) 20:59:02.95
三次方程式のプログラムを作っています。

複数解を出力する場合の処理についてです。
ニュートン法で一つ目の実数解を出力した後に
次に二つの複数解の実数解を出しました。
次に虚数部を出したいと思うんですが
どう処理すればいいのかわかりません。
その処理をしているソースを載せます。
どう処理すればいいでしょうか?
912デフォルトの名無しさん:2014/02/25(火) 21:01:10.22
最後のelse if (hanbetu < 0.0)のところが
複素数解を出力する処理です。
変数imに虚数部を入れます。

for (int n = 1; n < 100; n++)
{
if (Math.Abs(h) < 0.000000000000001)
{
kai[count] = Math.Round(x, 13);
if (hanbetu > 0.0)
{
count++;
x = 10.0;
if (count == 2 && kai[0] == kai[1])
{
count--;
x = -10.0;
}
}
if (count > 1)
{
kai[2] = Math.Round((-(i[1] / i[0])) - (kai[0] + kai[1]), 13);
break;
}
else if (hanbetu < 0.0)
{
kai[1] = kai[2] = Math.Round((-i[1] / i[0] - kai[0]) / 2.0, 13);
im = (Math.Sqrt(3.0));
}
913デフォルトの名無しさん:2014/02/28(金) 17:15:55.38
age
914デフォルトの名無しさん:2014/02/28(金) 19:09:27.59
マルチプラットフォーム的なコードにしたいんだが
OS依存のライブラリ等に自作ラッパ噛ますのってアリ?

本当はSDLって奴使いたかったんだけど
Windows8でXAudio2のバージョンが変わったとかでビルドできない…
915デフォルトの名無しさん:2014/02/28(金) 22:51:40.35
>>914
OS依存部分を直接自前ライブラリに実装して、プラットフォームごとに自前ライブラリ作りなおしてもええんやで

まぁあれだ、どうせ移植するときは自分でやるのが大半だろうし、自分で移植しやすいように書けばいい
916デフォルトの名無しさん:2014/03/02(日) 23:13:36.04
>>914
車輪の再設計になってもいいなら。GPLとかでよければ誰かがやってることが多い
それだけみんなおんなじことを考える

そのへんを度外視すれば、悪いことではない
917デフォルトの名無しさん:2014/03/12(水) 15:44:24.41 ID:Z46QAlOd
ちんこまんこにいれれば
ハッピー
918デフォルトの名無しさん:2014/03/12(水) 16:28:46.86 ID:AZrAiCEG
ワロタ
919デフォルトの名無しさん:2014/03/12(水) 16:42:02.35 ID:4AbABLKQ
【Z46QAlOd】の検索

PC等 [プログラム] C++相談室 part111
320 322-323
PC等 [プログラム] スレを勃てるまでもないC/C++の質問はここで 21
917
920デフォルトの名無しさん:2014/03/18(火) 06:51:58.40 ID:B0h8c5Jx
スレ勃てずに肉棒勃てろ
921デフォルトの名無しさん:2014/04/21(月) 10:53:42.17 ID:CQ39bA+0
.cpp は .h を #include で認識してるけど
.h は .cpp をどうやって認識してるの?

地味にこれが分らないから詳しく教えて下さい
922デフォルトの名無しさん:2014/04/21(月) 11:03:30.57 ID:lfASPZAR
認識する必要なんてないだろ
923デフォルトの名無しさん:2014/04/21(月) 11:13:48.75 ID:LiZ+Dtbr
プリプロセッサがウンタラカンタラ
924デフォルトの名無しさん:2014/04/21(月) 12:03:34.89 ID:nKQE7Rc+
>>921
.hには.cppの場所記入しないだろ?
.cppが.hを呼んでるだけだから
925デフォルトの名無しさん:2014/04/21(月) 22:38:47.97 ID:juP562jX
Visual Studio2008で作ったlibをVisual Studio2012で使うとエラーが出ます。
これをなんとかできませんか?
926デフォルトの名無しさん:2014/04/21(月) 23:37:15.34 ID:nKQE7Rc+
エラーコピペ
927デフォルトの名無しさん:2014/04/22(火) 18:46:43.93 ID:f8JeFUsV
error LNK1120: 3 件の未解決の外部参照
error LNK2001: 外部シンボル ""public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)" は未解決です。
928デフォルトの名無しさん:2014/04/22(火) 18:50:03.62 ID:f8JeFUsV
error LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: struct std::_Iterator_base12 * * __thiscall std::_Container_base12::
_Getpfirst(void)const " (__imp_?_Getpfirst@_Container_base12@std@@QBEPAPAU_Iterator_base12@2@XZ) が関数
"protected: void __thiscall std::deque<short *,class std::allocator<short *> >::_Orphan_off(unsigned int)const "
(?_Orphan_off@?$deque@PAFV?$allocator@PAF@std@@@std@@IBEXI@Z) で参照されました。
error LNK2019: 未解決の外部シンボル "public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xlen@_String_base@std@@SAXXZ)
が関数 "protected: bool __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Grow(unsigned int,bool)"
(?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z) で参照されました。
error LNK2019: 未解決の外部シンボル "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)
が関数 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
& __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::
assign(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,unsigned int,unsigned int)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z) で参照されました
929デフォルトの名無しさん:2014/04/22(火) 18:50:46.37 ID:f8JeFUsV
error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。
error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。
error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。
error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。
error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MTd_StaticDebug' が MDd_DynamicDebug の値 'main.obj' と一致しません。
930デフォルトの名無しさん:2014/04/22(火) 19:05:35.72 ID:yUACokf4
ライブラリとリンクするライブラリは、ライブラリのコンパイル時に使ったヘッダファイルと互換が有る奴使え。
最低でもMTとMDのオプションぐらい合わせろ。
ていうか(恐らく)バージョンの違うテンプレートライブラリでリンクしようとすんな。
931921:2014/04/23(水) 22:39:38.56 ID:qwt0uHqN
そもそも、なんで .h は必要なの?
.cpp だけじゃどんな問題があるの?
932デフォルトの名無しさん:2014/04/23(水) 22:43:29.29 ID:U/+ppQ2B
他のcppに公開する必要ないなら必要ないけど
933デフォルトの名無しさん:2014/04/23(水) 22:45:26.25 ID:V34cTVQA
>>931
多数の.cppを別々にコンパイルできます。
各.cppで、共通部分を.hで宣言しておけばコンパイルできます。

リンクするとき、まだコンパイルしていない.cppがあれば、エラーになります。
934デフォルトの名無しさん:2014/04/23(水) 22:48:20.65 ID:V34cTVQA
Cだけならわかりやすいかも
C++は、いろいろ勉強しないとなぁ
935デフォルトの名無しさん:2014/04/23(水) 23:57:20.36 ID:8aJ+1hBq
C++はCより難しいですか?
936デフォルトの名無しさん:2014/04/24(木) 01:49:00.51 ID:9wgxQ0KX
>>931
ここで、他のファイルのヘッダをインクルードすると、
返り値の型 f(引数の型);
というようにヘッダの内容が展開されて、
他のファイルにある、関数の型が事前にわかる(前方宣言)

よってここで、f()の実装を知らないのに、正しい型で使える

複数のファイルによる、並行・分散、開発・コンパイル時に、
ひとまず宣言だけあれば、実装がなくてもコンパイルできる
と同時に他人が、f()の中身を作る
937デフォルトの名無しさん:2014/04/24(木) 02:34:34.09 ID:V/BmNssB
>>935
難しさの基準による
ちょっとしたことで低水準に踏み込まざるを得なくなるCと、ひたすら機能が多く複雑な言語であるC++
938デフォルトの名無しさん:2014/04/24(木) 09:58:11.17 ID:mnsZs1hI
>>935
難しい
実際にC++を使ってる人間の間ですら
極端にイメージするものが違うのも一因
939デフォルトの名無しさん:2014/04/24(木) 11:22:47.53 ID:5ftIJb20
C++でプログラミング学んだ人は偏見に染まってる感があるね
C++こそ正当なオブジェクト指向言語だと思い込んでたり・・
940デフォルトの名無しさん:2014/04/24(木) 15:55:03.07 ID:29x10p2Y
>>935
本物のプログラマたちが使う唯一のプログラム言語だよ
941デフォルトの名無しさん:2014/04/24(木) 16:08:35.89 ID:mnsZs1hI
本物のプログラマは複数使い分ける
942デフォルトの名無しさん:2014/04/24(木) 18:53:13.69 ID:fAk9I7UT
>>939
その見解も偏見だと思うけどな
Cから入って、C++のクラスは特定の使い方を想定して砂糖まぶした構造体だと理解する人も結構居るだろ
だからと言ってオブジェクト指向の源流を辿りに行くかどうかは別問題だが…
あれだ、関数型言語を食わず嫌いしてる手続き型言語ユーザだって、そういう概念があることは知ってる的な
943デフォルトの名無しさん:2014/04/24(木) 19:58:37.02 ID:AklGWvZ+
構造体に関数も入れれるのがクラスって感じだったな
944デフォルトの名無しさん:2014/04/24(木) 20:06:48.17 ID:mnsZs1hI
モダンC++どころじゃないってか
945デフォルトの名無しさん:2014/04/24(木) 20:16:31.22 ID:E/S2XTBi
むしろ例外の実現が困難ではないか
946デフォルトの名無しさん:2014/04/24(木) 21:03:48.20 ID:tXCIarBm
>>942
その理解だと virtual の存在意義にしばらく悩むことになる

>>945
SjLj 以外の実装を知りたいものだ
947デフォルトの名無しさん:2014/04/24(木) 22:04:47.58 ID:fAk9I7UT
>>946
え?関数ポインタの入った構造体へのポインタを砂糖振って使いやすくした奴でしょ、あれ。
やっぱ、C++流オブジェクト指向って使い方を想定して砂糖まぶした構造体じゃないですか。
// この理屈で行くと様々なプログラミング言語の機能が〜に毛が生えただけになりますが。
948デフォルトの名無しさん:2014/04/24(木) 22:43:05.57 ID:7Hb7UgBC
ある基底クラスを元に派生クラスを定義し
その派生クラスを別のクラスのメンバーとすることを継承って言うの?
949デフォルトの名無しさん:2014/04/24(木) 22:56:22.26 ID:tXCIarBm
>>948
どちらかというと委譲という気が
950デフォルトの名無しさん:2014/04/25(金) 08:28:10.22 ID:cnGbwKBG
>>948
派生クラスを定義する所までか派生じゃね?
951デフォルトの名無しさん:2014/04/25(金) 14:12:44.94 ID:kZbj9xjz
ごめん
継承と委譲の違いを教えて
952デフォルトの名無しさん:2014/04/25(金) 14:22:59.64 ID:zjeu9d2L
自分がパワーアップするか他人の力を借りるかの違い
953デフォルトの名無しさん:2014/04/25(金) 15:25:06.04 ID:jPmvuOB6
社員を増やすかアウトソースするかの違い
954デフォルトの名無しさん:2014/04/25(金) 16:03:08.19 ID:uPsm+e3e
>>951
継承は例えば親クラスの ret_type func(Nanka* arg) を使いたかったら
以下のようにする
class Foo : public vritual OtherClass
{//以下省略

委譲は例えば他のクラスの ret_type func(Nanka* arg) を使いたかったら
以下のようにする
class Goo
{
private:
 OtherClass* m_pDelegator;
public:
 ret_type func(Nanka* arg){
  return m_pDelegator->func( arg );
 }
};
955デフォルトの名無しさん:2014/05/06(火) 19:03:17.01 ID:2s3fltSJ
変数や関数の名前ってどうやって決めてる?
いちいち辞書を引いて、誰も読めない正しい英語を書くのはもううんざり
956デフォルトの名無しさん:2014/05/06(火) 19:36:25.17 ID:wMsmsiA/
しばらくやってたら、ある程度使う単語は決まってくると思う
957デフォルトの名無しさん:2014/05/06(火) 20:42:03.54 ID:Jq5zOSvx
そういうもんかな
返答ありがとう
958 ◆QZaw55cn4c :2014/05/06(火) 23:06:29.20 ID:R4LFdeTL
>>954
委譲の方、Goo のコンストラクタにも何かしら要るんじゃないの
959デフォルトの名無しさん:2014/05/06(火) 23:18:08.81 ID:i07kpOvT
質問させてください。
以下のプログラムをグローバル変数を使わず同じ処理をさせるにはどうすればいいのでしょうか?
グローバル変数を使うのはあまり良くないと聞いたのですが、どうにもそのやり方が思い浮かびません。
簡単にでもいいので、よろしくお願いします。

#include<stdio.h>

int life=1000;
int Atk(int damageSatan){ // (勇者のライフ−被ダメ) を処理する関数
printf("魔王の攻撃。勇者は%dのダメージを受けた\n",damageSatan);
return life - damageSatan;
}
int Recover(int kaifuku){ // (勇者のライフ+回復) を処理する関数
printf("勇者は薬草を使った。%d回復した。\n",kaifuku);
return life + kaifuku;
}
void gennzai(void){ //現在のライフを書き出すだけの関数
printf("現在のライフ%d\n",life);
}

int main(void){
gennzai();
life=Atk(400);
gennzai();
life=Recover(50);
gennzai();
life=Atk(200);
gennzai();

while(1){};
}
960デフォルトの名無しさん:2014/05/06(火) 23:25:50.28 ID:XedF2XR6
本題と関係ないけど命名規則とコメントがクソい
961デフォルトの名無しさん:2014/05/06(火) 23:31:57.27 ID:i07kpOvT
>>960
その辺は初心者ということで目を瞑っていただきたいです。
コメントはつけていなかったのですが、他人が見る時に有ったほうがいいと聞いていたので
適当ではありますが急遽付け足しました。
命名規則もおいおい勉強していきたいと思います。
962デフォルトの名無しさん:2014/05/06(火) 23:32:25.81 ID:WjTWSVZo
>>959
これじゃあかんの?
ttp://ideone.com/iVu0sr
963デフォルトの名無しさん:2014/05/06(火) 23:43:12.17 ID:i07kpOvT
>>962
おお!わざわざこんなサイトまで使って直していただいてありがとうございます。
コピペしてビルドしてみたら全く同じ結果になりました。

各関数の引数にそれぞれlifeを入れたら良かったんですね!
書いていただいたソースをよく見て勉強してきます
どうもありがとうございました!
964デフォルトの名無しさん:2014/05/06(火) 23:47:21.66 ID:WjTWSVZo
>>963
結果が全てならいいけど
スマートかどうかは別問題だからね
965デフォルトの名無しさん
>>964
今のところはスマートさとか考えている余裕はありませんが、スマートな方が当然良いですよね
頑張ります