2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2012/07/15(日) 02:05:11.71 .net
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
18 http://hibari.2ch.net/test/read.cgi/tech/1291571263/
19 http://hibari.2ch.net/test/read.cgi/tech/1308106024/
20 http://toro.2ch.net/test/read.cgi/tech/1316013463/

2 :デフォルトの名無しさん:2012/07/15(日) 05:19:14.36 .net
>>1
これは乙じゃなくてポニーテールがうんたら

3 :デフォルトの名無しさん:2012/07/19(木) 00:57:39.04 .net
枯れ木過ぎてこのまま落ちそうだな

4 :デフォルトの名無しさん:2012/07/21(土) 09:19:51.06 .net
びよーね・すっぽすっぽ先生を讃えるスレということで

5 :デフォルトの名無しさん:2012/07/21(土) 18:06:16.04 .net
コード -1073741819 で終了してしまう
くっそー

6 :デフォルトの名無しさん:2012/07/22(日) 21:02:02.95 .net
すいません。教えてください。
入力された引数をトークンに分解するプログラムなのですが、
#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 .net
readcmdline()のargs自体は、main()のargsへのポインタが代入されているから
* args = ... で代入することは問題がないはず。
問題なのは、その行ではなくてその一つ前の行。

8 :デフォルトの名無しさん:2012/07/22(日) 21:53:41.15 .net
>>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 .net
>int readcmdline(FILE *i, FILE *o, char ***args)
ここに書いてるやん

10 :デフォルトの名無しさん:2012/07/22(日) 22:37:55.30 .net
typedef char ** charPtrPtr;とでもして、charPtrPtr * argsとでもしたらわかるかも知れない。

11 :デフォルトの名無しさん:2012/07/22(日) 22:42:29.82 .net
う〜ん、
http://www.nurs.or.jp/~sug/soft/tora/index.htm
あたりを読んで勉強してきます。


12 :デフォルトの名無しさん:2012/07/23(月) 18:34:58.44 .net
質問です。C++の設計者はどうしてあんなに分かりにくい仕様にしたんですか?

13 :デフォルトの名無しさん:2012/07/23(月) 19:43:37.38 .net
>>12
Cのコードを使えるようにするため

14 :12:2012/07/24(火) 03:10:13.53 .net
Cとの互換性の確保と、オブジェクト指向の概念の分かりにくさは、直接関係ないような気がしますが…。

15 :デフォルトの名無しさん:2012/07/24(火) 04:30:19.43 .net
実はオブジェクト指向ってしっくりこないんです!

16 :デフォルトの名無しさん:2012/07/24(火) 13:20:59.45 .net
質問ですが
__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 .net
>>16
最適化したらどうなる?

18 :16:2012/07/24(火) 13:38:32.87 .net
>>17
すでに最適化(/O2)はかけています。
このコードではiの範囲とsetbitを指すポインタの有無を
コンパイラが分からない事が原因なのではと考えています。

ちょっと逆アセも確認してきます。

19 :16:2012/07/24(火) 13:47:24.27 .net
逆アセでもほぼ同様でした。
(インライン展開された関係でレジスタが変わっただけ)

20 :デフォルトの名無しさん:2012/07/24(火) 16:18:12.44 .net
Compiler Intrinsicsって割りと腐ってるのな

21 :16:2012/07/24(火) 22:21:23.72 .net
__int64 setbit;
setbit = 1ull << i;
だと
mov ecx, r8d
mov edx, 1
shl rdx, cl
になるのでとりあえずシフトを使うコードにしておいて
別の場所の最適化をしときます

22 :デフォルトの名無しさん:2012/07/25(水) 08:39:40.58 .net
C言語でstaticを関数に付けると外部のファイルから参照できないということですが
他にも何かの効果があった気がします。
以下のような効果があるかどうか教えてください。

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

以上について教えてください。

23 :デフォルトの名無しさん:2012/07/25(水) 09:21:25.07 .net
>>22
関数の所在は元々固定的なので、呼び出しが高速になるわけではありません。
但し、コンパイラによっては静的関数のみ、インライン展開するので効果がないというわけでもありません。
また、自動変数は意味的に呼び出しごとに別のものでなければならないので静的関数ないであろうと静的にはなりません。

24 :デフォルトの名無しさん:2012/07/25(水) 15:54:41.77 .net
簡潔でわかりやすい回答ありがとうございます

25 :デフォルトの名無しさん:2012/08/05(日) 10:57:58.16 .net
PeekMessageで自分で選んだメッセージだけ処理したいのですが
PeekMessageを呼んだときに、他のウィンドウのWNDPROCも
呼ばれてしまうようです。

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

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

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

Windows XP、Visual C++ 2010 Expressです。

26 :デフォルトの名無しさん:2012/08/05(日) 11:20:49.61 .net
>>25
ttp://msdn.microsoft.com/ja-jp/library/cc410948.aspx
他のウィンドウのWNDPROCも呼ばれてしまうようです。の意味がわからない
PeekMessageはあくまでスレッドに関連付けられたメッセージキューからメッセージを取ってくるだけ
メッセージのディスパッチはしない

27 :25:2012/08/06(月) 08:59:38.27 .net
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 .net
スレを勃てる必要のある、低俗でないC/C++の質問って例えばどんなのですか?

29 :デフォルトの名無しさん:2012/08/29(水) 09:03:49.48 .net
最新の規格に関する質問

30 :デフォルトの名無しさん:2012/08/29(水) 09:05:20.75 .net
>>28
最新の規格に関する質問
C++11/C++1y 15
http://toro.2ch.net/test/read.cgi/tech/1333433900

31 :デフォルトの名無しさん:2012/08/29(水) 09:18:58.34 .net
>>28
【C++】高速化手法【SSE】
http://toro.2ch.net/test/read.cgi/tech/1130349336/

32 :デフォルトの名無しさん:2012/09/02(日) 00:06:22.82 .net
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 .net
別に超えないけど

34 :デフォルトの名無しさん:2012/09/02(日) 00:54:26.47 .net
符号無しintは0〜65535だろ

35 : 忍法帖【Lv=40,xxxPT】(-2/5:0) :2012/09/02(日) 00:59:26.98 .net
>>34
32ビットなら0〜4,294,967,295

36 :デフォルトの名無しさん:2012/09/02(日) 02:35:49.03 .net
そうだったんですね
言い方を変えます

もしstrcpy_sの第2引数(文字列操作関数の文字数を渡す部分)が
受け取る型以上の数値を渡したい場合対応する関数って何ですか?


37 :デフォルトの名無しさん:2012/09/02(日) 02:44:59.26 .net
キャスト以外の方法聞いてんのか?
その場合32bit以上コピーしようとしてることになるってのは理解できるか?

38 :デフォルトの名無しさん:2012/09/02(日) 03:58:53.38 .net
>>36
strcpy_sの第2引数ってバッファのサイズで、size_tだったと思うけど
この型で表現できるサイズより大きいメモリは確保できないから考えるだけ無駄だと思うけど

39 :デフォルトの名無しさん:2012/09/02(日) 16:17:15.72 .net
>>37
理解できます
32bit以上の文字数を扱う場合も書いた方が安全なのかって考えすぎてました

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

ありがとうございました

40 :デフォルトの名無しさん:2012/09/16(日) 21:00:45.28 .net
Visual C++ 2010 Expressで質問です。

メンバイニシャライザで、包含しているインスタンスのメンバ変数も
初期化できますか?
error C2059: 構文エラー : '.'というエラーが出てしまいます。

41 :デフォルトの名無しさん:2012/09/16(日) 21:20:37.41 .net
無理


42 :デフォルトの名無しさん:2012/09/16(日) 21:36:29.32 .net
まじですか…ションボリ

43 :デフォルトの名無しさん:2012/09/26(水) 19:39:54.77 .net
インスタンスって参照渡しすれば使いまわせますか?

44 :デフォルトの名無しさん:2012/09/26(水) 19:43:43.65 .net
あんたの気持ちしだいだな
高潔な魂をもった人間なら使いまわせる

45 :デフォルトの名無しさん:2012/09/26(水) 20:54:48.25 .net
delete this; するまでは生きてるんじゃね

46 :デフォルトの名無しさん:2012/09/26(水) 21:03:01.85 .net
はぁ、そうですか
ありがとうございました

47 :デフォルトの名無しさん:2012/10/04(木) 21:27:30.00 .net
C言語の勉強をしているのですが、タイマーを使ったプログラムの仕組みというか概念がよくわかりません。
抽象的な質問で申し訳ないですが、わかりやすく説明して頂けないでしょうか。

48 :デフォルトの名無しさん:2012/10/04(木) 21:42:45.73 .net
もう少しわかりやすく質問文を変更して欲しい

49 :デフォルトの名無しさん:2012/10/04(木) 22:13:44.26 .net
>>47
イベントドリブン形式のプログラムを書いてみるとわかるよ

50 :デフォルトの名無しさん:2012/10/04(木) 22:54:27.01 .net
>>47
割り込み を検索すればいい。

51 :デフォルトの名無しさん:2012/10/05(金) 00:02:44.49 .net
>>47
定期的に関数を呼び出してもらうための仕組み


52 :デフォルトの名無しさん:2012/10/08(月) 11:03:44.25 .net
C++で質問です。

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

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

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

というエラーが出るのですが、どこが間違っているのでしょうか
インクルードは問題無いです…

53 :52:2012/10/08(月) 11:05:11.57 .net
書き忘れました、クラスの前方宣言もしています

54 :デフォルトの名無しさん:2012/10/08(月) 11:09:50.14 .net
ttp://ideone.com/oDblr
もっと詳しく書かないと
何が問題になってるのかわからんぞ

55 :デフォルトの名無しさん:2012/10/08(月) 11:19:42.21 .net
>>54さんありがとうございます
>a.obj1.funcB();

obj1.funcB();
としていたみたいです。

56 :デフォルトの名無しさん:2012/10/08(月) 11:22:48.05 .net
あぁ、ドット演算子じゃなくてアロー演算子の方なのですが
a->obj1.->uncB();
としてもエラーでした
error C2065: 'obj1' : 定義されていない識別子です。
error C2227: '->funcB()' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
となります。

57 :デフォルトの名無しさん:2012/10/08(月) 11:32:14.20 .net
>>56
ttp://ideone.com/rRd0H
前方宣言だけでそのクラスのメンバ変数を使おうとしてないか?

58 :デフォルトの名無しさん:2012/10/18(木) 11:47:36.31 .net
C# expressを使用しています

フォームにTopMost=Trueを設定し、最前面に表示させながらフォームは決して
アクティブウィンドウにならないようにしたいのですが、どのような方法がスマートなのでしょうか?
マウスクリックは透過させているのですが、フォームの位置やサイズを変更すると
勝手にアクティブになってしまい困っています


59 :デフォルトの名無しさん:2012/10/18(木) 13:39:09.01 .net
ふらっとVisual C#,C♯,C#(初心者用) Part98
http://toro.2ch.net/test/read.cgi/tech/1349163087/

60 :デフォルトの名無しさん:2012/10/18(木) 18:34:34.06 .net
誘導ありがとうございます♪

61 :デフォルトの名無しさん:2012/11/15(木) 04:09:15.82 .net
質問です
std::wstring型の文字列(reserve済)に、1文字だけ追加したい場合、
最も高速と思われる関数はどういったものになりますでしょうか。
wstr.append()では、wchar_t型の文字入力は受け入れてくれないようなので…。
おねがいします。

62 :61:2012/11/15(木) 04:29:35.78 .net
pushbackがあったんですね。
解決しました。失礼しました。

63 :デフォルトの名無しさん:2012/11/17(土) 23:45:52.56 .net
windowsで連続したメモリを確保するには、どの関数を使うのが一番なのでしょうか?

64 :デフォルトの名無しさん:2012/11/18(日) 00:00:45.48 .net
virtualalloc

65 :デフォルトの名無しさん:2012/11/18(日) 00:11:45.03 .net
>>64
ありがとう

66 :デフォルトの名無しさん:2012/12/01(土) 13:54:01.29 .net
知恵を貸してください。
gccとmakeで開発しています。C++でなくCの範囲での開発です。

適切な値が設定されないまま、関数ポインタによる呼び出しが行われてしまうのを
回避する方法を探しています。
以下に例を示します。

67 :デフォルトの名無しさん:2012/12/01(土) 13:56:05.94 .net
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 .net
問題は、handlers構造体の仕様を変更、特にメンバを追加したときです。
上記のソースコードに、(1)構造体宣言にメンバ(関数ポインタ型)を追加し、
(2)main()内に呼び出し文を追加、
するところまでは良いのですが、ここでプログラマがミスをして、
新たに追加されたメンバを初期化するコードを書き忘れたとします。
コンパイルは成功してしまい、プログラム実行時に異常が発生してしまいます。

追加メンバ分の初期化コードの書き忘れを、C言語の範囲内で、
コンパイラのエラーや警告で検出する方法はないものでしょうか?
ただし、プログラム実行時のチェックによる方法は不可とします。

69 :デフォルトの名無しさん:2012/12/01(土) 14:10:29.43 .net
長くてごめんなさい。

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

失敗例2
メンバ初期化のための原型となるhandlers変数を1個用意して、
構造体初期化子{}を使って初期化する方法。
[{}内の項目の個数]より[構造体メンバの数]のほうが多くてもコンパイルエラーになってくれないのでNG。

70 :66:2012/12/01(土) 15:01:37.74 .net
補足です。
例題のソースコードでmain()内の呼び出し部分の配列添え字がおかしくなってます。
すみませんです。

71 :デフォルトの名無しさん:2012/12/01(土) 23:24:04.16 .net
最近入門してロベールの本読み終えたんだけど
テンプレートとかboostとか駆使したり、コードインジェクトとかいう謎の技術でDirectXをハックしているソース見てしまって
底の深さに愕然としてしまった

こういうバッドノウハウ的なものや、boost、C++11などの最新技術をスマートに学ぶにはどうしたらいいかね
おすすめのソースとか書籍あったら紹介してもらえると嬉しい

72 :デフォルトの名無しさん:2012/12/04(火) 22:14:29.22 .net
java屋さんの自分は、thisが大好きです。
C++でもjavaのようにthis使っていいですか?

73 :デフォルトの名無しさん:2012/12/04(火) 23:54:34.62 .net
>>72
Javaと違ってC++はポインタなんでそこだけ注意

74 :デフォルトの名無しさん:2013/02/01(金) 20:04:32.00 .net
C++の勉強の最初の一冊はロベールとC++プログラミング入門(オライリー)のどっちが

75 :デフォルトの名無しさん:2013/02/03(日) 20:00:53.10 .net
C初心者の低俗な質問ですみません。
/* foo /* bar */ baz */ のようなコメントのネストが許されない
仕様になっているのはなぜなんでしょうか。
Cコンパイラがforやifブロックのネストを解釈できるのなら /* 〜 */ のネストだって
理解可能だと思うんですが、コンパイラが混乱することでもあるんでしょうか。

76 :デフォルトの名無しさん:2013/02/03(日) 20:10:06.02 .net
>>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 .net
/* を含む文字をコメントに入れられないから・・・と言いたいけど
*/ を含めない問題は放置なので多分関係ない

78 :デフォルトの名無しさん:2013/02/03(日) 21:07:18.96 .net
>>77
単に、処理がちょい面倒で、そんなに必要性を感じなかっただけでしょ。

79 :デフォルトの名無しさん:2013/02/03(日) 23:13:23.18 .net
まあ手抜きだな

80 :デフォルトの名無しさん:2013/02/03(日) 23:21:25.89 .net
そのせいで#if 0の方を多用しちゃう

81 :デフォルトの名無しさん:2013/02/03(日) 23:25:14.89 .net
範囲が広い場合は#if 0しかもう使わないな

82 :デフォルトの名無しさん:2013/02/03(日) 23:56:20.98 .net
逆にもし/* 〜 */ のネストが許される仕様だとコンパイラが処理(判断)に困る。。。
そんな記述の具体例ってあるでしょうかね。
自分はまったく思いつかないのですが。。。

ところで本当をいいますと、今私が使っているのはMQLって言語でして、仕様的にほとんどC言語なんですが
#ifや#ifdef系のプリプロセッサが一切ないんで、上記のワザが使えないんです。
そのくせにコメントがネストできないという負の遺産(?)はシッカリ受け継いでいるんです(>。<)

83 :デフォルトの名無しさん:2013/02/04(月) 00:12:58.68 .net
>>82
別にないでしょ、あなたの言う通りforやifブロックのネストを解釈できるのなら
/* 〜 */ のネストだって理解可能だと思うよ
本当にほんのちょっとだけコンパイラ(プリプロセッサか)の処理が面倒なだけで

たまたま不便な仕様だったと諦めるしかないね

84 :デフォルトの名無しさん:2013/02/04(月) 00:15:49.45 .net
一行コメントがあるなら、全部一行コメントでコメントアウトしてしまう手はある
エディタにその機能がなければ、マクロで機能追加したり

85 :82:2013/02/04(月) 00:49:43.20 .net
みなさん、レス感謝します。
ちなみに自分がやっているのは、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 .net
フラグ使うと動作に影響するしねえ
ま、しゃーないんじゃない

87 :デフォルトの名無しさん:2013/02/04(月) 13:03:22.44 .net
組込みで開発環境してエラーだらけになったと思ったら、
/**/ネストできるコンパイラだった・・・

88 :デフォルトの名無しさん:2013/02/04(月) 20:11:54.31 .net
たまにそういう処理系あるよね

89 :デフォルトの名無しさん:2013/02/05(火) 01:47:00.36 .net
>>85
>さらにこのif前後の処理ブロックをまとめて一時的にコメント・アウトしてテストするってことです。

こっちは #if 0 とかで良いんじゃないの?

90 :デフォルトの名無しさん:2013/02/05(火) 01:49:21.06 .net
>#ifや#ifdef系のプリプロセッサが一切ないんで、上記のワザが使えないんです。

91 :デフォルトの名無しさん:2013/02/05(火) 01:49:43.91 .net
プリプロセッサが無いっての

92 :デフォルトの名無しさん:2013/02/05(火) 05:03:13.31 .net
行コメント使え
いちいち一行づつコメントアウトするのがめんどくさいとか言うのは無しな
そんなもん、エディタの設定(マクロとか)で、大抵なんとかなる

もしかして、行コメントもないのか?

93 :デフォルトの名無しさん:2013/02/05(火) 05:06:12.36 .net
行コメントも無いの?
俺はエディタのマクロとかで、選択行全部を行コメントアウト出来るようにしてるよ

94 :デフォルトの名無しさん:2013/02/05(火) 07:15:25.36 .net
お前ら>>85も読めよ・・・

95 :85:2013/02/05(火) 09:14:07.22 .net
私のせいでスレが荒れてしまったようですね。すみません。
コーディングのアイデアをお寄せいただけるのは有難いのですが、
私の質問は
・(コメントのネストを)どうやればいいのでしょうか?
ではなくて、
・(ネストできない仕様は)なぜなんでしょうか?
です。

実際は、コメントアウトしたい部分は関数の中だし、任意の文字列を埋め込みたいわけじゃないので
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 .net
>>95
多分、解析できない記述が存在するからだと思う

/*
int a=1;
int *p=&a;
int b=2/*p;
*/

97 :デフォルトの名無しさん:2013/02/05(火) 21:02:18.41 .net
その例は「コメントが閉じられていない」と正しく解析できると思うけど

98 :デフォルトの名無しさん:2013/02/05(火) 21:19:07.86 .net
>>97
それは正しくない

99 :デフォルトの名無しさん:2013/02/05(火) 21:23:49.12 .net
そもそも外側のコメントがない状態で
コメントになってしまう問題のある記述じゃないのか?

100 :デフォルトの名無しさん:2013/02/05(火) 22:01:51.44 .net
だからこそ>>97が正しいと思うんだけど
そうじゃないらしいな

101 :デフォルトの名無しさん:2013/02/05(火) 22:27:28.60 .net
みんな分かってるようだが俺には96が何をいいたいのかさっぱりわからん

102 :デフォルトの名無しさん:2013/02/05(火) 22:37:23.08 .net
b = 2 / (*p);
2 / 1なのかコメント最初の/*なのか
じゃないのか?

103 :デフォルトの名無しさん:2013/02/05(火) 22:42:18.89 .net
>>102
正解!

104 :デフォルトの名無しさん:2013/02/05(火) 22:51:30.41 .net
そう言いたいんだろうってのは伝わるがコメント開始なのが明白だからな・・・

105 :デフォルトの名無しさん:2013/02/05(火) 22:56:44.09 .net
>>104
何で?

106 :デフォルトの名無しさん:2013/02/05(火) 23:02:49.61 .net
>>105

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

ならネスト出来る仕様だったら>>97の言う通り「コメントが閉じられていない」と解釈されるのが自然だし、
普通にコメントのネストを解釈するそう解釈する処理系はもちろん作れる。

107 :106:2013/02/05(火) 23:04:10.76 .net
途中送信してしまった。
そもそも式がどうとか解釈する前にプリプロセッサがコメントを除去するんだから>>102みたいな曖昧性は生じないんじゃないの。

108 :デフォルトの名無しさん:2013/02/05(火) 23:07:36.52 .net
その除去でプログラマが意図しないコメント解釈されたらどうなるか

109 :デフォルトの名無しさん:2013/02/05(火) 23:11:55.81 .net
ネスト出来ない仕様 → コメントを外すと問題が起こる
ネスト出来る仕様 → コメントを外しても外さなくても問題が起こる

どちらにせよ問題があるので
無関係としか言いようが無い

110 :デフォルトの名無しさん:2013/02/05(火) 23:22:52.15 .net
2/*pの/*をコメント開始と捉えて、コメント閉じられてないからってコンパイルできなくなるのはCの規格上どうなの?

111 :デフォルトの名無しさん:2013/02/05(火) 23:27:47.32 .net
そもそも演算子をあまりくっ付けて書くべきではないってこった
字句解析的な意味で

112 :デフォルトの名無しさん:2013/02/06(水) 05:28:06.84 .net
いずれにしても混乱が起こる事がわかっているのなら、わざわざ複雑な機能はいれないだろ
費用対効果悪すぎって判断じゃね?
って言うか、D&E読む限り、行コメントの方を推奨している模様

113 :デフォルトの名無しさん:2013/02/06(水) 07:29:14.06 .net
一方D言語はネスト可能な /+ +/ を導入した

114 :デフォルトの名無しさん:2013/02/06(水) 08:15:00.54 .net
ソースにインベーダーの敵が侵入するわけか

115 :デフォルトの名無しさん:2013/02/06(水) 10:36:31.92 .net
なるほど、除算ポインタ演算子か(なんて言うんだっけ?*pの演算子)

116 :デフォルトの名無しさん:2013/02/06(水) 10:58:38.92 .net
>>110
規格上は問題なくて、単にコンパイラの不備だとおもう
ソースを読み終えた時点で「/*」に対する「*/」が見つからなければ、除算演算子とポインタ演算子の組み合わせって判断できるからね

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

ちなみに入れ子コメントに意味があるか、を問題にするのはナンセンス
正しく構文が解釈できる限り、プログラマに対する制限は緩い方向(自由度が高い方向)へ仕様設計すべきだからね
メモリーやディスク容量、コンパイル時間等によって制限されるなら仕方ないと言えるが

117 :116:2013/02/06(水) 11:05:32.14 .net
すまん、訂正させて欲しい
誤> 規格上は問題なくて、単にコンパイラの不備だとおもう
正> 規格には問題ないのにエラーとして処理するのはコンパイラの不備だとおもう

118 :デフォルトの名無しさん:2013/02/06(水) 15:09:16.63 .net
トークン分割の妨げにならなければ空白の数は無視するんだっけ?? ※文字列中は例外だけど。

119 :デフォルトの名無しさん:2013/02/06(水) 17:06:29.80 .net
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 .net
ttp://codepad.org/S2TcBwvl
エラー出ないけど

121 :デフォルトの名無しさん:2013/02/06(水) 17:20:48.07 .net
>>119
C89規格でコンパイルしているからでしょう

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

としたら大丈夫。
変数の宣言がブロックの先頭になければならない。

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

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

123 :デフォルトの名無しさん:2013/02/06(水) 17:22:41.77 .net
おっとリロードしてなかった、すまん

124 :デフォルトの名無しさん:2013/02/06(水) 19:13:06.06 .net
>>116
じゃあさ、やってみてよ。
gccならオープンなんだからさ。
口だけなら、誰でも言えるんだよなー。

125 :デフォルトの名無しさん:2013/02/06(水) 20:08:49.32 .net
>>116
アホか
コメントはコンパイラじゃなくプリプロセッサが処理するんだよ
演算子なんて解析しねーよ

126 :デフォルトの名無しさん:2013/02/06(水) 20:46:36.31 .net
そうか!わかった!!
ifはコンパイラが処理するからネストできるけど
コメントはプリプロセッサが処理するからネストできない
ってことですね!

127 :デフォルトの名無しさん:2013/02/06(水) 21:04:10.66 .net
違う。たとえば#ifはプリプロセッサが扱うがネスト出来る
http://ideone.com/rKasOJ

128 :デフォルトの名無しさん:2013/02/06(水) 21:15:56.31 .net
>>127
わざわざありがとうございます!
コメントと間違うから/と*は離して書きましょう
ってことですね!
じゃあ 結局 コメントがネストできない理由ってなんすかねー Orz

129 :デフォルトの名無しさん:2013/02/06(水) 21:49:28.29 .net
昔の人がそう決めたから。それ以上でも以下でもない
なぜ昔の人がそう決めたかと気になるかもしれないが、たいてい当時の技術的には難しかったとかそんなもんさ

130 :デフォルトの名無しさん:2013/02/06(水) 22:17:50.29 .net
if/for → ネストできる
/* */ → ネストできない
両者を分かつ技術的困難が何なのか興味あるな。
カーニハンの存命中に尋ねてみたい。

131 :デフォルトの名無しさん:2013/02/06(水) 22:38:38.93 .net
そうそう
わざわざサポートするメリットが無いとか、どうせそんな理由だよ
そもそも、コメントはネストさせるようなものでは無いし
デバッグで一時的に〜とかは、本来の使い方ではないわな

132 :デフォルトの名無しさん:2013/02/06(水) 22:41:38.10 .net
>>130
コメントをコンパイルするとか、空間的にも時間的にも、ムダばかりでメリットがない

133 :デフォルトの名無しさん:2013/02/06(水) 22:41:42.35 .net
本当にコメントを書く事しか頭に無かったんだろうな
コメントアウトは考慮外というか

134 :デフォルトの名無しさん:2013/02/06(水) 22:47:07.83 .net
技術的な困難といえば、構文解析だろな

C++でもあったろ?テンプレート書くときの括弧が場合によって演算子に判断されるようなの
それが昨今の構文解析技術の進歩で解消されたあれ

135 :デフォルトの名無しさん:2013/02/06(水) 23:02:55.09 .net
技術の進歩というか
単にそういう仕様変更をしただけというか

136 :デフォルトの名無しさん:2013/02/06(水) 23:11:01.67 .net
>>132
>コメントをコンパイルするとか、
誰もそんなことは言ってないが?

137 :デフォルトの名無しさん:2013/02/06(水) 23:12:23.75 .net
プリプロセスでもなんでもいいから
とにかく処理したくないってことだろう
昔はコンパイル凄く遅かったから
コメントアウトするくらいなら削除したんだろうよ

138 :デフォルトの名無しさん:2013/02/06(水) 23:16:03.47 .net
ムダばかりなら最新の言語がサポートするはずないよな
http://wisdom.sakura.ne.jp/programming/d/d3.html

139 :デフォルトの名無しさん:2013/02/06(水) 23:27:21.45 .net
ただの歴史的な理由以外に特に理由は無い

140 :デフォルトの名無しさん:2013/02/06(水) 23:27:54.86 .net
>>137
これは一理あると思う。
そうでなくともifブロックやforループの解析で
どこまでソースを読み込まなくちゃならないかわからないのに
コメントごとき(笑)でワーキングメモリを消費したくないとか。
そりゃコメントネストの方が優先順位が低いわな。
「あん時 研究所にあったマシンがPDPじゃなくてVAXだったら
ワシらもちゃんと実装しておったよ」とかw

141 :デフォルトの名無しさん:2013/02/07(木) 00:35:51.33 .net
蒸し返して悪いんだが、仕様上は/(除算)の後にスペースを入れるように規定されてるって理解すればいいのかな
今まで""の中以外ではスペースは入れても入れなくてもどちらでもいいと思っていたからこれは盲点(不勉強)だった
b=2/*p; b=2 / *p;

142 :デフォルトの名無しさん:2013/02/07(木) 07:18:42.35 .net
スペースを入れるように規定されているというか、
スペースを入れないとコメントになってしまうように規定されているんだよ

143 :デフォルトの名無しさん:2013/02/07(木) 10:14:45.56 .net
>>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 .net
あの世から「だから#ifとか用意してやってるのに 最近の若いモンは!」みたく言われちゃいそうw

145 :デフォルトの名無しさん:2013/02/07(木) 19:46:12.57 .net
#ifの方がparseしやすいってことなのか

146 :デフォルトの名無しさん:2013/02/08(金) 06:36:34.76 .net
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 .net
> 2GBくらいまではできるはず
ただの妄想だろ
環境くらい書け

148 :デフォルトの名無しさん:2013/02/08(金) 09:17:28.49 .net
環境
OS Vista Home 32bit
メモリ3GB

メモリクリーナーでは2GB超のメモリを空きメモリにできるのですが
その後>>146を試しても1.6GBしか確保できません

149 :デフォルトの名無しさん:2013/02/08(金) 09:52:54.78 .net
仮想と物理をごっちゃにしてるような気がする... (´・ω・`)

150 :デフォルトの名無しさん:2013/02/08(金) 12:34:48.24 .net
連続した1.6GB超えの領域がないんだろ。

151 :デフォルトの名無しさん:2013/02/08(金) 23:08:49.00 .net
>>149
物理メモリ3GB
仮想メモリ4GB
です

>>150
1度に2GBを確保しようとしているのではなくて
>>146のソースで示した通り小分けにして確保しています

152 :デフォルトの名無しさん:2013/02/08(金) 23:20:00.68 .net
32bitならそういうもんなんじゃねーの

153 :デフォルトの名無しさん:2013/02/09(土) 00:35:50.26 .net
タスクマネージャでメモリサイズ見れば?

154 :デフォルトの名無しさん:2013/02/09(土) 03:19:49.29 .net
タスクマネージャのパフォーマンスタブの空きメモリがまだあっても
プロセスタブにあるメモリ列が1.6GBになると止まってしまいます

155 :デフォルトの名無しさん:2013/02/09(土) 08:57:06.04 .net
>>147
プロセス毎に動的確保できるのは2GBまで

156 :デフォルトの名無しさん:2013/02/09(土) 12:52:49.47 .net
VC++は16バイトなんて噂もあるから、一度16バイトで試してみればいいんじゃ

157 :デフォルトの名無しさん:2013/02/09(土) 14:28:23.13 .net
メモリ関連で思い出した
mallocで小分けにして物理メモリの空き領域以上を確保したら
それ以外の既存のデータがページファイルに追いやられるよね

これで一応メモリ掃除できたとか思ってたけど
見かけ上空きメモリが増えただけで
メモリクリーナーはまた別のやり方でメモリ空けてんの?

158 :デフォルトの名無しさん:2013/02/09(土) 16:38:58.76 .net
>>154
ならWindowsはそういうものなのかもね

159 :デフォルトの名無しさん:2013/02/09(土) 18:53:40.35 .net
>>157
メモリクリーナーも一緒(mallocじゃなくて別の関数かもしれんが)
ページファイルに追いやって、すぐ使える物理メモリを確保する

160 :デフォルトの名無しさん:2013/02/10(日) 01:11:25.69 .net
こういうもんだと納得するしかないんですね
ありがとうございました

161 :デフォルトの名無しさん:2013/02/10(日) 20:42:03.54 .net
mallocやcallocで確保した領域は
プログラム終了時に明示的にfreeするべきでしょうか。
それともやるだけムダでしょうか。

162 :デフォルトの名無しさん:2013/02/10(日) 20:59:42.09 .net
終了時まで確保しっぱなしなの?
使わなくなったタイミングで解放しないの?

163 :デフォルトの名無しさん:2013/02/10(日) 21:09:49.18 .net
>>161
基本的には適切なタイミングで解放しましょう

164 :デフォルトの名無しさん:2013/02/10(日) 23:04:15.12 .net
返事ありがとうございます。
大昔、fj.comp.lang.cでこの辺りが話題になったことがありまして
上でmallocの話が出て思い出しついでにちょっと尋ねてみました。
当時、malloc/callocがメモリを確保するヒープ領域は、プログラム(正確にはプロセスだったか?)終了後に
OSが解放するんだからfreeは不要だ!と主張する人がいたことを憶えています。
プログラムを"安全側"に設計することに嫌悪する人もいたり…

私もfreeするべきだと思います。
プログラムもOSも、それぞれが自分がやったことの後始末は、基本的に
自分の中で責任持って完結するべき、と思ってます。
OSがやってくれるからサボってていいや〜みたいな考え方だと
余計なトラブルを招きかねないですよね。まぁ安全側の考え方ですが。
つまらない話、すみませんでした。

165 :デフォルトの名無しさん:2013/02/10(日) 23:55:27.08 .net
>>164
その手の話は...

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

でやってくれ。

166 :デフォルトの名無しさん:2013/02/11(月) 00:37:45.35 .net
宗教論争っぽくなるからな。。。

167 :デフォルトの名無しさん:2013/02/11(月) 13:34:42.38 .net
>>164
プログラム終了時にOSなりライブラリが自動で解放してくれるのが
保証されているなら、解放処理は書かなくてもいいだろうが、
解放処理が書かれていれば
「このコードを書いた人はメモリをちゃんと把握しているな」
という示しになる。

168 :デフォルトの名無しさん:2013/02/14(木) 17:11:00.62 .net
_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 .net
いま手元にコンパイラがないので想像ですが、宣言を
unsigned int (*sum)(void *);
でしてみたらどうでしょうか?

170 :デフォルトの名無しさん:2013/02/14(木) 17:37:46.89 .net
ありがとうございます
unsigned int (__stdcall *sum)(void*)
としたらいけました

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

UINT (WINAPI *sum)(VOID*)
これくらいでしょうか

171 :デフォルトの名無しさん:2013/02/14(木) 17:46:26.26 .net
>>170
typedef unsigned int (*FUNCPTR) (void *);
FUNCPTR pf;
pf = func;
pf(…);

で良いんじゃないの

172 :デフォルトの名無しさん:2013/02/14(木) 17:56:58.97 .net
__stdcallはWin32APIの独自キーワードですが、それ以外は関数のポインタを
宣言する普通の(標準規格に沿ったの意)書き方です。
下段のように書き換えても本質は同じなんで、私はそんなにスマートさは感じませんけど。。。

173 :172:2013/02/14(木) 18:07:12.62 .net
>>172
すみませんでした。アンカー(>>170)の入れ忘れでしたorz

174 :デフォルトの名無しさん:2013/02/14(木) 18:07:43.21 .net
そこらへんは個人の好みだろ

何回も書くなら>>171みたいにしたらいいと思う
()の位置が気持ち悪いのはわかる

175 :デフォルトの名無しさん:2013/02/14(木) 18:37:45.62 .net
>>170
>今まで書いた事のない書き方なので気持ち悪いです

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

※オレの流儀は sum = &fnFunction; だなぁ。ま、好みの問題だww

176 :デフォルトの名無しさん:2013/02/14(木) 18:50:09.99 .net
>>170
> でもなんか今まで書いた事のない書き方なので気持ち悪いです

関数ポインタの記述のしかたはCの中でも特例だから、
「そういうもんなんだ」と思う以外に選択肢は無い。

177 :デフォルトの名無しさん:2013/02/14(木) 19:33:53.05 .net
__stdcallとかの呼び出し規則は独自拡張だから
括弧の位置がコンパイラによって互換性なくていちいちtypedefしてた記憶がある

178 :デフォルトの名無しさん:2013/02/14(木) 21:09:39.72 .net
>>175
typedef struct hoge {
unsigned int (__stdcall sum)(void*)
};
って事?
hoge.sum hoge->sumができなくね?

179 :デフォルトの名無しさん:2013/02/14(木) 22:50:41.63 .net
>>178
ちょっと175との絡みがわからないけど、hogeはタグ名であって構造体変数じゃないからできないんじゃないの?

180 :デフォルトの名無しさん:2013/02/14(木) 23:14:05.51 .net
こういう事もできる

typedef unsigned int FUNC(void *);
FUNC* pf;
pf = func;
pf(…);

181 :デフォルトの名無しさん:2013/02/14(木) 23:43:30.85 .net
>>179

unsigned int _(_stdcall sum)(void*)とか
hoge.sum = &fnFunction
hoge->sum = &fnFunction
できないんじゃない?

182 :デフォルトの名無しさん:2013/02/14(木) 23:57:18.01 .net
ttp://ideone.com/CKPRSO
こういう話かな?

183 :デフォルトの名無しさん:2013/02/15(金) 00:10:59.25 .net
>>182
コピペの恐怖

184 :デフォルトの名無しさん:2013/02/15(金) 00:12:58.03 .net
182を読んでも178と181が何を言いたいのか良くわからんなぁ
そもそもなんで関数ポインタから関数の型の宣言に話がかわったんだ?

185 :デフォルトの名無しさん:2013/02/15(金) 00:17:24.03 .net
割と知られていない関数の typedef の挙動
http://ideone.com/kwArU8

186 :182:2013/02/15(金) 00:56:48.43 .net
>>183
ああ、指摘ありがとう。間違っていたので直しました
ttp://ideone.com/SZgkp1

187 :デフォルトの名無しさん:2013/02/15(金) 11:34:57.86 .net
>>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 .net
>>187
すまん。うかつだった orz
hoge.sum = &amp;MyFunc; は hoge.sum = &MyFunc;

189 :デフォルトの名無しさん:2013/02/15(金) 12:38:09.52 .net
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 .net
暗黙に、関数は関数ポインタに変換される。
暗黙に、関数ポインタは関数に変換される。

191 :デフォルトの名無しさん:2013/02/15(金) 12:54:20.66 .net
謎が消えたありがとう

192 :デフォルトの名無しさん:2013/02/15(金) 14:11:26.06 .net
昨日から何を聞きたかったのか、やっとわかった… (´・ω・`)

193 :デフォルトの名無しさん:2013/02/15(金) 19:33:21.99 .net
関数呼び出しや配列要素参照の定義って
無駄が多いように思うんだけど何か理由でもあるの?

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

関数が関数ポインタに暗黙に変換されるのなら
関数ポインタ(引数リスト)の定義1つで済む気がするのだが

194 :デフォルトの名無しさん:2013/02/15(金) 19:36:45.92 .net
関数と関数ポインタは違うだろう

195 :デフォルトの名無しさん:2013/02/15(金) 19:58:43.75 .net
関数ポインタ(引数リスト) の定義だけとする

式が必要な箇所で <値 or 括弧式> '(' の並びを見つけた時点で
関数呼び出しであるという判定を行ってパースするはずだけど、
ここでこの <値 or 括弧式> が関数ポインタに変換可能なら良いとすれば
関数も関数ポインタも両方受け付けられるのではなかろうか

196 :デフォルトの名無しさん:2013/02/15(金) 21:24:51.76 .net
有り体に言えば、関数名は、その関数本体のアドレス(ポインタ)を持つということじゃないですかね。

197 :デフォルトの名無しさん:2013/02/15(金) 21:27:13.28 .net
左辺値のまま呼び出しを行いたいのだろうか
関数ポインタに暗黙変換して右辺値になって何か不都合ある?

198 :デフォルトの名無しさん:2013/02/20(水) 14:00:23.88 .net
プログラム

 グローバルに下記を設定しておく。
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 .net
そんなの他人に分かるわけないだろ
自分で決めろよ

200 :デフォルトの名無しさん:2013/02/20(水) 14:38:11.99 .net
>>199
//homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.htm
こちらのHPを見て勉強しているのですが理解ががが

201 :デフォルトの名無しさん:2013/02/20(水) 14:56:33.41 .net
>>200
初心者にC++/CLIやらせるとか糞だな
C++/CLIはC/C++じゃないのでスレ違い
http://toro.2ch.net/test/read.cgi/tech/1268613679/
まずはそんな画像処理なんかより言語自体の勉強をすべき

202 :デフォルトの名無しさん:2013/02/20(水) 15:06:39.71 .net
>>201
スレチすいませんっした

203 :デフォルトの名無しさん:2013/02/21(木) 09:55:39.62 .net
GetDiskFreeSpaceExで空き容量を取得したいんですが
今後1000000TBのHDDが出たとして
正常な空き容量を返せますか?
この関数が返す戻り値が__int64のようなので
これの最大値までは大丈夫なのでしょうか?
それともOSで最大値が制限されてたりしますか?

204 :デフォルトの名無しさん:2013/02/21(木) 10:24:59.38 .net
__int64までなら大丈夫

205 :デフォルトの名無しさん:2013/02/21(木) 11:10:11.60 .net
C言語のキャストと、reinterpret_castで違いってあるのでしょうか?

206 :デフォルトの名無しさん:2013/02/21(木) 11:23:53.75 .net
あるよ

207 :デフォルトの名無しさん:2013/02/21(木) 11:34:51.91 .net
ないだろ
あれは目印だめの存在

208 :デフォルトの名無しさん:2013/02/21(木) 12:03:32.66 .net
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 .net
>>208
おおお。有難うございます。
後者のはstatic_castなら大丈夫なんですね。勉強になりました。

210 :デフォルトの名無しさん:2013/02/21(木) 15:37:36.23 .net
間違った勉強の仕方をしても意味ないよ?
208が紛らわしいレスしてる責任があるけど
209が仕事で恥かいても俺は知らないけど

211 :デフォルトの名無しさん:2013/02/21(木) 15:52:10.10 .net
>>210
初心者みたいだし仕方ないよw

212 :デフォルトの名無しさん:2013/02/21(木) 16:15:24.49 .net
>>208のように嘘を教える者。嘘を信じる者がいるのが悲しいですね。

213 :デフォルトの名無しさん:2013/02/21(木) 18:43:50.27 .net
int&x=a;
static_cast<unsigned long>(x) = b;
の挙動を正確に説明できる奴なんて早々居ないんじゃね

214 :デフォルトの名無しさん:2013/02/21(木) 19:47:48.41 .net
aはなんなんだよ

215 :デフォルトの名無しさん:2013/02/21(木) 19:56:04.75 .net
C++の型キャストで一番安全そうに見えるstatic_castが実は一番危険

216 :デフォルトの名無しさん:2013/02/21(木) 20:28:46.20 .net
なんで釣堀になってんの

217 :デフォルトの名無しさん:2013/02/21(木) 20:34:55.14 .net
unsigned long型の右辺値にキャストして代入なんてできるの

218 :デフォルトの名無しさん:2013/02/21(木) 21:12:45.00 .net
ばかばっかかここ

219 :デフォルトの名無しさん:2013/02/21(木) 21:14:21.31 .net
ばかばーっか

220 :デフォルトの名無しさん:2013/02/24(日) 03:34:10.67 .net
ばかという奴がバカボンド

221 :デフォルトの名無しさん:2013/03/02(土) 14:09:21.00 .net
プリプロセッサの一部適用てなんか方法あったけ?

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 .net
sed -e 's/PAPAN_DNA/1/'

223 :デフォルトの名無しさん:2013/03/02(土) 20:14:52.32 .net
unifdef

224 :デフォルトの名無しさん:2013/03/02(土) 23:37:50.40 .net
ある2つのライブラリがFuncを持ってて両方リンクしなきゃならない場合ってどうするんですか?

225 :デフォルトの名無しさん:2013/03/02(土) 23:54:27.68 .net
WindowsのDLLなら
LoadLibrary と GetProcAddress で
それぞれのDLLのFuncのアドレスを取得して
別々に使う。

226 :デフォルトの名無しさん:2013/03/03(日) 13:08:25.80 .net
>>224
linuxのsoなら
dlopen と dlsym で
それぞれのsoのFuncのアドレスを取得して別々に使う。

静的libなら。。。

227 :デフォルトの名無しさん:2013/03/03(日) 13:12:03.70 .net
ラッパーdll噛ませるしかないのかな

228 :デフォルトの名無しさん:2013/03/04(月) 18:20:08.79 .net
わざわざdl作らなくとも、ラッパー関数を作れば良いだけじゃないのか?

229 :デフォルトの名無しさん:2013/03/05(火) 18:37:20.77 .net
印刷設定の用紙サイズを変更するAPIがあったら教えてください
変更したらOS上で変更しない限り永続させたいです
お願いしますm(__)m

230 :229:2013/03/05(火) 23:09:52.51 .net
自己解決しました

231 :229:2013/03/07(木) 12:55:47.88 .net
と思ったけどやっぱり分かりません

232 :デフォルトの名無しさん:2013/03/07(木) 18:35:00.59 .net
>>231 ソース貼れや

233 :デフォルトの名無しさん:2013/03/07(木) 19:21:59.71 .net
>>231
そりゃ誰にも分からん

234 :デフォルトの名無しさん:2013/03/07(木) 19:23:19.77 .net
回答できないならレスするなゴミ

235 :デフォルトの名無しさん:2013/03/07(木) 19:31:58.28 .net
ゴミ質問者にはゴミ回答者がよく似合う

236 :デフォルトの名無しさん:2013/03/08(金) 22:11:25.08 .net
>>234
うるせえよゴミw
早く死ねよゴミw

237 :デフォルトの名無しさん:2013/03/08(金) 22:17:36.63 .net
アマゾンギフト10万円で死んでやるよ

238 :デフォルトの名無しさん:2013/03/13(水) 00:19:54.91 .net
どんだけぇ〜!

239 :デフォルトの名無しさん:2013/03/13(水) 01:31:36.41 .net
STLのstringについて質問です。

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

と書いたのを読み返してみたら、関数側がlengthの仕組みを認識出来ない以上無理な気がしてきた。
char型のバッファでワンクッション置くしか無いんでしょうか…

240 :デフォルトの名無しさん:2013/03/13(水) 02:57:19.42 .net
たぶんない

241 :デフォルトの名無しさん:2013/03/13(水) 07:39:56.18 .net
>>239
ほらよ
http://ideone.com/7uRXoZ

242 :デフォルトの名無しさん:2013/03/13(水) 21:49:02.60 .net
std::basic_string<T>はメモリの連続性を保証しないのでstd::vector<char>を通した方がよい
ttp://ideone.com/0Njz2Y

243 :デフォルトの名無しさん:2013/03/14(木) 00:26:51.41 .net
保証するよ
C++11から

244 :デフォルトの名無しさん:2013/03/14(木) 01:03:48.76 .net
そうだった失礼

245 :デフォルトの名無しさん:2013/03/14(木) 03:25:53.19 .net
>>241
なるほどresize()を使って帳尻を合わせておけばいいんですね
ありがとうございます

>>242
連続性が保証されていないバージョンがあったんですね
参考になります

246 :デフォルトの名無しさん:2013/03/14(木) 07:39:01.96 .net
>>245
C++03までは規格上は保証はされていないけど、
連続性の無い実装は1つも無いよ
だからこそC++11で保証するようになったんだし

247 :デフォルトの名無しさん:2013/03/17(日) 15:33:29.83 .net
誰か立ててくれませぬか


スレ立てるまでもない質問はここで 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 .net
>>247
他人任せの精神異常者はさっさと消えてください

249 :デフォルトの名無しさん:2013/03/17(日) 21:20:02.22 .net
VC++にてBluetooth通信するプログラムを作成しているのですが、
Bluetoothデバイスをサーチするときの
BLUETOOTH_DEVICE_SEARCH_PARAMSの設定を詳しく教えてください。
fReturnAuthenticated = 以前にペアリングしたことがある
fReturnRemembered = ペアリングしたことはないが、以前検索に引っかかったことがある?
fReturnConnected = 現在接続しているデバイス
fReturnUnknown = 一度もペアリングしたことのないデバイス
fIssueInquiry = ?
他のところも間違えていたら指摘お願いします

250 :デフォルトの名無しさん:2013/03/17(日) 23:08:05.38 .net
>>249
その情報にいくら払えるって?

251 :デフォルトの名無しさん:2013/03/18(月) 01:09:52.09 .net
>>250
そんなこといわんといて・・・

252 :デフォルトの名無しさん:2013/03/19(火) 23:15:50.72 .net
英語を勉強しるよ

253 :デフォルトの名無しさん:2013/03/27(水) 01:34:33.89 .net
すいません、教えてください。
#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 .net
>>253
signal()の戻り値は関数ポインタ。
第一引き数はint。
第二引き数は関数ポインタ。
SIG_IGNは関数ポインタのはず。

255 :デフォルトの名無しさん:2013/03/27(水) 07:11:37.48 .net
typedef void (*signal_handler)(int);
signal_handler signal(int signum, signal_handler handler);

こう解釈する

256 :デフォルトの名無しさん:2013/03/27(水) 21:27:43.24 .net
K&Rですら反省しているうんこ文法なのでそういうものだと思って覚えましょう

257 :デフォルトの名無しさん:2013/03/31(日) 01:19:26.30 .net
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 .net
>>257
処理系依存の話になるが、
たいていはmallocが呼ばれたときに、ポインタからサイズが得られるように
構造体を使ったヒープや配列で管理している。

259 :デフォルトの名無しさん:2013/03/31(日) 02:00:42.14 .net
>>257
_msize(px);
でサイズ得られるから
内部で管理されてる事になるね

260 :257:2013/03/31(日) 02:06:49.02 .net
>>258
ありがとうございます。
別のところで、管理されているのですね。

ということは、
malloc() で動的に確保したメモリのポインタに
(別のアドレスを)再代入しない方がよさそうですね。

261 :デフォルトの名無しさん:2013/03/31(日) 02:08:47.21 .net
>>260
当たり前だろボンクラ
どんな本で勉強してんだパーかおめ

262 :257:2013/03/31(日) 02:15:33.97 .net
>>259
自分の環境では、
undefined reference to '_msize'
となりましたが、たしかに、環境によってはメモリサイズが得られるようですね。
ありがとうございます。

>>260
たぶん当たり前すぎて、書いてありませんでした。。(^^;)

263 :デフォルトの名無しさん:2013/04/01(月) 03:34:20.26 .net
>malloc() で動的に確保したメモリのポインタに
>(別のアドレスを)再代入しない方がよさそうですね。
これって行った場合、
プログラム終了時に一般的なOSならfreeされますよね?

264 :デフォルトの名無しさん:2013/04/01(月) 06:26:11.43 .net
C++でguiアプリ作りたいんだけどオススメの方法おしえて

265 :デフォルトの名無しさん:2013/04/01(月) 14:57:44.15 .net
C++/CLIでCLR

266 :デフォルトの名無しさん:2013/04/01(月) 15:36:19.33 .net
C++Builder

267 :デフォルトの名無しさん:2013/04/01(月) 18:15:40.08 .net
以前は、wxWidgetsをやってたひとが、最近は、FLTKをつかってるといってた

268 :デフォルトの名無しさん:2013/04/01(月) 22:43:38.31 .net
ええとQT?

269 :デフォルトの名無しさん:2013/04/01(月) 22:53:09.70 .net
Qtがいいの?

270 :デフォルトの名無しさん:2013/04/02(火) 06:21:12.50 .net
>>263
free()していないメモリブロックは、OSなりでよきに計らわれる。
なので、生存期間の短い大量のメモリを使用しないようなプログラムでは
ポインタ変数の使い回しによるfree()の省略はしばしば行なわれる。

271 :デフォルトの名無しさん:2013/04/02(火) 18:01:31.59 .net
freeしない派ってほんとうざいわ

272 :デフォルトの名無しさん:2013/04/02(火) 22:52:57.08 .net
free必須信者ってほんとうウザい。 死ねばいいのに

273 :デフォルトの名無しさん:2013/04/02(火) 23:11:27.39 .net
くだらん宗教論争する連中が一番ウザいです

274 :デフォルトの名無しさん:2013/04/02(火) 23:22:42.22 .net
freeしたいやつは自分が担当するソースだけしとけ
freeしたくないやつは自分が担当するソース以外はfree消すな

275 :デフォルトの名無しさん:2013/04/02(火) 23:50:50.89 .net
>>274
そのうちゴチャゴチャになって
freeしたメモリブロックをべつのソースモジュール内で再度freeしてしまう罠

276 :デフォルトの名無しさん:2013/04/03(水) 19:40:26.92 .net
初心者は、
&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 .net
うわ、変になった。

 if(ptr) {
  free(ptr);
  ptr = NULL;
 }

278 :デフォルトの名無しさん:2013/04/03(水) 19:49:50.78 .net
if(ptr) って要るのか?

279 :デフォルトの名無しさん:2013/04/03(水) 20:42:48.36 .net
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 .net
フリー(無職)の俺も何もしない

281 :デフォルトの名無しさん:2013/04/03(水) 21:17:45.38 .net
>>280


282 :デフォルトの名無しさん:2013/04/03(水) 22:04:13.21 .net
ptrが指してるものがなにか別のポインタを持っていて、
それを先にfreeしてからptrをfreeするという手順を取るというときに
すでにptrがfreeされたものが与えられてしまってもぬるぽにならないように。

283 :デフォルトの名無しさん:2013/04/03(水) 22:07:30.16 .net
((man *)280)->deleteThis();

284 :デフォルトの名無しさん:2013/04/03(水) 23:07:59.81 .net
>>282
nullpoになるわけないじゃん

285 :デフォルトの名無しさん:2013/04/03(水) 23:14:39.60 .net
 
  ∧_∧
  ( ・∀・)      | | ガガッ!
 と    )      | |
   Y /ノ      .人
    / ) .人   <  >_∧∩
  _/し' <  >_∧∩`Д´)/
 (_フ彡 V`Д´)/   / ←>>282
            / ←>>284

286 :デフォルトの名無しさん:2013/04/04(木) 10:29:14.06 .net
>>282
malloc〜free  malloc〜free と処理が分離されててptrを使い回すならわかるけど
malloc malloc 〜 free free みたいな状態でptrを使い回すってこと?

287 :デフォルトの名無しさん:2013/04/04(木) 17:50:44.07 .net
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 .net
今日の釣堀
http://itpro.nikkeibp.co.jp/article/Watcher/20130331/467401/

289 :デフォルトの名無しさん:2013/04/04(木) 18:21:23.84 .net
>>279
炎上学習法で得た知識はダメだな。www
未だに生きていてNULLをfreeしても良いとしていない規格がある。でも教えてやらない。www

290 :デフォルトの名無しさん:2013/04/05(金) 05:19:37.34 .net
>>289
そんなマイナーな環境があるんだ‥‥というか、それってシステムコールを直呼びしているだけの手抜きライブラリだねえ
ま、アロケータはmalloc()/free()といえどもラッピングして使うようにしているから、問題ないけどね、1callぶんだけ手数とスタックがちょびっとだけもったいないけどね、ま、ちょびっとだけど

291 :デフォルトの名無しさん:2013/04/05(金) 08:30:49.23 .net
>>290
> そんなマイナーな環境があるんだ
自分の知らない規格はマイナー wwww
炎上学習法にはのらない。教えてやらない。www

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

死ねよクズ

292 :デフォルトの名無しさん:2013/04/05(金) 08:48:39.06 .net
春だねぇ

293 :デフォルトの名無しさん:2013/04/05(金) 10:37:46.85 .net
HAL

294 :デフォルトの名無しさん:2013/04/05(金) 10:48:57.50 .net
2013: A 2ch odyssey

295 :デフォルトの名無しさん:2013/04/05(金) 22:41:37.37 .net
規格?
規格と実装をごっちゃにしてないか

296 :デフォルトの名無しさん:2013/04/05(金) 22:57:30.45 .net
バカはほっとけよ

297 :デフォルトの名無しさん:2013/04/07(日) 11:26:10.01 .net
列挙型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 .net
>>297
なんでやってみないの?
これからの人生、そういうスタンスで生きていくつもりなの?

299 :デフォルトの名無しさん:2013/04/07(日) 11:31:41.46 .net
言語が書いてないし、代入は演算じゃないし、自分で試さないのはなんで

300 :デフォルトの名無しさん:2013/04/07(日) 11:32:53.21 .net
人間の屑ばっかりのスレで役に立たねぇなぁ
キャストすりゃいいんだな、調べたら分かったわ
お前らは用済み

301 :デフォルトの名無しさん:2013/04/07(日) 11:34:36.27 .net
Yahoo知恵袋で聞いて来いよ
やさしく教えてくれんだろ

302 :デフォルトの名無しさん:2013/04/07(日) 11:35:32.23 .net
>>300
これからの人生、そういうスタンスで生きていくつもりなの?

303 :デフォルトの名無しさん:2013/04/07(日) 11:58:37.57 .net
enumで列挙宣言しておきながら敢えて整数値を代入する、その意図(理由)に興味があるな

304 :デフォルトの名無しさん:2013/04/07(日) 12:08:01.91 .net
調べてわかるなら最初からそうしろと

ま、釣り針だろうけど

305 :デフォルトの名無しさん:2013/04/07(日) 12:13:02.75 .net
>>303
ファイルから

306 :デフォルトの名無しさん:2013/04/07(日) 12:33:07.31 .net
>>305
なるほど
ファイルにはコード化されたMUKIデータが入っていてそれを読み込むんだね
読み込んだ後に
int muki_states;
if(muki_states==1)
より
MUKI muki_states;
if(muki_states==SOUTH)
のほうが分かりやすかろうと
なるほど、なるほど。ありがとう

307 :デフォルトの名無しさん:2013/04/07(日) 12:50:13.41 .net
ファイルから読み込むと普通は文字列になるんだけど、一旦intに変換してさらにenumにするの?

308 :デフォルトの名無しさん:2013/04/07(日) 13:00:08.05 .net
>>307
> ファイルから読み込むと普通は文字列になるんだけど、
それは作り方次第(というか読み方次第?)。たとえばfscanfという関数があってだな…

309 :デフォルトの名無しさん:2013/04/07(日) 13:14:02.33 .net
>>308
いきなりfscanfしちゃうの?
データの妥当性何かのチェックとかしない派?

310 :デフォルトの名無しさん:2013/04/07(日) 13:29:36.19 .net
>>308
おいおい
文字列として読み込んで、妥当性チェックした後に変換だろ
sscanfでもstrtolでもいいが、俺はあまりsscanf の優位性を感じない

311 :デフォルトの名無しさん:2013/04/07(日) 13:30:44.71 .net
現在の議論の本質と無関係なポイントで揚げ足をとりたければ勝手にどうぞ。

312 :デフォルトの名無しさん:2013/04/07(日) 13:37:30.53 .net
揚げ足というのは誰のどの点なんだ?

313 :デフォルトの名無しさん:2013/04/07(日) 14:52:15.04 .net
ファイルから読み込むと普通は文字列になるんだけど、…
ファイルから読み込むとき、普通は(まずは)文字列として読み込むんだけど、…

前と後では質問した人の知識背景がちがうよね

314 :デフォルトの名無しさん:2013/04/07(日) 15:55:15.73 .net
というのが揚げ足取り

315 :デフォルトの名無しさん:2013/04/07(日) 15:57:04.51 .net
まぁ質問していた無能はいなくなったからもういいんじゃね

316 :デフォルトの名無しさん:2013/04/07(日) 16:15:07.76 .net
>>313
fwrite,freadは場合によっては使うけど、まさかfscanfするなんて想像もしなかったからね

317 :デフォルトの名無しさん:2013/04/07(日) 16:26:29.01 .net
iostreamの拡張?てどうやるんですか?なんのためにやるんですか?

318 :デフォルトの名無しさん:2013/04/07(日) 16:31:37.06 .net
>>316
まぁ「ファイルから読み込むと文字列になるw」という誤解をとくための例ならべつにいいんじゃん?

319 :デフォルトの名無しさん:2013/04/07(日) 16:32:09.04 .net
#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 .net
>>318
いや…
それの例にfscanfなんて出すから、余計におかしくなっていると言う話じゃね?

321 :デフォルトの名無しさん:2013/04/07(日) 17:42:41.42 .net
fscanf が読み込むのは紛れもない文字列だと言う事に気付いて無いんじゃないかな。

322 :デフォルトの名無しさん:2013/04/07(日) 18:10:01.67 .net
%dで読み取ってint変数に入れた値も文字列というのか?

323 :デフォルトの名無しさん:2013/04/07(日) 18:33:19.84 .net
>>322
それなら直接enum変数に読めばいいよね。
態々int変数経由するまでもなく。

324 :デフォルトの名無しさん:2013/04/07(日) 18:42:45.38 .net
>>322
ファイルには文字列で書いてあるだろう?

325 :デフォルトの名無しさん:2013/04/07(日) 18:54:43.25 .net
>>323
> それなら直接enum変数に読めばいいよね。
いや、だからさ。
intでもenumでもfloatでもいいんだよ。ファイルから読み込むと文字列になる、と考えてる人に対して
文字列型以外で読み込むこともできるよ、ていう例なんだろうから。

>>324
>ファイルには文字列で書いてあるだろう?
お前は帰っていいよw

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

俺はただ単に、ファイルからデータを読み込む文脈で、int経由でenum変数に代入するなんてシチュエーションないだろって思っただけだから。

327 :デフォルトの名無しさん:2013/04/07(日) 19:14:30.06 .net
あのぉ… 皆さん オレの書き込み(319)はスルーですか… そうですか… (ノД`)

328 :デフォルトの名無しさん:2013/04/07(日) 19:17:31.15 .net
>>326
>>307

329 :デフォルトの名無しさん:2013/04/07(日) 19:23:18.49 .net
以下、無限ループ

330 :307,309:2013/04/07(日) 19:23:35.06 .net
>>328
ん?
その>>307が俺なんだけど。

331 :デフォルトの名無しさん:2013/04/07(日) 19:32:31.80 .net
一体何人が参加した議論だったんだろうな
カオスになっててワロタ

332 :デフォルトの名無しさん:2013/04/07(日) 19:33:30.66 .net
誰か >>327 を構ってやれよ

333 :デフォルトの名無しさん:2013/04/07(日) 19:37:05.97 .net
>>331
自演っぽいのもいるからユニーク・ビジター数は案外少ないかもな

334 :デフォルトの名無しさん:2013/04/07(日) 19:38:35.44 .net
fscanf()するとか言っちゃった奴が暴れただけ

335 :デフォルトの名無しさん:2013/04/07(日) 19:45:34.91 .net
>>330
> >>328
> ん?
> その>>307が俺なんだけど。
だから自分が >>307 で書いた文章を深呼吸して落ち着いてからよく読め って意味じゃないの?
ファイルから読み込むと文字列になるって自分で書いてんじゃんw

336 :デフォルトの名無しさん:2013/04/07(日) 19:48:45.90 .net
>>335
落ち着いて読むも何も、俺がファイルを読んだら必ず文字列になるなんて思ってないから、見えない敵と戦わなくていいんだよってことで。

337 :デフォルトの名無しさん:2013/04/07(日) 20:02:35.02 .net
コンピューター言語をいじくる前に先に日本語の読み書きを勉強した方がいろいろと捗るとおもうぞ
ま、これが落としどころ、ということで

327はタイミングが悪かったね〜 これに懲りずに、またいらっしゃい

338 :デフォルトの名無しさん:2013/04/07(日) 20:07:43.07 .net
見苦しいわ。

339 :デフォルトの名無しさん:2013/04/07(日) 20:19:22.86 .net
匿名性の面白さが出たカオスっぷりだったね。
まぁ、楽しめたんじゃないの?

340 :デフォルトの名無しさん:2013/04/07(日) 20:42:46.81 .net
さっきから一生懸命に終わらそうとしている奴はなんなの

341 :デフォルトの名無しさん:2013/04/07(日) 20:47:04.53 .net
>>340
> さっきから一生懸命に終わらそうとしている奴はなんなの
自分に不利な議論の流れだから。当然しょっw

342 :デフォルトの名無しさん:2013/04/07(日) 20:54:51.19 .net
端から見てると、どいつが終わらせようとしているかもわからんぞ

343 :デフォルトの名無しさん:2013/04/08(月) 00:13:52.32 .net
面白そうな流れだったのにリアルタイムで参加できなくて残念ですw

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

>>336
> 落ち着いて読むも何も、俺がファイルを読んだら必ず文字列になるなんて思ってないから、
最初に、ファイルから読み込むと普通は文字列になる、って自分で書いてますよねw
物忘れが激しいタイプ?揮発性メモリ?
荒れた原因を作った真犯人が、見えない敵と戦わなくていい、とか、ほとんど人事不省ですかねw
その上にデータの妥当性チェックに話をすり替えるから、ますます流れがおかしくなったんですね。

344 :デフォルトの名無しさん:2013/04/08(月) 00:24:12.46 .net
>>343
普通は文字列になるということは、文字列にならない場合もあるということ。
妥当性チェックの話は、それがfscanfを使ってはいけない理由だから。内容が保証されているバイナリデータをfreadで読み込む場合以外では、普通は文字列として読み込んで、パーズしてバリデーションだよね。

345 :デフォルトの名無しさん:2013/04/08(月) 12:28:50.28 .net
テキストはダメでバイナリなら中身が保証されてる(キリッ って決めつけちゃってるところが… ま、その何というか… ええ、アレ、ですわ

346 :デフォルトの名無しさん:2013/04/08(月) 12:46:56.71 .net
>>345
バイナリなら中身が保証されているなんて言ってないよ。
内容が保証されているバイナリデータなら、freadで読む場合もあるって書いてるでしょ。

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

ちゃんと読んでくれよ。

347 :デフォルトの名無しさん:2013/04/08(月) 13:13:45.51 .net
テキストファイルをfscanfで読むのがダメなんてことはない

348 :デフォルトの名無しさん:2013/04/08(月) 13:32:19.85 .net
内容が保証されているバイナリファイルをfreadしていいなら
内容が保証されているテキストファイルもfscanfしていいよね

349 :デフォルトの名無しさん:2013/04/08(月) 13:46:44.00 .net
これで最後。

fscanf()は、scanf()とよく似た致命的な欠陥があって、「完全に正しい」とは限らないテキストファイルの読み込みには向いてないの。
で、普通はどうするかというと、1行毎あるいはファイル全体を文字列として読み込んで、parseしてvalidationしてから変数に保存する。
それが安全なやり方。

350 :229:2013/04/08(月) 13:55:01.80 .net
freadにも致命的な欠陥があって、
「完全に正しい」とは限らないバイナリファイルの読み込みには向いてないな。

351 :デフォルトの名無しさん:2013/04/08(月) 13:57:23.32 .net
>>350
man freadして、向いてるか向いてないか自分で考えろ

352 :デフォルトの名無しさん:2013/04/08(月) 14:18:42.30 .net
意味の無いやり取りはもうやめてくれよ。

353 :デフォルトの名無しさん:2013/04/08(月) 16:57:55.85 .net
object->~object()で好きなタイミングでクラスのデストラクタを呼び出せることは知っているのですが…
Destroy(object);
みたいな感じでデストラクタを好きなタイミングで呼び出す関数を定義することってできますか?
既に上記のような関数が存在してればその関数でも構わないのですが…。

354 :デフォルトの名無しさん:2013/04/08(月) 16:59:56.84 .net
すみません…質問の仕方が悪かったですorz
一旦スルーしてください…。

355 :デフォルトの名無しさん:2013/04/08(月) 17:08:09.16 .net
delete this;

356 :デフォルトの名無しさん:2013/04/08(月) 19:39:17.35 .net
delete c++;

357 :デフォルトの名無しさん:2013/04/09(火) 12:57:44.03 .net
16ビトのサイズとか具体的に決まってる場合多いじゃないですか。ハイルの形式って。
そういうハイルを読み書きするときには決まったサイズを保存する型って
どうしたらいいですか。

358 :デフォルトの名無しさん:2013/04/09(火) 13:18:51.53 .net
16ビトてきまてるなら、16ビトの変数をよういすればいいじゃないかな

359 :デフォルトの名無しさん:2013/04/09(火) 13:23:51.24 .net
>>357
short [], usort [], int16_t []など

360 :デフォルトの名無しさん:2013/04/09(火) 14:54:43.50 .net
>>359
ありがとうございまする。
後ろについているカッコはなんですか?
shortはintより短いことを保証するに過ぎませんよね。
int16_tが正解ですか?
さようならば。

361 :デフォルトの名無しさん:2013/04/09(火) 15:10:03.19 .net
>>360
[]は配列。
複数の連続した16ビットのデータを読み書きすると思って配列にしただけなので、そうでなければ無視してくれ。

362 :デフォルトの名無しさん:2013/04/09(火) 20:07:16.23 .net
int16_tってどう定義されているの?

363 :デフォルトの名無しさん:2013/04/09(火) 21:10:54.11 .net
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 .net
LONG_MAX >= 2^31-1 じゃなかったっけ?

365 :デフォルトの名無しさん:2013/04/25(木) 11:44:49.76 .net
unsigned

366 :デフォルトの名無しさん:2013/04/25(木) 21:23:08.85 .net
unsigned float
unsigned double

367 :デフォルトの名無しさん:2013/04/26(金) 07:32:57.44 .net
そしてこのように話が進むと、めんどくなって「じゃーint使うのやめてshortでいいわ」って
ことにしてしまいたくなる

368 :デフォルトの名無しさん:2013/04/26(金) 23:18:17.12 .net
>>364
CHAR_BITが16かもしれない

369 :デフォルトの名無しさん:2013/04/26(金) 23:19:18.65 .net
しかしこれはint16_tの定義だからその場合は==1か!
脊髄反射はダメだなやっぱ

370 :デフォルトの名無しさん:2013/04/27(土) 00:28:17.14 .net
まあ sizeof(T)*CHAR_BIT==16 のようにビット数で比較したとしても
>>363 じゃ不十分なんだけどね

371 :デフォルトの名無しさん:2013/04/27(土) 00:31:14.22 .net
もう環境依存の予約語でいいよ

372 :デフォルトの名無しさん:2013/04/28(日) 14:18:43.57 .net
Cからポータビリティを捨てたらゴミしか残らん

373 :デフォルトの名無しさん:2013/04/29(月) 20:36:55.45 .net
ヘッダファイルとインクルード関係の使い方がよく分かりません。
cppに関数を継ぎ足すたびにhを編集して・・・とやっていけばいいのでしょうか。ものすごく間違えそうで危ない気がするのですが。

374 :デフォルトの名無しさん:2013/04/29(月) 20:53:01.03 .net
外に公開するものはヘッダに書く
はずかしいところはcppに書く

375 :デフォルトの名無しさん:2013/04/30(火) 16:42:32.78 .net
>>373
間違えるとコンパイラが教えてくれるから危ないことなど全くない

376 :デフォルトの名無しさん:2013/05/01(水) 15:19:32.18 .net
>>373
.hは目次、.cppは本文と思えば分かりやすいんじゃないかな。

先に.hを書いて、.cppは後で書く。

377 :デフォルトの名無しさん:2013/05/01(水) 17:42:53.36 .net
逆に.cppから書く俺みたいなのもいるがね
テストまでやってから公開って考え方

378 :デフォルトの名無しさん:2013/05/01(水) 18:27:09.99 .net
公開する .h は、設計段階で決定するから、
.cpp に合わせて .h を編集ってことはあまり無いなあ

379 :デフォルトの名無しさん:2013/05/03(金) 02:07:25.68 .net
いろいろ決めてから書く人はヘッダから、具体的に処理書いてって肉付けしてく人はソースから
書くんじゃない?

380 :デフォルトの名無しさん:2013/05/03(金) 02:49:05.09 .net
いきなりコード書きだすのは良くない。
趣味のプログラムなら勝手だが。

381 :デフォルトの名無しさん:2013/05/03(金) 03:12:26.67 .net
お前らビルドはいつするんだよ
ビルドすること無しに.cppを書き続けるのか?

382 :デフォルトの名無しさん:2013/05/03(金) 11:11:56.22 .net
慣れてくるとビルドはたまにしかしないな
週一とか

383 :デフォルトの名無しさん:2013/05/04(土) 00:23:49.31 .net
コード書くの遅すぎ

384 :デフォルトの名無しさん:2013/05/04(土) 00:54:43.09 .net
最近はビルドが早いからな。
ビルドエラーや実行時エラーに頼ったコーディングスタイル、
設計や机上デバッグを軽視している輩が増えているような
気がする。

385 :デフォルトの名無しさん:2013/05/04(土) 01:21:39.53 .net
開発中は、基本今変更したファイルのみコンパイル対象になるから
もうずっと前からビルド時間なんて気にならなかったが

386 :デフォルトの名無しさん:2013/05/04(土) 02:29:02.20 .net
組み込みで特に小さいチップだと、EEPROM書き換え回数に制限があって
もったいないので無闇にビルド→書き換えをしないよう設計と机上デバッグを煮詰める。

387 :デフォルトの名無しさん:2013/05/05(日) 08:19:06.89 .net
>>386
組み込みのこと全然知らないんだけど、書き込みせずにテストは出来ないの?

388 :デフォルトの名無しさん:2013/05/05(日) 08:27:21.10 .net
フラッシュメモリも内容の保持保証が約10年だとは割りと知られてないようだな
SDカードに入れたデジカメの画像は大切ならBD-REに焼いとけよ

389 :デフォルトの名無しさん:2013/05/05(日) 13:18:27.53 .net
ROMと言えば。。。 (  ̄ー ̄)y-~~
「ROMだってランダムアクセスできるんだから、そういう意味ではRAMじゃないの?」
とのたまう、素直で内気な少年でした… 今から○十年前の話です。

390 :デフォルトの名無しさん:2013/05/05(日) 14:48:55.02 .net
>>389
その頃から既に屁理屈っぽい萌芽が育ち始めていたんだろうね

391 :デフォルトの名無しさん:2013/05/05(日) 15:46:17.91 .net
>>387
環境によるんじゃね?
だからこそ、環境がどうであろうが実施できる机上デバッグなんだと思う

392 :デフォルトの名無しさん:2013/05/05(日) 18:33:04.84 .net
>>387
ICEで確認してからだな

393 :デフォルトの名無しさん:2013/05/05(日) 23:17:52.35 .net
>>389
律儀に RWM とか書いてたな…

394 :デフォルトの名無しさん:2013/05/06(月) 08:49:38.73 .net
390は技術屋には向かないな

395 :デフォルトの名無しさん:2013/05/06(月) 09:07:35.97 .net
>>394
あら傷ついちゃったの?www

396 :デフォルトの名無しさん:2013/05/07(火) 11:07:39.34 .net
>>393
> >>389
> 律儀に RWM とか書いてたな…
初めて知ったけど、これってなんて読むの?リウォム?リワォム?

397 :デフォルトの名無しさん:2013/05/07(火) 23:19:37.70 .net
記憶があやふやだけど、素直に「アールダブルエム」とか言ってたような気がする。
「ロム」みたいな言い方ができなかったのも、流行らなかった理由かも。

398 :396:2013/05/08(水) 00:18:54.08 .net
>>397
たしかに、こりゃ一文字ずつ読むしかないですよねw レス、ありがとう!
なんとなく WORM (Write Once, Read Many)を思い出すなぁ。。。

399 :デフォルトの名無しさん:2013/05/08(水) 19:27:35.78 .net
名前のみが重要な#defineは全部enumでまとめた法が良いの?

400 :デフォルトの名無しさん:2013/05/08(水) 19:57:58.15 .net
ちょっとなにいっているかわかんない

401 :デフォルトの名無しさん:2013/05/08(水) 20:15:36.49 .net
つまりだな
識別子(?)として「RED」「GREEN」「BLUE」を使いたい。割り当てられる値はどうでもいいって時に
#define RED 1
#define GREEN 2
#define BLUE 3
とするより、
enum color { RED , GREEN , BLUE };
した方がいいか、って質問だろ?
答えはYES。
使い方によるがenumなら値の妥当性チェックをしてくれるから。

402 :401:2013/05/08(水) 20:22:02.07 .net
しまった!揚げ足とられる前に訂正しておくわ
#define RED 0
#define GREEN 1
#define BLUE 2
に差し替えてくれ

403 :デフォルトの名無しさん:2013/05/08(水) 20:42:55.65 .net
差し替えの意図がわからん。

404 :デフォルトの名無しさん:2013/05/08(水) 21:23:07.53 .net
>>401
それよりもスコープの問題の方がでかいね

405 :399:2013/05/08(水) 21:45:52.70 .net
>>401
ありがと
そう言いたかった

#defineは全部enumに直すよ

406 :デフォルトの名無しさん:2013/05/09(木) 00:09:03.32 .net
> enumなら値の妥当性チェックをしてくれる
どういうこと?

407 :デフォルトの名無しさん:2013/05/09(木) 00:14:48.90 .net
typedefしたときの話だろ

408 :デフォルトの名無しさん:2013/05/09(木) 01:16:31.80 .net
typedefにそんな機能ないだろ

409 :デフォルトの名無しさん:2013/05/09(木) 01:20:39.03 .net
>>408 馬鹿か
typedef enum{...} E;
void f(E e){}

f(10); // compile error

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

でいいじゃんtypedef関係ないよね
そもそもCではエラーにならないし
C++でエラーになるのは「値の妥当性チェック」じゃなくて単純に型によるもの

411 :デフォルトの名無しさん:2013/05/09(木) 12:10:36.05 .net
enumのあとになんで名前をつける必要があるの?
この名前使うの?

412 :デフォルトの名無しさん:2013/05/09(木) 12:16:53.28 .net
>>411
他の人間にコードの説明するときに使う

413 :デフォルトの名無しさん:2013/05/09(木) 12:42:29.22 .net
グループ名

414 :デフォルトの名無しさん:2013/05/09(木) 15:43:11.89 .net
>>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 .net
スレチらしいのでこちらに来ました

playsound関数についてなんですが、
プログラム起動時に.wav形式のものを再生したいのです。
リソースからひっぱってきて再生する形にしたいのですが、
どうもうまくいきません。playsound関数など調べても
いまいち自分がやりたいのと大きく違って、あまり参考にはなりませんでした
そして、ON/OFFを切り替えることができるボタンなども、自分なりに探しましたが
探すのが下手らしくあまり参考にはならなかったです。
もしよろしければ、サンプルソースコードを書いていただけると嬉しいです。
もしくは、上記のヒントや方法などを教えて下さい。
(C++でフォームを使用するものです)

416 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/09(木) 20:20:23.96 .net
//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 .net
SND_RESOURCEを付けるのがポイント。
GetModuleHandle(NULL)の代わりにWinMainのhInstanceを使ってもいい。

418 :デフォルトの名無しさん:2013/05/09(木) 21:21:46.92 .net
>>416
>>417さん

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

ソースコード、情報提供 誠に感謝します。

419 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/09(木) 21:51:34.07 .net
そんなに難しい話じゃないよ。
<windows.h>をインクルードしておき、PlaySound APIを呼べば音が鳴る。フォームを使ってる場合でも同じ。

420 :デフォルトの名無しさん:2013/05/09(木) 22:39:22.99 .net
プログラム板 自治スレッド Part6
http://toro.2ch.net/test/read.cgi/tech/1368020285/

強制IDの導入議論を行っています。

421 :デフォルトの名無しさん:2013/05/09(木) 23:01:43.67 .net
クラスのメンバ変数をconstにしたい場合
staticにしないと初期化出来ませんか?

422 :デフォルトの名無しさん:2013/05/09(木) 23:11:09.99 .net
は?

423 :デフォルトの名無しさん:2013/05/09(木) 23:19:48.04 .net
>>421 コンストラクタ

424 :デフォルトの名無しさん:2013/05/09(木) 23:24:04.06 .net
C++とは言ってないが

425 :デフォルトの名無しさん:2013/05/09(木) 23:47:07.72 .net
>>421
メンバ初期化子

でもあまりconstメンバ変数は使わない

426 :デフォルトの名無しさん:2013/05/12(日) 03:37:57.97 .net
グローバル変数は危険だと聞いて、ローカル変数のみでゲームプログラムを組む練習をしたいのですが、スコープ外に出る時に変数は消えてしまいますよね。
どうすればいいんでしょうか。

427 :デフォルトの名無しさん:2013/05/12(日) 03:51:35.25 .net
>>426
スコープ外、例えば関数を読んだ先で使いたければ、
呼び元で必要な変数群を構造体で用意しそのポインタを渡す

428 :デフォルトの名無しさん:2013/05/12(日) 11:02:05.68 .net
××は危険だと聞いてそれに向き合わず逃げるようでは
Cなんぞ使うべきではない

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

・・・あれ、Cの話だっけ?

429 :デフォルトの名無しさん:2013/05/12(日) 11:05:26.57 .net
グローバル変数と聞いただけで火がついたように襲い掛かってくる連中がいるから
そういう意味では確かに危険

430 :デフォルトの名無しさん:2013/05/12(日) 14:02:12.02 .net
>>424
グローバル変数とローカル変数と動的確保は適材適所。
どれがよくてどれが悪いという話ではない。
一般論としてグローバル変数は少ないほどいいというだけ。

431 :デフォルトの名無しさん:2013/05/12(日) 20:50:58.76 .net
>>429
ほかにもGOTOを諸悪の根源とする原理主義者たちとかw いそうだねぇ

432 :デフォルトの名無しさん:2013/05/12(日) 22:05:23.47 .net
gotoはだめだろ

433 :デフォルトの名無しさん:2013/05/12(日) 22:12:25.89 .net
んなことはない

434 :デフォルトの名無しさん:2013/05/12(日) 22:29:48.04 .net
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 .net
なんか自己解決したような気がします。

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

#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 .net
>>432
例えば多重ループの中から抜けたいとき

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

gotoなしで書くとフラグと複数breakの組み合わせになると思うが
それよりもいっきにジャンプしたほうがシンプルで分かりやすくないだろうか?
「goto=悪」を金科玉条とするんじゃなくて、
要するに使い方(プログラマの思想?)次第じゃない?

437 :デフォルトの名無しさん:2013/05/13(月) 01:29:19.43 .net
>>435
考え方による。正解はない。
とにかく冗長でも分かりやすい記述を好む派と、簡潔で少ない行数であることを好む派がいる。
ちなみに前者の書き方は関数型言語に近いから前者の思考で書きたければそっちも勉強した方がいいかもしれん。
その書き方専用の定石というのも存在する。

438 :デフォルトの名無しさん:2013/05/13(月) 01:41:02.33 .net
>>435
最初にまとめて宣言するのはC89的な古くさいプログラムで、C++ではナシだな
「変数が初期化されていない」期間は
できるだけ短い方がバグが入りにくい

例外的なものは全体的に使い回す変数かな
その場合は初めて使う時に宣言すると、
その処理をやっぱ2番目に置こうと思った時に不便

439 :デフォルトの名無しさん:2013/05/13(月) 01:42:00.54 .net
>>436
基本的にそういう場合は関数に分けた方がいい
で、returnで抜ける
ただ、gotoの方がいい場合もあるので100%関数にした方がいいとは言わない

440 :デフォルトの名無しさん:2013/05/13(月) 07:49:01.60 .net
>>436
そのための大域脱出=try-catch-throw ですよと

441 :デフォルトの名無しさん:2013/05/13(月) 08:20:07.67 .net
正常系で例外使うのはgotoと変わらない

442 :デフォルトの名無しさん:2013/05/13(月) 08:58:33.12 .net
goto否定の発端ってほぼ全部gotoで書いちゃうような輩のせいだろ。
チョコチョコ使う分にはむしろ直感的で読みやすいソースになる。

443 :デフォルトの名無しさん:2013/05/13(月) 09:00:54.86 .net
>>439
> >>436
> 基本的にそういう場合は関数に分けた方がいい

syori();

---------

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

動くだろうけど、これが基本とは思わないな
関数コールのオーバーヘッドと引き替えにどういう利点がある?

444 :デフォルトの名無しさん:2013/05/13(月) 09:15:05.12 .net
むしろループそのものをiteratorやvisitor使って抽象化する

445 :デフォルトの名無しさん:2013/05/13(月) 09:18:43.44 .net
おっ 構造化プログラミングの話か? 
#今の若い人は知らないだろうな
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 .net
goto      を使わない馬鹿 そればかり使う馬鹿
グローバル変数 を使わない馬鹿 そればかり使う馬鹿
C言語      を使わない馬鹿 そればかり使う馬鹿

447 :デフォルトの名無しさん:2013/05/13(月) 16:03:01.09 .net
>>444
やりすぎはコードの見通しを悪くする

448 :デフォルトの名無しさん:2013/05/13(月) 19:03:55.82 .net
>C言語      を使わない馬鹿 そればかり使う馬鹿
仕事上、Cを使わざるを得ない、とか、(ほかの言語を使うから)Cを使う必要がない、って人もいるかもよw

449 :デフォルトの名無しさん:2013/05/13(月) 20:48:14.04 .net
実際の開発でGOTOなんか使うの?

450 :デフォルトの名無しさん:2013/05/13(月) 20:49:50.99 .net
>>443
ループがそれほどあるだけで
普通は結構な行数だろ

短いなら別にgotoでもいいけど、
大抵は関数に分けた方がいい場合が多い

451 :デフォルトの名無しさん:2013/05/13(月) 21:17:07.88 .net
独りよがりな考えを普遍的事実のように書く輩って自分では意識してない(できない)んだろうな (´・ω・`)

452 :デフォルトの名無しさん:2013/05/14(火) 01:04:04.68 .net
>>450
環境によっては、無駄な関数コールを減らすことを考えざるを得ないこともある。
RAMが256byteしかないとか

453 :デフォルトの名無しさん:2013/05/14(火) 07:38:22.89 .net
そんなならもうアセンブラ使えよ

454 :デフォルトの名無しさん:2013/05/14(火) 07:49:50.52 .net
多少goto使ってでも、Cだとアセンブラと比べて作業効率が桁違いなのだ

455 :デフォルトの名無しさん:2013/05/14(火) 08:04:22.16 .net
do〜while(0)でbreakしてるのをみると、
素直にgoto使ったんでいいんじゃないかと思う時はある

456 :デフォルトの名無しさん:2013/05/14(火) 09:23:01.15 .net
ただ、goto嫌いな人が無理に使うことはないよ
スキルの低いうちは封印した方がいい

457 :デフォルトの名無しさん:2013/05/14(火) 09:48:17.25 .net
俺ならbreakフラグを使う

458 :デフォルトの名無しさん:2013/05/14(火) 11:17:16.54 .net
全てのループはgotoで置き換えられる

459 :デフォルトの名無しさん:2013/05/14(火) 12:02:47.58 .net
gotoとifで置き換えられる

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

まぁ論理的に可能というだけで、
必ずしも見通しのよいコードになるとは限らないと思うけど

460 :デフォルトの名無しさん:2013/05/14(火) 12:09:15.58 .net
フラグをいくつも使って多重ループから脱出するよりは
gotoを使ったほうが見通しが良くなる場合もある

461 :デフォルトの名無しさん:2013/05/14(火) 12:46:34.88 .net
// フラグをいくつも使って多重ループから脱出するよりは
// gotoを使ったほうが見通しが良くなる場合もあるので

というコメントを残しておけば、引き継いで保守する人も納得する。
納得されなかったらム板かマ板のコメントスレにあげられる。

462 :デフォルトの名無しさん:2013/05/14(火) 13:45:57.58 .net
>>461
そんなコメントいらんわ

463 :デフォルトの名無しさん:2013/05/14(火) 20:15:39.40 .net
ラベル名にBREAKを含めてるね

464 :デフォルトの名無しさん:2013/05/14(火) 20:30:38.47 .net
むかしから...
goto肯定派は、何でもかんでもgotoでやりたい、と主張している「わけではない」のに
goto否定派は、gotoなんか不要だ、使う必要は全くない、という主張になっていることが多そうな気がする
この温度差はいったい何なんだろうって思うよ

465 :デフォルトの名無しさん:2013/05/14(火) 20:52:04.14 .net
break が「一つ上のレベルに脱出する」という機能でしかないからではないか?
ラベル付き break であれば温度差は解消される

ラベル付きbreak‥‥‥これって goto?

466 :デフォルトの名無しさん:2013/05/14(火) 21:01:15.75 .net
redoはgotoでなければ実現できない

467 :デフォルトの名無しさん:2013/05/14(火) 21:56:56.61 .net
条件脱出用に関数内で1つだけの脱出ラベルに対するgotoなら
個人的には容認かな。setjmp / longjmpのほうがいやらしい。

468 :デフォルトの名無しさん:2013/05/15(水) 00:53:45.95 .net
前後を見ないとgotoによりすっ飛ばされている区間を見落としてしまうという恐れ
goto-free で縛ればそんなことを「一切」気にしなくて済む

469 :デフォルトの名無しさん:2013/05/15(水) 08:03:16.94 .net
ラベルで検索すればいいだけだから、いろんなところで
使われてそうなbreakよりもしかして見落としにくいんじゃね?

470 :デフォルトの名無しさん:2013/05/15(水) 08:25:36.96 .net
gotoは便利なんだよ。
ただ、馬鹿に使わせるととんでもないことになるから信用できない奴には使わせたくないってだけで。

471 :デフォルトの名無しさん:2013/05/15(水) 09:13:50.45 .net
C++の規格書って日本語版はないの?

472 :デフォルトの名無しさん:2013/05/15(水) 09:26:40.57 .net
JIS X3014(C++03)がある
C++11はまだ

ただし他のいらない規格票もたくさん入っていて分厚い本の一部
1万前後だったかなあ

473 :デフォルトの名無しさん:2013/05/18(土) 14:13:52.83 .net
FindFirstFileでヒットしたファイルの、タイムスタンプを取得するために、
WIN32_FIND_DATA構造体にセットされる値を読みに行っていますが、セットされる値は
キャッシュされるようでして、頻繁にファイルのタイムスタンプが更新される場合には
使えません。FindFirstFileでヒットしたファイル名を用いて、stat 関数なども使ってみましたが
状況は同じでした。このキャッシュをクリアする方法を教えてください。
Windows7上で動く、ネイティブコードのコンソールアプリです。
よろしくお願いします。
(マネージコードですと、Refresh()というメソッドが使えるようなのですが・・・)

474 :デフォルトの名無しさん:2013/05/18(土) 14:16:23.12 .net
上記への追加です。
デバッグビルドしました場合は、キャッシュされず、毎回最新のタイムスタンプが
取得できるのですが、リリースビルドしました場合にはキャッシュされた値しか
取得できないという状況です。

475 :デフォルトの名無しさん:2013/05/18(土) 14:18:33.68 .net
GetFileTime

476 :デフォルトの名無しさん:2013/05/18(土) 14:30:27.28 .net
>>474
http://d.hatena.ne.jp/satosystems/20110517/1305585726

477 :474:2013/05/19(日) 21:12:18.74 .net
>>475-476

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

FindFirstFileで検索するファイルが置かれているパスは、かなり深い階層の
フォルダにありまして、検索用の文字列としてとても長い文字数のものを
指定していました(恐らくMAX_PATH数を超える文字数)。その結果、ヒットした
ファイルそのもののタイムスタンプではなく、そのファイルが置かれているフォルダの
タイムスタンプがWIN32_FIND_DATA構造体にセットされていました。
教えて頂いたGetFileTimeでも、引数にファイル自体のパス名を与えているのに
フォルダのタイムスタンプが取得されました。
(ただし、デバッグビルドした場合はヒットしたファイル自体のタイムスタンプが
とれていました)

478 :474:2013/05/19(日) 21:12:58.95 .net
そこでためしに、ファイルを置くフォルダをもっと浅い階層にして、検索用の
文字列ももっと短くて済むようにしてみました。その結果、きちんと検索で
ヒットしたファイル自体の最新のタイムスタンプがセットされるようになりました。
(デバッグビルド、リリースビルド双方とも)

MAX_PATH数を超える文字数を引数に与えていたと思いますので、FindFirstFile
の使い方の間違いだとは思いますが、それではデバッグビルドしても同様の動きを
してくれれば、それこそもっと早くデバッグできたと思いますのに、デバッグビルドした
やつを使ったら、かえってデバッグの障害になったという顛末でした。

479 :デフォルトの名無しさん:2013/05/22(水) 21:49:37.28 .net
シングルトンの重要性を教えてほしい
普通にstaticとどう違うの?

480 :デフォルトの名無しさん:2013/05/22(水) 21:53:52.38 .net
最初に取得する時までコンストラクタが動かない
ただのstaticメンバ変数だと、複数のシングルトン間の初期化の順番が仕様で未規定

481 :デフォルトの名無しさん:2013/05/22(水) 22:02:00.08 .net
>>479
シングルトンのが響きがかっこいい

482 :デフォルトの名無しさん:2013/05/22(水) 22:04:59.46 .net
複数のシングルトン間のじゃないわ
複数のstaticメンバ変数間の、だわ

シングルトンだと初期化順は取得した順
相互に使うようなものでも、コンストラクタでお互いを使わない限りは問題ない

483 :デフォルトの名無しさん:2013/05/22(水) 22:48:46.32 .net
シングル + クルトン

484 :デフォルトの名無しさん:2013/05/23(木) 22:29:09.40 .net
CやC++って
Microsoftが作ったの?

485 :デフォルトの名無しさん:2013/05/23(木) 22:30:56.40 .net
ちょっとは検索してみようとか思わないのかね。

486 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/23(木) 22:58:12.25 .net
「C言語 作った人」「C++ 作った人」で検索

487 :デフォルトの名無しさん:2013/05/23(木) 23:45:30.34 .net
情報系学科の出身でもない限り、最近の若いエンジニアはカーニハンやリッチーの名前を知らないんだろうな…
リッチーは故人になってしまったし、J・マッカーシーも同時期に鬼籍に入ったんだっけ。
C・シャノンなんて歴史上の人物と思っていたけど21世紀になって他界したんだよなぁ。

488 :デフォルトの名無しさん:2013/05/24(金) 00:14:57.77 .net
int i;
などで作った?定義した?変数には最初なんの数字が入っているのでしょうか?

#include<stdio.h>
int main(void){
int a;
printf("%d",a);
retrun 0;
}
を実行すると2883044という数字が出てきますが、この数字はなんなのでしょうか?

489 :デフォルトの名無しさん:2013/05/24(金) 00:21:13.80 .net
環境にもよるが、
まあ大体の環境は変数の領域を確保した際に
たまたまそのメモリに残っていた値だな

490 :デフォルトの名無しさん:2013/05/24(金) 00:55:45.34 .net
最初に何の数字が入っているか分からないからこそ何か仮の数を入れて初期化するという作法がある。

491 :デフォルトの名無しさん:2013/05/24(金) 01:58:57.01 .net
>>488
変数を作る、というのは概念的な話で
実際はメモリのどっかの部分に名前を付けただけなんだよ。
だから、たまたまその部分にあった値が入ってる。

でもコード、コンパイラ、リンカ、システム共に同じなら
毎回別の値が出たりすることはあんまり無いと思う
コンパイラやリンカ、システムごとのメモリの扱い方の癖がそこに出てくる感じ
コードをちょっと弄ると別の値が出たりするからやっぱアテにしちゃダメだけどね

492 :デフォルトの名無しさん:2013/05/24(金) 07:10:17.09 .net
>>491
このプログラムなら別の値が出る事は少ないだろうけど
現実的なプログラムだと大抵別の値が出るぞ

493 :デフォルトの名無しさん:2013/05/24(金) 07:47:40.32 .net
>>492
そうか…現実的なプログラムだとまず試さないからな…

494 :デフォルトの名無しさん:2013/05/24(金) 09:49:49.31 .net
JIS X3014が見られん(*1)ので記憶違いならすまんが
外部変数とstatic変数は初期値ゼロが保証されていて
それ以外の場合は不定じゃなかったっけ?
ちなみにauto変数は記憶域がスタック上に割り当てられるんで
そこのゴミが入ってくるような気がします。

(*1)
JISCでオンラインで規格書を閲覧しようとしたらAcrobatのバージョンを更新しろとポップアップが。
すでに最新バージョンにしとるのにどうしろと? (`へ´)凸

495 :484:2013/05/24(金) 12:06:48.09 .net
C言語を作った人はデニスリッチーって分かったけど
結局、C言語の権利はどこが持ってるの?

496 :デフォルトの名無しさん:2013/05/24(金) 12:37:11.01 .net
言語の権利は誰も持ってないけど
ランタイムライブラリの権利は各実装者が持ってる

497 :デフォルトの名無しさん:2013/05/24(金) 14:18:50.93 .net
>>495
権利って著作権のことか?
あるプログラム言語で書かれたプログラムは著作権の対象になるが
プログラム言語自体が著作権対象になるかは知らん
小出しに質問してるけどいったい何が聞きたいの?

498 :デフォルトの名無しさん:2013/05/24(金) 15:20:55.58 .net
商標権かね
まあまず何を聞きたいか具体的にしないといかんな

499 :デフォルトの名無しさん:2013/05/24(金) 17:59:12.76 .net
>>497
言語自体もプログラムだろ

500 :デフォルトの名無しさん:2013/05/24(金) 18:04:58.05 .net
>>499
言語仕様のことだろ

501 :デフォルトの名無しさん:2013/05/24(金) 18:55:13.59 .net
C/C++のコンパイラとライブラリなどを自作したから、これを売って儲けたいとか、か?K&Rも知らない人間がありえねーー

502 :デフォルトの名無しさん:2013/05/24(金) 21:54:35.65 .net
>>494
singletonの話なら、static変数は普通ポインタだよ。

503 :デフォルトの名無しさん:2013/05/25(土) 07:14:34.07 .net
>>487
>J・マッカーシーも
10代の頃例の言語の卓越したアイディアに神をみた、というか20年たってこの歳になっても理解がまだまだおよばない可哀相な状態です。
>C・シャノンなんて歴史上の人物と思っていたけど21世紀になって他界したんだよなぁ。
ダイクストラも。

504 :デフォルトの名無しさん:2013/05/25(土) 15:42:23.56 .net
LISPって、AIが流行った頃にもてはやされていたから
わりと近年の言語かと思っていたけど、2番目に古い高級言語だったとは (゜Д゜)ポカーン

コンピュータサイエンスが20世紀中頃から勃興した学問だから
その頃に活躍された先生や技術者が、最近になって亡くなるのは
淋しいけど歴史の流れだよね… (ノД`)

505 :495:2013/05/25(土) 16:12:52.40 .net
C言語の権利をどこも持っていないってどういうこと?
JavaだったらSunMicrosystemsだと思うけど
C言語は本当にどこにもないの?

506 :デフォルトの名無しさん:2013/05/25(土) 17:21:30.44 .net
むしろ Javaがおかしい

507 :デフォルトの名無しさん:2013/05/25(土) 17:32:11.01 .net
Sunはもうないけどそれは置いておいて...
プログラミング言語の言語仕様を指して権利うんぬん、と言ってるのなら著作権の概念はないらしい。
http://oshiete.goo.ne.jp/qa/7862358.html
仮にもし、誰かが権利を主張するとしたら、リッチーの在籍していたベル研になると思う。
ところでなんでC言語の権利を気にしているの?

508 :デフォルトの名無しさん:2013/05/25(土) 21:17:51.74 .net
>>505
まず「C言語の権利」が何を指してるか明確にしろってば
著作権じゃないんだろ?

509 :デフォルトの名無しさん:2013/05/25(土) 21:22:49.48 .net
言語仕様は著作権ないけど、
Sunを買い取ったOracle様がJavaのAPI仕様自体(API仕様書や実装ではない)に
権利主張してたよね。Androidの仕様を訴えてたあれ。
そんなもは認められないはずだけど、まだ完全には解決していないはず。

510 :デフォルトの名無しさん:2013/05/25(土) 23:15:51.03 .net
「 Java APIは著作権保護対象ではない 」
http://sourceforge.jp/magazine/12/06/03/2329238

511 :デフォルトの名無しさん:2013/05/25(土) 23:25:45.79 .net
あれは権利ゴロの嫌がらせだろ

512 :デフォルトの名無しさん:2013/05/26(日) 01:27:23.09 .net
プログラミング言語は工業規格(ネジ穴の大きさとか形とか)みたいなもんで、それそのものに権利を主張したりする性質のものじゃないよ。
強いて言えば規格を策定してるANSIのものとも言えるけど、それでも実装は個々のコンパイラ任せだし。
結局、C言語のコンパイラにはそれぞれ作者がいて権利を有してるけど、C言語そのものを持っている人は存在しない、ということになる。

513 :デフォルトの名無しさん:2013/05/26(日) 02:20:12.14 .net
基本情報やITパスポートで勉強するだろ

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

apiの仕様そのものに対する著作権はわからんが
apiのインターフェイスを記述したコードがあるならそのapiには著作権が発生する
当然第三者が勝手に利用したらアウト

514 :デフォルトの名無しさん:2013/05/26(日) 07:55:09.87 .net
>>513
GIF はアルゴリズム特許で問題が勃発したよね

515 :デフォルトの名無しさん:2013/05/26(日) 08:14:19.13 .net
著作権や特許という概念が、まず邪悪なんだよ
足し算や、足し算の記述に誰かの物なんて権利はあるか?ないだろ
それが当たり前なんだよ数学も物理もすべて神様が創造して、人間に与えたものだ
人間が新たに発明したから独占しようなどと考えるのはおこがましい
すべての知識は平等に誰からも利用されるものだ
足し算が独占できないように、少し複雑化しただけの他の知識も独占なんかしてはならないんだよ

516 :デフォルトの名無しさん:2013/05/26(日) 08:24:55.92 .net
うわぁ…
事実と理想が混同されてる

517 :デフォルトの名無しさん:2013/05/26(日) 08:35:31.08 .net
現実など糞食らえだ

518 :デフォルトの名無しさん:2013/05/26(日) 09:35:47.06 .net
R・ストールマンに傾倒されている方ですか?

519 :デフォルトの名無しさん:2013/05/26(日) 10:19:18.66 .net
ちなみに GIF の読み方は 「自負」 であって 「岐阜」 に非ず

520 :デフォルトの名無しさん:2013/05/26(日) 10:23:44.96 .net
俺は、コードが著作権で保護されて、ソフト会社がプログラムを売って金儲けするのに文句は言わないが
ソフトに欠陥があってもメーカーとして免責されるという状況には疑問だな
*PL法でカヴァーできないならソフトウェア専用の法律を整備すべきだ
メーカーとして権利(著作権)を主張するなら、メーカーとしての義務(責任)も果たせよ、と言いたい

521 :デフォルトの名無しさん:2013/05/26(日) 10:37:56.38 .net
すべてがFREEな世界に

522 :デフォルトの名無しさん:2013/05/26(日) 11:05:58.71 .net
すべてがFREE FREEな世界に

523 :デフォルトの名無しさん:2013/05/26(日) 20:23:49.75 .net
結局、彼の質問の意図は何だったんだろう
Cの参考書でも書くつもりなんかな
プログラミング言語の権利を気にする、その理由に興味があるな。 煽りじゃなくて、さ

524 :デフォルトの名無しさん:2013/05/26(日) 20:53:55.71 .net
うざいわ

525 :デフォルトの名無しさん:2013/05/26(日) 21:18:54.86 .net
法学部の学生かなんかで、ソフトウェアがらみの知財権か何かについて調べてたんじゃん?Dリッチーの名前すら知らなかったし。

526 :デフォルトの名無しさん:2013/05/26(日) 22:07:46.59 .net
>>525
俺も法学部だったけどあの訊き方じゃそれは無い。
法学部で重視するのは「誰か」じゃなく「どんな権利か」だし、C言語だけにこだわる理由もない。

527 :デフォルトの名無しさん:2013/05/26(日) 22:47:07.32 .net
>>526
> C言語だけにこだわる理由もない。
C以外のの言語には 【こだわってない】 という証拠は?

528 :デフォルトの名無しさん:2013/05/26(日) 23:28:59.15 .net
>>527
他の言語スレをひと通り見てきて同じ質問がされていたかを見てくれは済むんじゃない?
別に俺の言いたいことはそこじゃないからこだわっていようがいなかろうがどうでもいいけど。

529 :デフォルトの名無しさん:2013/05/26(日) 23:40:56.62 .net
他の言語スレを見てないのに言ってやんのwww 語るに落ちてるよw

530 :デフォルトの名無しさん:2013/05/26(日) 23:41:59.97 .net
知的財産権のばあい、権利の種類および、
誰が権利を所有しているのか、も当然、重視される事柄だが. 本当に法学部?

531 :デフォルトの名無しさん:2013/05/27(月) 00:51:30.52 .net
オマエらーー


もう許してやれ

532 :デフォルトの名無しさん:2013/05/27(月) 02:27:10.79 .net
>>530
その「誰が」ってのはあくまで概念上の話であって、具体的にCがどうのJAVAがどうのって話はしないよ。
ましてや権利の種類すら明らかにせず訊くなんてことは有り得ない。
少なくとも法学部のやる法学なら100%そう。

533 :デフォルトの名無しさん:2013/05/27(月) 07:09:35.66 .net
ここに書かれてることをできるだけ詳しく説明して欲しいです。
http://cansecwest.com/slides/2013/DEP-ASLR%20bypass%20without%20ROP-JIT.pdf

534 :デフォルトの名無しさん:2013/05/27(月) 11:31:54.68 .net
C言語から派生した言語はいろいろあるけと
全てデニスリッチーが作ったの?

535 :デフォルトの名無しさん:2013/05/27(月) 11:44:37.94 .net
デニスさんマジパネェッス

536 :デフォルトの名無しさん:2013/05/27(月) 11:45:44.56 .net
ケントンプソン涙目

537 :デフォルトの名無しさん:2013/05/27(月) 12:06:56.53 .net
デニスリッチーが作った言語のはCとC++のみ?

538 :デフォルトの名無しさん:2013/05/27(月) 12:08:59.06 .net
C++はビョーンスポッスポッ

539 :デフォルトの名無しさん:2013/05/27(月) 12:32:26.06 .net
デニスリッチーが作った言語は
C言語のみなの?

540 :デフォルトの名無しさん:2013/05/27(月) 13:05:50.03 .net
>>536
ケントンプソンだってチューリング賞をもらってんだ なにも泣くことはあるまいw

541 :デフォルトの名無しさん:2013/05/27(月) 15:34:45.37 .net
おちんぽミルク出ちゃいましゅ!

542 :デフォルトの名無しさん:2013/05/27(月) 19:50:01.48 .net
BCPL -> B -> Cだな。

543 :デフォルトの名無しさん:2013/05/28(火) 00:40:08.35 .net
>>542
Cの次は特に無し?

544 :デフォルトの名無しさん:2013/05/28(火) 01:33:38.81 .net
C → C++ → C# → D

545 :デフォルトの名無しさん:2013/05/28(火) 01:34:26.57 .net
Java

546 :デフォルトの名無しさん:2013/05/28(火) 12:28:00.68 .net
Javaもデニスリッチーなの?
神じゃん

547 :デフォルトの名無しさん:2013/05/28(火) 12:51:48.43 .net
カプセル化は望ましいといわれます。
すると実務ではメンバ変数なら全てカプセル化するもんなのでしょうか?
カプセル化はメンバ一つにつき2つアクセスのためのメソッド(読みと書き)を書く必要があり、めんどくさいんですが

548 :デフォルトの名無しさん:2013/05/28(火) 12:55:31.55 .net
>>547
メンバ変数に煩雑にアクセスするんならクラスの設計を見なおした方がいいよ
読み書きするアクセサを付ける位ならクラスの意味ないじゃん

549 :デフォルトの名無しさん:2013/05/28(火) 13:00:27.44 .net
>>547
やりたきゃやればいいと思うけど

550 :デフォルトの名無しさん:2013/05/28(火) 13:03:39.64 .net
publicにしてもいいしな
でも後から泣くような気がする

551 :デフォルトの名無しさん:2013/05/28(火) 13:17:41.79 .net
>>547
メンバ変数が public/private に綺麗に分かれているという前提で
public なメンバのみアクセッサを付けるというのがポピュラー
C#とか rubyとか専用の構文を持つ言語すらある

特に setter だけでも作っておくとデバッグがもの凄く楽になる

552 :デフォルトの名無しさん:2013/05/28(火) 13:24:05.91 .net
アクセサってattr_accessorとか@propertyとか書いてパッと作れたりしないんですか?

553 :デフォルトの名無しさん:2013/05/28(火) 13:44:13.99 .net
ないよ
ヘッダファイルにプロトタイプを書いて
ソースファイルに関数実体を書くのが男の流儀だよ

ヘッダに書いてインライン関数にしたりIDEの機能で追加したりするのも邪道
おれがゆるさない

554 :デフォルトの名無しさん:2013/05/28(火) 13:48:06.30 .net
そもそも
そういう無駄な設計技法を取り入れて実行時パフォーマンスを犠牲にするやり方は
Cのお作法ではない

JavaなりC#なりに移るべき

555 :デフォルトの名無しさん:2013/05/28(火) 13:48:52.55 .net
いやむしろDに(ry

556 :デフォルトの名無しさん:2013/05/28(火) 15:43:24.57 .net
>>551
publicは自由にアクセスできるのになんでアクセッサを付ける必要があるの?

557 :デフォルトの名無しさん:2013/05/28(火) 15:58:18.38 .net
C++ならではの汚い文法だけど、特定の関数やクラスだけにfriendとして
公開する方法もある

大抵はこれで行ける

558 :デフォルトの名無しさん:2013/05/28(火) 15:59:48.15 .net
文法が汚いというか、設計が汚いね、それ

559 :デフォルトの名無しさん:2013/05/28(火) 16:03:23.54 .net
friend は公開じゃなくて
1つのクラスをやむを得ず複数に分割せざるをえないような時に使うもの

560 :デフォルトの名無しさん:2013/05/28(火) 16:10:10.56 .net
でもstd::ostresmやstd::istreamに渡す時はfriendにするしかないだろ?

561 :デフォルトの名無しさん:2013/05/28(火) 17:11:59.16 .net
<<か。上の話とはあまり関係無い気がするが。

562 :デフォルトの名無しさん:2013/05/28(火) 19:27:32.23 .net
まとめると
デニスリッチーが作って今使われてる言語は
C、C++、C#、Java
ってことでOK?

563 :デフォルトの名無しさん:2013/05/28(火) 20:08:09.40 .net
>>562
> デニスリッチーが作って今使われてる言語は
> C、C++、C#、Java
> ってことでOK?
その文章だと、C++もC#もJavaも、リッチーが作ったという意味になる。そう理解してるの?

564 :デフォルトの名無しさん:2013/05/28(火) 20:34:21.59 .net
人に聞くばっかりじゃなくて少しは検索しようぜ。
wikipediaとかもあるわけだし。

565 :デフォルトの名無しさん:2013/05/28(火) 21:04:31.20 .net
そろそろ目的を白状しようぜ!!!
大勢の人間がレスしてんだから、質問の意図ぐらい開示してくれてもいいだろう

566 :デフォルトの名無しさん:2013/05/29(水) 01:14:52.48 .net
白状しろとか怖い

567 :デフォルトの名無しさん:2013/05/29(水) 05:17:42.57 .net
 
             /. : . : . : . : . : . : . : . : ヽ
           /. : . : . : . : . : . : _,. -┐. : :|        貴
            |. : 「`¨ ー-‐     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 .net
オイオイ
あまりみんなで脅すと本人が萎縮しちゃって
言いたいことも言えなくなってしまうじゃないか! もっと優しく聞けよ!

ん? 怒らないからオジさんに言ってごらん
恥ずかしがること ないんだよ
ほら もうこんなに....

569 :デフォルトの名無しさん:2013/05/29(水) 11:10:11.92 .net
だってとっくに本人いなくなってるし

570 :デフォルトの名無しさん:2013/05/29(水) 12:40:16.35 .net
ポインタって動的になるの?

571 :デフォルトの名無しさん:2013/05/29(水) 13:04:01.82 .net
ポインタによる無効なアドレスへの参照
>>1002

572 :デフォルトの名無しさん:2013/05/29(水) 13:05:02.14 .net
ハイパーリンクつかないのか。チッ余計なことを

573 :デフォルトの名無しさん:2013/05/29(水) 13:20:17.12 .net
例えばmallocで帰ってくるポインタ(アドレス)は動的に変わりうるが
静的なインスタンスに対するポインタならプログラムの実行を通して不変だろう
いまいち質問の意味がわからん
最近こんなのばっかり

574 :デフォルトの名無しさん:2013/05/29(水) 13:26:25.99 .net
>>547
外部公開するクラスだけでいいよ

575 :デフォルトの名無しさん:2013/05/29(水) 23:31:45.98 .net
ポインタってnewみたいに
動的って解釈で良いの?

576 :デフォルトの名無しさん:2013/05/29(水) 23:34:07.19 .net
意味が分からない問いには答えられない

577 :デフォルトの名無しさん:2013/05/30(木) 15:35:51.03 .net
ポインタ自体は静的だな
char *p;
free(&p);
なんてことしないだろ?

578 :デフォルトの名無しさん:2013/06/05(水) 02:33:43.75 .net
SUCCEEDEDってif文の中の処理が正常に実行されたらif文実行ってことで良い?

579 :デフォルトの名無しさん:2013/06/05(水) 02:42:43.09 .net
>>578
それはWindowsプログラミングにおけるSUCCEEDED()マクロのこと?
もしそうだとしたら、HRESULTで調べてみて

580 :デフォルトの名無しさん:2013/06/05(水) 10:40:53.54 .net
>>578
自分がぷろぐらむを書くんじゃなくて読むだけならそう思っておいていい

581 : ◆QZaw55cn4c :2013/06/05(水) 22:42:35.14 .net
>>577
最近教えていただいたネタ http://codepad.org/ChgEkuVs

582 :デフォルトの名無しさん:2013/06/05(水) 23:18:33.26 .net
何の関係があるのか分からん

583 :デフォルトの名無しさん:2013/06/06(木) 01:56:51.92 .net
IOCCC的なネタだな。

584 :デフォルトの名無しさん:2013/06/08(土) 11:48:34.71 .net
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 .net
1.0*10^38 ~ 1.0*10^-37
1.0*10^308 ~ 1.0*10^-307

586 :デフォルトの名無しさん:2013/06/08(土) 12:04:05.32 .net
自己解決しました
scanfの中でdoubleで定義された文字を使う場合は%lfでないとだめなのですね

587 :デフォルトの名無しさん:2013/06/08(土) 18:26:25.13 .net
@C++
1.テキストの先頭に追記したいです
2.テキストの先頭文字を削除したいです

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

・あまりやりたくないこと
バッファに文字列を一度読み込んで,同じファイルに上書き再出力

588 :デフォルトの名無しさん:2013/06/08(土) 18:28:27.04 .net
エラー耐性が高いのは、
別ファイルに出力して、元ファイルを消して、別ファイルをリネーム

エラー耐性不要なら
バッファに文字列を一度読み込んで、同じファイルに上書き再出力

589 :デフォルトの名無しさん:2013/06/08(土) 18:30:21.54 .net
一度読み込むと言っても全部読み込む必要はなくて
適宜上書き出力すれば良い
上書きしてもまだ読んでない所には上書きされないので

590 :デフォルトの名無しさん:2013/06/08(土) 18:41:16.04 .net
ありがとう
素直に読み込んどきます

591 :デフォルトの名無しさん:2013/06/08(土) 18:43:30.24 .net
仕事ではやるなよ

592 :デフォルトの名無しさん:2013/06/08(土) 19:21:45.52 .net
普通は元になるデータを保持しておいて
適宜最初から書き出すとは思う

593 :デフォルトの名無しさん:2013/06/10(月) 12:26:28.43 .net
intのバイト数って環境によって変わるらしいけど
何が原因でかわるの?

594 :デフォルトの名無しさん:2013/06/10(月) 12:28:12.47 .net
ハードウェアの都合で

595 :デフォルトの名無しさん:2013/06/10(月) 13:16:34.82 .net
64bit版とか32bit版とか1度くらい聞いたことあるべ

596 :デフォルトの名無しさん:2013/06/10(月) 14:48:14.70 .net
一応
short≧int≧long
ってなってるはずだけどな

597 :デフォルトの名無しさん:2013/06/10(月) 14:48:34.30 .net
逆だろう

598 :596:2013/06/10(月) 14:52:18.76 .net
あ、ほんとだ

599 :デフォルトの名無しさん:2013/06/10(月) 15:13:43.55 .net
あと、intはそのマシンの自然な語長にする、という規定があったような… 俺の勘違いかな??

600 :デフォルトの名無しさん:2013/06/10(月) 18:14:56.62 .net
8ビットCPU用Cのintは16ビットだった気がする

601 :デフォルトの名無しさん:2013/06/10(月) 18:55:53.44 .net
さっそくの反例 ありがとうございます。 勘違い、失礼いたしました。
#CP/Mの時代か〜 俺の産まれる前だわ (←ウソ)

602 :デフォルトの名無しさん:2013/06/10(月) 19:35:52.77 .net
いくらマシンが貧弱な時代でも
0-255 の範囲で整数型(キリッ などと考える馬鹿がいるものか

603 :デフォルトの名無しさん:2013/06/10(月) 19:54:56.73 .net
>>599
合ってるんだけど、何をもって自然とみなすかは規定されてないんだよね

604 :デフォルトの名無しさん:2013/06/10(月) 20:00:48.95 .net
多分、CPUの一番使用頻度の高いレジスタサイズで決めるんじゃない?

605 :デフォルトの名無しさん:2013/06/10(月) 20:01:06.71 .net
>>600
そりゃ規格でintは16ビット以上が
要求されてるからな

606 :デフォルトの名無しさん:2013/06/10(月) 20:12:33.25 .net
>>604
64bit機でもint=32bitが一般的
レジスタサイズなどあくまで目安にしかならない

607 :デフォルトの名無しさん:2013/06/10(月) 21:32:58.72 .net
>>606
それは win32api のソースを全面刷新させないための、つごー

608 :デフォルトの名無しさん:2013/06/10(月) 22:13:11.67 .net
ちょっと!なに言ってんのかわかんない

609 :デフォルトの名無しさん:2013/06/10(月) 22:14:06.93 .net
なにがわからないのかがわからない

610 :デフォルトの名無しさん:2013/06/10(月) 22:45:50.89 .net
gccだって32bitなのに

611 :デフォルトの名無しさん:2013/06/10(月) 22:54:29.40 .net
糞プログラマーのレベルに合わせて
互換性を優先したってことだろ
文字通りの解釈しかできないアスペか

612 :デフォルトの名無しさん:2013/06/10(月) 23:26:37.27 .net
>>607
x86 & Windows 以外の処理系もあるのに それは理由にならんだろ

613 :デフォルトの名無しさん:2013/06/10(月) 23:29:17.88 .net
>>611
> 文字通りの解釈しかできないアスペか
お前はWindows以外を知らないアスペねw

614 :デフォルトの名無しさん:2013/06/11(火) 02:04:51.46 .net
x64 なんて後ろ向きの妥協の局地で動かすんだから
互換性最優先なのは当然だろ

615 :デフォルトの名無しさん:2013/06/11(火) 02:59:42.21 .net
char=1,short=2から4を飛ばしてint=8にするのはおさまりが悪い
short=4じゃ2が空くしな

616 :デフォルトの名無しさん:2013/06/11(火) 03:03:28.40 .net
いっそ int2, int4, int8, int16 ってすればいいのに
将来 int3, int7が出てきても大丈夫w

617 :デフォルトの名無しさん:2013/06/11(火) 06:28:39.85 .net
x64が64bitならx86は86bitじゃないの?なんで32bitなの?命名者馬鹿なの?

618 :デフォルトの名無しさん:2013/06/11(火) 06:59:53.50 .net
単にCPUの名前から由来してるからしょうがない
Corei7とかもどこにも64なんてついてないだろ?
そういうことだ

619 :デフォルトの名無しさん:2013/06/11(火) 07:36:12.62 .net
x86 は 80x86 の略だからな

620 :デフォルトの名無しさん:2013/06/11(火) 09:31:56.87 .net
>>616
処理系独自の拡張は既にあるよ。たとえば
__int8、 __int16、 __int32、 __int64

621 :デフォルトの名無しさん:2013/06/11(火) 11:06:40.05 .net
文句があるなら IA64 を捨てた奴らに言え

622 :デフォルトの名無しさん:2013/06/11(火) 11:09:30.51 .net
>>616
>int3, int7ってなんだよ
もし作っても、メモリレイアウト上パディングされるだろ

623 :デフォルトの名無しさん:2013/06/11(火) 13:02:00.17 .net
C99でint8_tとかint16_tとか追加されてるね

624 :デフォルトの名無しさん:2013/06/11(火) 18:33:51.41 .net
>>623
それってオプションじゃなかった?

625 :デフォルトの名無しさん:2013/06/11(火) 18:41:47.56 .net
least16みたいなのは必須でも
16丁度みたいのはオプションだね

626 :デフォルトの名無しさん:2013/06/11(火) 19:52:40.91 .net
>>616
7bitレジスタのCPUは昔存在したはず

627 :デフォルトの名無しさん:2013/06/11(火) 19:56:05.32 .net
CHAR_BITは8以上だから・・・
というかそのレスはバイト数の話だし

628 :デフォルトの名無しさん:2013/06/11(火) 19:56:50.41 .net
intの違いはOSの32bit64bitだけなの?

629 :デフォルトの名無しさん:2013/06/11(火) 20:01:48.67 .net
間違えた

intのビット数が変わる要因はOSの32bit64bitだけなの?

630 :デフォルトの名無しさん:2013/06/11(火) 20:03:57.71 .net
神様の気分次第

631 :デフォルトの名無しさん:2013/06/11(火) 20:06:27.19 .net
>>629
コンパイラーを作る人の気分による。
コンパイラーは開発プログラム動作する環境の
オペレーティングシステムを強く意識している。

632 :デフォルトの名無しさん:2013/06/11(火) 21:18:50.23 .net
むかしDECのマシンでアプリを作ってた。
VAXからAlphaにマイグレーションしたんで、intが64bitなるか、と調べてみたら32bitだった。多分コンパチのためだろうけど。
intが64bitの処理系ってあんのかな。
PA-RISCやSPARCマシンは使ったことないけど、どうだったんだろう?

633 :デフォルトの名無しさん:2013/06/11(火) 21:31:46.73 .net
ILP64は一応あるにはある

634 :デフォルトの名無しさん:2013/06/12(水) 19:53:44.00 .net
任意ビットのintが宣言でき、ビットフィールドのごとく配列にして使えるようになると便利かな
CPUの制約は、この際無視w

635 :デフォルトの名無しさん:2013/06/12(水) 19:59:13.93 .net
使いどころが無いと思う

636 :デフォルトの名無しさん:2013/06/12(水) 20:09:08.24 .net
operator 駆使して自分で実装すればいい

637 :デフォルトの名無しさん:2013/06/12(水) 22:01:50.22 .net
#pragmaのいくつかをもうちょっと標準にしてくれるとか。
#pragma onceとか#pragma pack()とか。
あとendian関係とか。

638 :デフォルトの名無しさん:2013/06/13(木) 01:58:59.16 .net
>#pragma pack()
プリプロセッサーの仕事から逸脱してるし
そもそも同等のことは既に標準化されてる
>あとendian関係
ちょっと意味わかんない

639 :デフォルトの名無しさん:2013/06/13(木) 07:38:27.60 .net
bswapは欲しい

640 :デフォルトの名無しさん:2013/06/26(水) 17:40:14.75 .net
>>602
TL/1

641 :デフォルトの名無しさん:2013/06/26(水) 19:54:58.99 .net
TL/1wwww

昔のPC板かよ

642 :デフォルトの名無しさん:2013/06/26(水) 19:55:57.39 .net
そういやGAME/86ってのもあったな
記号だらけの言語
まあBASICの予約語を記号に置き換えただけなんだけど

643 :デフォルトの名無しさん:2013/06/26(水) 22:34:11.77 .net
月刊ASCII読者のOB会はココですか?
ナノピコのコンピュータ世界の最前線が面白かった

644 : ◆QZaw55cn4c :2013/06/27(木) 11:11:16.09 .net
それよりbitのナノピコ教室がー

645 :デフォルトの名無しさん:2013/06/27(木) 12:18:08.50 .net
当時のCPUには当然FPUなんかなかったから浮動小数点演算は全部手書きだぞ
あれで相当勉強になった

これはアセンブラスレで書いた方がいいな

646 :デフォルトの名無しさん:2013/06/27(木) 15:27:03.45 .net
8087買う金がなかったんじゃないの? (* ̄ー ̄)y-~~~

647 :デフォルトの名無しさん:2013/06/27(木) 17:04:12.92 .net
要りもしないところに小数演算は甘え

648 :デフォルトの名無しさん:2013/06/27(木) 17:52:27.79 .net
んーー 645はアセンブリ言語を使ってたんかな?
MS-Cのばあい、FP演算には、87用、87がなくてもソフトで完全エミュレート、演算精度より速度優先、
みたいに幾つかライブラリを用意してたとおもう。
当時は(コスト的に)マシンにFPUがついてないのが当たり前だったからなぁ (遠い目…)

649 :デフォルトの名無しさん:2013/06/27(木) 23:22:30.54 .net
8bit CPU の話だろう

そういや、FACCとかいってたねえ > ROM
ふぁっく!

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

>>648
ソフトウェアエミュレーションの場合FPUの全ての命令をエミュレート
してるわけじゃないんだよな
C言語で使う物だけ最低限入ってた

651 :デフォルトの名無しさん:2013/07/30(火) NY:AN:NY.AN .net
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 .net
>>651
stringstreamに一桁精度高く流し込んで一文字削ったら?

653 :デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN .net
>>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 .net
保守

655 :デフォルトの名無しさん:2013/09/26(木) 01:52:08.25 .net
レス・ハンコックの「C言語入門 改訂第3版」という少し古い本はどうですか?
使ったことある方がありましたら感想お願いします

656 :デフォルトの名無しさん:2013/09/28(土) 20:28:28.73 .net
揚げ物

657 :デフォルトの名無しさん:2013/10/10(木) 22:31:55.02 .net
Wikiの引数の項目で
「C言語のように明示的にアドレス演算子を使うものは参照渡しとは呼ばない」
って書いてあるけど、巷のC言語本ではこれを「参照渡し」って解説してない?
まぁWikiとしては「ポインタ渡し」と言いたいところだろうが、この機構の本質的な部分において
両者は同じ原理で動作するんだから、「参照渡しではない」と言い切るのは違和感があるな。
実際、Wikiの解説が今の時代は正しいのだろうか?

658 :デフォルトの名無しさん:2013/10/10(木) 22:48:42.58 .net
>>657
プログラミング言語を限定しない汎用的学術的な定義と、
各言語の専門用語や方言として使われる定義が一致しない…
…って事でも良い気がするのだけど。

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

どう見なして扱うか。言語のパラダイムとかってのはそういうモンだよな。
オブジェクト指向の設計をアセンブリ言語で実装とかも可能なのだし。

659 :デフォルトの名無しさん:2013/10/10(木) 23:38:54.64 .net
K&Rでは参照渡しじゃないって書いてあった気もするけど
たぶん今の規格にそんな記述はないだろうな

660 :デフォルトの名無しさん:2013/10/11(金) 00:28:11.18 .net
>>657
C++ に参照渡しがある以上,C のあれは参照渡しじゃないだろう.
wikipedia の「参照渡しではない」と言い切る,あるいは「Cは参照渡しCallByReferenceを持たない」と言い切るのが正確無比といえよう.

661 :デフォルトの名無しさん:2013/10/11(金) 09:49:20.88 .net
なるほどね!すごく納得。
言語仕様として用意されてるのは値渡しだけで
プログラマが引数にポインタ演算子を使ってアドレスを突っ込むことで 『プログラマが』 参照渡しのコードを書いてる…と言える。
配列だって仮引数で*宣言するのはプログラマだしね。
俺の理解が間違っていたのか… orz

662 :デフォルトの名無しさん:2013/10/11(金) 16:27:52.16 .net
>>661
まぁ、今間違いに気付き正しく理解したのだから、一生間違ったままでいるよりよかったじゃん。

663 :デフォルトの名無しさん:2013/10/11(金) 16:39:23.08 .net
プログラム書くのには関係なさげ

664 :デフォルトの名無しさん:2013/10/12(土) 16:40:18.70 .net
フォームアプリケーションでの質問だけど、
テキストボックス(名前: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 .net
メンバじゃないから続きはC++/CLIのスレできけ

666 :デフォルトの名無しさん:2013/10/12(土) 19:01:21.07 .net
six six six

667 :デフォルトの名無しさん:2013/10/13(日) 03:40:19.13 .net
>>664
c_str()はstd::string(標準C++ライブラリの文字列クラス)のメンバ。
System::Stringは標準C++ライブラリではない、別のライブラリのクラスで、そこにc_str()は無いのだろう。

668 :デフォルトの名無しさん:2013/10/13(日) 14:19:34.42 .net
C++でゲームを作っているのですが
ゲーム本編のクラスに細かい機能のクラスを追加したかった場合
どのように追加したクラスを本編クラスにくっつけるものなのですか?
本編クラスのメンバーでそのクラスを生成すれば良いのですか?

669 :デフォルトの名無しさん:2013/10/13(日) 14:21:37.85 .net
委譲で

670 :デフォルトの名無しさん:2013/10/13(日) 15:57:42.99 .net
委譲も一つの有効な手だけどもデリゲートコードを自動生成する機能がC++にはないので
(多重)継承を使ったミックスイン手法を使う
多重継承は基本さえ押さえていればJava陣営が喧伝するほど危険なものではない

671 :デフォルトの名無しさん:2013/10/13(日) 21:26:05.35 .net
いや、多重継承は普通に危険だろ。
一瞬一瞬は便利だけど後になればなるほど肝心な部分の変更が難しくなっていくし。
ゲーム開発はソフトウェアの中でも特にコア部分をいじりまくる分野なんだから多重継承を推奨すべきではないと思うよ。
移譲で解決を図るべきだと思う。

672 :402:2013/10/14(月) 00:42:24.97 .net
>>671
その点で委譲と継承に違いなんてないだろ
ミックインされるクラスがちゃんと設計されていれば
protectedメンバはあってはならない

673 :デフォルトの名無しさん:2013/10/14(月) 00:43:32.93 .net
名前欄の402は消し忘れです

674 :デフォルトの名無しさん:2013/10/14(月) 08:30:21.93 .net
>>670
まあ、gotoみたいなもんだと思う。
使う範囲を絞らないとグチャグチャになってしまう。
だからJavaなんかはgotoと同じく禁止にして
代替機能としてinterfaceを用意したんだろうね
…出来ればmixinも用意して欲しかったけれど

675 :デフォルトの名無しさん:2013/10/17(木) 19:17:34.62 .net
質問です

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

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

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

よろしくお願いします

676 :デフォルトの名無しさん:2013/10/17(木) 19:24:30.94 .net
>>675
補足します
現在販売されている一般的な家庭用パソコンでの処理速度の話です
構造体の多きさは2キロバイト程度です

677 :デフォルトの名無しさん:2013/10/17(木) 19:34:41.72 .net
処理時間よりスタックオーバーフローが怖い

678 :デフォルトの名無しさん:2013/10/17(木) 21:33:15.23 .net
スタックオーバーフローでぐぐったら
どうすべきなのか判りました。ありがとうございます

679 :デフォルトの名無しさん:2013/10/18(金) 00:49:09.60 .net
いや構造体のメンバの型次第だろ

680 :デフォルトの名無しさん:2013/10/18(金) 06:57:28.27 .net
構造体のメンバでググったらわかりました

681 :デフォルトの名無しさん:2013/10/18(金) 17:11:11.92 .net
アドレス渡しとけよ

682 :デフォルトの名無しさん:2013/10/18(金) 22:30:24.31 .net
値渡し自体は全然問題ないが、
2kはさすがに大きすぎるからポインタのがいいだろ

683 :デフォルトの名無しさん:2013/10/19(土) 15:31:59.30 .net
渡すのは構造体じゃなくて、そのメンバだろ?

684 :デフォルトの名無しさん:2013/10/19(土) 15:40:27.39 .net
構造体全体の大きさは2k Byteだけど、渡したいメンバのサイズが4 Byteだったりしてな

685 :デフォルトの名無しさん:2013/10/19(土) 17:45:48.57 .net
どうしても分からない問題が発生したので教えて下さい。

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 .net
定義にstaticはいらん

687 :デフォルトの名無しさん:2013/10/20(日) 04:50:29.33 .net
>>686
コンパイルできました!
初歩的な質問に答えて頂きありがとうございました!(´・ω・`)

688 :デフォルトの名無しさん:2013/10/20(日) 17:00:59.12 .net
人生は初めてなのですが、どうしたらいいですか?

689 :デフォルトの名無しさん:2013/10/20(日) 21:35:13.08 .net
力抜けよ

690 :デフォルトの名無しさん:2013/10/20(日) 21:50:33.72 .net
深呼吸して

691 :デフォルトの名無しさん:2013/10/21(月) 11:44:32.29 .net
うまくいかないな〜と感じたら、迷わずシャットダウン&リブート

692 :デフォルトの名無しさん:2013/10/21(月) 14:42:13.09 .net
>>691
Idle状態で放置していたら何も仕事を受け付けなくなりました
一度シャットダウンしたほうがいいですか?

693 :デフォルトの名無しさん:2013/10/21(月) 16:35:46.76 .net
その時にはリブートしても同じ現象が出るだけなので、パッチを当てるなり、ソフトをアップグレードするなり、抜本対策が必要でしょう。

694 :デフォルトの名無しさん:2013/10/21(月) 17:30:06.08 .net
シャットダウン&リブートって
リブートにシャットダウン含まれてるんじゃ

695 :デフォルトの名無しさん:2013/10/22(火) 12:07:29.47 .net
>>694
マジレスすると、(正常な)シャットダウンを含まないリブート(例えば、電源断やハードリセット、システムクラッシュetc後の再起動)もあるよ。
wikiの再起動の項を参照してみんさい。

696 :デフォルトの名無しさん:2013/10/23(水) 15:19:42.21 .net
http://ideone.com/GhzHfX

↑クラスのメンバ関数に関数ポインタや関数リファレンスを使うにはどうしたらいいんですか?

697 :デフォルトの名無しさん:2013/10/23(水) 17:37:50.41 .net
auto f = std::bind(&Foo::func, &foo);
f();

698 :デフォルトの名無しさん:2013/10/23(水) 17:58:41.32 .net
>>696
http://ideone.com/7WSPf2

699 :デフォルトの名無しさん:2013/10/23(水) 18:40:35.54 .net
そういえば、vtableをディスパッチテーブルとみなして、
積極的に書き換える時、きれいに書けなくて困ったことがある
vtableのサイズ、各メソッドの位置を、、
できればVCで

700 :デフォルトの名無しさん:2013/10/23(水) 18:51:49.27 .net
なんなんだそのモヤモヤしたレスは
質問ならはっきり疑問形で書け

701 :デフォルトの名無しさん:2013/10/23(水) 19:39:47.70 .net
>>697-698
d
void (&rfunc)() = func; のほうは出来ないの?ポインタだけ?

702 :デフォルトの名無しさん:2013/10/23(水) 19:41:44.71 .net
無理に決まってんだろ常識的に考えて

703 :デフォルトの名無しさん:2013/10/23(水) 20:04:57.65 .net
>>702
d
エイリアスみたいに違う名前で呼び出したりとかは出来んのか残念

704 :デフォルトの名無しさん:2013/10/25(金) 04:07:16.54 .net
http://sourceforge.jp/pastebin/655

これのエラーの原因が分かりません

705 :デフォルトの名無しさん:2013/10/25(金) 04:27:42.44 .net
>>704
テンプレートはコンパイル時に解決できる必要があるから、
ヘッダに中身も書いてやらないと駄目
もしくは特殊化してやる必要がある

706 :デフォルトの名無しさん:2013/10/25(金) 04:34:25.43 .net
>>704
コンパイル時に定義が見えている必要がある

707 :704:2013/10/25(金) 05:03:55.97 .net
>>705-706
d
つまりテンプレートで定義したクラスも関数もヘッダに全部書く必要があるってことですね
便利そうであまり便利じゃないんですねテンプレートって・・・

708 :デフォルトの名無しさん:2013/10/25(金) 05:10:08.08 .net
その程度のことでテンプレートの利便性が否定できるか

709 :704:2013/10/25(金) 05:38:16.70 .net
テンプレートって何でもつっこめる汎用な関数や汎用なクラスを作れるものだと勝手に勘違いしてました
テンプレートって読んで字のごとくでコンパイラにとってのテンプレートって意味だったんですね
Value<int>やValue<long>が使われてたらコンパイラがint専用やlong専用のをテンプレートに従って再定義し直してたんですね

710 :デフォルトの名無しさん:2013/10/25(金) 08:36:23.14 .net
プリプロセッサマクロが生まれ変わったようなもの

711 :デフォルトの名無しさん:2013/10/25(金) 13:31:02.42 .net
すまん、>>705は用語を間違えてる。特殊化はオーバーロードみたいなやつのことだったな

「明示的な実体化」とかになるのかな?
cppに書いたのを定義するために、ヘッダで型をいれて宣言しておく必要がある

712 :デフォルトの名無しさん:2013/10/27(日) 15:42:38.84 .net
もう全てのコードをヘッダだけに書いてcppはコンパイル単位を分割するだけにしてOK

713 :デフォルトの名無しさん:2013/10/27(日) 15:45:26.64 .net
コンパイルエラー
定義が重複しています

714 :デフォルトの名無しさん:2013/10/27(日) 15:46:22.28 .net
リンクエラー
定義が見つかりません

715 :デフォルトの名無しさん:2013/10/27(日) 15:47:53.92 .net
for文やwhile文などでくりかえし処理をすると,繰り返しの回数が99回目までは問題ないのですが
必ず100回目で「sqrt domain error」が必ず出ます。
数値を色々変えてみても必ず起きます.
sqrt domain errorはルートの中身が負のときでるエラーだと思うのですが
それ以外に出る原因はありますか?

716 :デフォルトの名無しさん:2013/10/27(日) 16:19:53.51 .net
>>715
infとかnanとか
sqrtに渡してるのを調べればすぐに分かるだろ

717 :デフォルトの名無しさん:2013/10/27(日) 16:33:21.72 .net
>>715
マルチ

718 :デフォルトの名無しさん:2013/10/27(日) 20:14:55.49 .net
高速道路が無料化するって本当ですか?

719 :デフォルトの名無しさん:2013/10/31(木) 17:26:23.25 .net
クラスの配列を返却する関数を作りたいんですが、どうすればよいですか?

関数内でクラス型のダブルポインタを作って、必要な要素数の配列ポインタを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 .net
コンテナ使え

721 :デフォルトの名無しさん:2013/10/31(木) 20:28:37.56 .net
ありがトン。引数にArrayListのポインタを渡す事にします。

722 :デフォルトの名無しさん:2013/11/03(日) 01:23:46.76 .net
ArrayList?JavaかC#と勘違いしてるんじゃないのか

http://ideone.com/kxiZ3U

コンテナ+スマポで一挙に解決

723 :デフォルトの名無しさん:2013/11/14(木) 20:20:38.45 .net
(1) //clog << ...;
(2) a.out 2>/dev/null

速いのは?

724 :デフォルトの名無しさん:2013/11/14(木) 21:07:18.94 .net
ループ回して試せ

725 :デフォルトの名無しさん:2013/11/16(土) 19:54:08.64 .net
参照変数について教えてください。

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

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

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

参照変数 = *(newしたポインタ)
delete 参照変数;

726 :デフォルトの名無しさん:2013/11/16(土) 19:57:02.26 .net
残るに決まってんだろアホか

727 :デフォルトの名無しさん:2013/11/16(土) 19:58:55.44 .net
日本語で頼む

char *str1, *str2;

str1 = new;
str2 = str1;
delete str2;

これならdelete str1と同じ

728 :デフォルトの名無しさん:2013/11/16(土) 21:01:15.85 .net
delete 参照変数;じゃなくてdelete &参照変数;じゃね

729 :デフォルトの名無しさん:2013/11/17(日) 00:34:41.67 .net
shared_ptrで包んどけ
数が少ないうちはいいけど、多くなるととても自分では管理しきれなくなる

730 :デフォルトの名無しさん:2013/11/17(日) 02:08:52.76 .net
コンテナを全て乱数で初期化する、最も良い方法は何ですか?
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 .net
>>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 .net
>>731
最適化無しだとpush_backの呼び出しコストがアホみたいに掛かるし、
最適化が掛かればループ内で参照しない文のsize加算は消滅が期待できるんじゃね?

733 :デフォルトの名無しさん:2013/11/17(日) 07:10:41.97 .net
期待通りに動くと思うな

734 :デフォルトの名無しさん:2013/11/17(日) 08:26:52.17 .net
つまりcppはゴミってことさ
Dを使おうよ

735 :デフォルトの名無しさん:2013/11/17(日) 08:28:02.02 .net
安定したら教えてくれ

736 :デフォルトの名無しさん:2013/11/17(日) 08:58:28.85 .net
安定は死を意味する > D
D道に果てはない

737 :デフォルトの名無しさん:2013/11/18(月) 20:12:00.71 .net
空行はインデントする派?しない派?

738 :デフォルトの名無しさん:2013/11/18(月) 21:00:40.37 .net
空行のインデントって何?

_____int i;

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

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

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

739 :デフォルトの名無しさん:2013/11/18(月) 21:01:50.74 .net
気づいたらVSがインデント消してるから気にしない

740 :デフォルトの名無しさん:2013/11/22(金) 23:11:43.19 .net
ディレクトリ内の特定の拡張子のファイルを全て選択して指定のプログラムで開くプログラムを作りたいんですが使えそうな関数を教えてもらえないでしょうか?

コンテキストメニューにあるような別のプログラムで開くに相当する関数が見つけられなくて困ってます

741 :デフォルトの名無しさん:2013/11/22(金) 23:52:41.22 .net
Cには無理だからOSのAPIを使うしかない

742 :デフォルトの名無しさん:2013/11/23(土) 01:43:34.50 .net
C使いは、(Winなら)バッチ使いでもあるべき
for %s in (*.xxx) do start /w %s
みたいにもできるわけだ

743 :デフォルトの名無しさん:2013/11/23(土) 16:55:50.93 .net
最大限にエスパーして、環境はWindowsで
既にダイアログを開いて選択するところまでは作れているものとして

とりあえず ShellExecute かな

744 :デフォルトの名無しさん:2013/11/26(火) 08:26:21.15 .net
system()でもできるだろ。

745 :デフォルトの名無しさん:2013/11/26(火) 08:54:14.75 .net
COMコンポートを使うといいよ

746 :デフォルトの名無しさん:2013/11/26(火) 16:38:40.76 .net
system使うならプログラムせんでいい

747 :デフォルトの名無しさん:2013/11/26(火) 23:56:43.50 .net
>>746
シェルスクリプトやバッチファイルでエスケープされてるか気にしながら書くよりは、
systemを乱用してコード書いたほうがマシなケースも有るような気がしなくもない。

748 :デフォルトの名無しさん:2013/11/27(水) 01:32:06.13 .net
>>747
さすがC/C++厨の発想だな

おまおれ

749 :デフォルトの名無しさん:2013/11/27(水) 08:14:36.75 .net
systemじゃあ出力が取れんだろ

750 :デフォルトの名無しさん:2013/11/27(水) 12:39:08.44 .net
>>749
つ[popen()]

751 :デフォルトの名無しさん:2013/11/27(水) 16:24:30.31 .net
そこまでするか

752 :デフォルトの名無しさん:2013/12/21(土) 12:57:54.83 .net
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 .net
>>752
http://msdn.microsoft.com/ja-jp/library/t33ya8ky(v=vs.90).aspx
"wb"でファイル開け

754 :デフォルトの名無しさん:2013/12/21(土) 15:29:29.31 .net
>>752
setlocaleしてないからだ

755 :デフォルトの名無しさん:2013/12/21(土) 19:36:30.84 .net
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 .net
wcout

757 :デフォルトの名無しさん:2013/12/21(土) 20:11:50.58 .net
wcoutに変更したら解決したし、cinではなくwcinで標準入力するんだろうと思って
試すと成功しました。
それでは、ifstreamとofstreamクラスもwchar_tの対応型のクラスもあるんですか。

758 :デフォルトの名無しさん:2013/12/21(土) 20:35:39.89 .net
お前もう自力でやれ

759 :デフォルトの名無しさん:2013/12/21(土) 20:36:26.32 .net
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 .net
-- 続き --
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 .net
やはり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 .net
>>761
_wsetlocale(LC_ALL, L"JPN");とchar or wchar_tを統一するか
TCHARを使用

763 :デフォルトの名無しさん:2013/12/21(土) 21:08:36.71 .net
言語開発者自身の書いた「プログラミング言語 C++ 第3版」の本でも1ページも
書いてるページがなかっな。こんなに情報量が少なければ、知識のある人や実際
にプログラミングしてる人って、多分少ないんだろうな。

764 :デフォルトの名無しさん:2013/12/21(土) 21:22:33.67 .net
iostreamのstd定義見たら
cout, wcout, ・・・って載ってるだろ

765 :デフォルトの名無しさん:2013/12/21(土) 21:23:10.17 .net
>>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 .net
>>761
std::locale::global(std::locale("japanese"));にしろ

767 :デフォルトの名無しさん:2013/12/22(日) 10:33:42.34 .net
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 .net
>>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 .net
>>767
コードはこれ使って全て入力して
ttp://ideone.com/

770 :デフォルトの名無しさん:2013/12/22(日) 13:51:05.84 .net
無理でした。

標準出力
---- 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 .net
>>770
Visual C++ Express Edition 2010でやってみたらどうなる?

772 :デフォルトの名無しさん:2013/12/23(月) 09:43:58.92 .net
>>771
Visual C++ Express Edition 2010ではないが、Windows SDKでVisual C++ 2010の
64bitのコンパイルでも、2003と同じ結果だった。

773 :デフォルトの名無しさん:2013/12/24(火) 17:31:11.42 .net
odd-even merge ソートについての質問です。
再帰有りの処理は以下のとおりに実装しました。
http://ideone.com/F7QMld

これを再帰無しの処理に実装し直したいんですが、(odd_even_mergesort関数一つにまとめたい)
いい方法が思いつきません。ヒントや方法等を教えて下さい。

774 :デフォルトの名無しさん:2013/12/24(火) 20:29:02.70 .net
>>773
コード読まずにレスするけど、まずは
関数のローカル変数としてスタックを用意する。
んで関数の引数をスタックに積む。
んでスタックが空になるまで一個ずつ取り出すループの中に処理を書く。
んで再帰する代わりにスタックに積む。

775 :デフォルトの名無しさん:2013/12/28(土) 00:31:34.53 .net
>>774
回答ありがとうございました。
その方法を足がかりとしてもう少し考えてみたいと思います。
ありがとうございました。

776 :デフォルトの名無しさん:2013/12/31(火) 18:35:58.74 .net
c++ で rubyの.send()
のように、変数に入っている関数を実行する方法は無いでしょうか??
教えていただけると嬉しいです。

777 :776:2013/12/31(火) 18:36:52.51 .net
すみません、変数に入っている関数というより、
変数に入っている文字列と同名の関数を実行する方法、
といった方がただしかったです

778 :デフォルトの名無しさん:2013/12/31(火) 19:02:39.49 .net
>>777
構造体やクラスメンバとしての変数名はリンク時に消えるから、構造体やクラスのメンバの状態でそのまま呼ぶのは無理。
.DLLとか.soとかデバッグ情報付きの実行ファイルとかリンク情報が残ってる場合にそれ辿る事も可能ではあるが普通はやらん。
std::map<std::string,目的の関数ポインタ>とか作って自前で関数名と関数を紐付けしとくのが正攻法、かな。
オーバーロードまで考えると型情報も要るけど。

779 :デフォルトの名無しさん:2013/12/31(火) 22:14:38.61 .net
オーバーロード考えるくらいなら
関数ポインタの仮引数に定番となる引数の他にvoid*ひとつ持たせたり…

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

まあ、一番はsend()相当を使って何がしたいのか、だと思う

780 :デフォルトの名無しさん:2014/01/01(水) 02:22:13.69 .net
なるほど・・ありがとうございます。
結構色々実装しないといけない感じになるんですね。

すみませんあともう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 .net
>>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 .net
typedef int SAMPLE[2];
SAMPLE *p;
または
int (*p)[2];

783 :デフォルトの名無しさん:2014/01/02(木) 11:35:53.83 .net
&nbsp;  

784 :776:2014/01/02(木) 22:31:43.73 .net
>>781
>>782
なるほど・・丁寧に教えていただきありがとうございました。
C++小技みたいのがたくさんあって難しいですね・・

785 :デフォルトの名無しさん:2014/01/02(木) 22:47:11.14 .net
ループカウンタって何でいつもiから始まるのか?iに何か特別な意味があるのか?

786 :デフォルトの名無しさん:2014/01/02(木) 22:49:39.97 .net
>>785
「i」ndex

787 :デフォルトの名無しさん:2014/01/02(木) 22:49:50.47 .net
integer

788 :デフォルトの名無しさん:2014/01/02(木) 22:52:46.53 .net
真のプログラミング言語FORTRANではI,J,K,L,M,Nで始まる変数は整数という決まりがあったのじゃ

789 :デフォルトの名無しさん:2014/01/02(木) 23:02:32.34 .net
>>786-788
ありがとうございました!

790 :デフォルトの名無しさん:2014/01/02(木) 23:23:17.38 .net
iterator

791 :デフォルトの名無しさん:2014/01/03(金) 07:20:41.53 .net
j-k フリップフロップ

792 :デフォルトの名無しさん:2014/01/03(金) 08:44:31.07 .net
女子高生FF

793 :デフォルトの名無しさん:2014/01/08(水) 01:10:36.47 .net
c++を本格的に勉強しようと思ったら
n3337を読めば良いの?

794 :デフォルトの名無しさん:2014/01/08(水) 01:21:07.00 .net
C++を全く知らないなら規格書はオススメできないな

795 :デフォルトの名無しさん:2014/01/08(水) 01:24:47.66 .net
>>794
規格書を参照するクセつけといた方が良いかなと・・・

796 :デフォルトの名無しさん:2014/01/08(水) 01:38:47.87 .net
規格なんてケツ拭く紙にすらならないよ

797 :デフォルトの名無しさん:2014/01/08(水) 01:47:23.56 .net
プロに教えてほしいんでつけど、
なんで例外ってあるんでつかねぇ?
Cのときには無くてもやっていけたじゃないでつか?(´・ω・`)

798 :デフォルトの名無しさん:2014/01/08(水) 01:51:22.58 .net
便利だからじゃないでつかねー

799 :デフォルトの名無しさん:2014/01/08(水) 02:09:54.80 .net
つ setjmp/longjmp

800 :デフォルトの名無しさん:2014/01/08(水) 02:46:22.00 .net
>>795
それはその通りだと思う
でも全くの初心者が最初に読むべきものでは無いんじゃないかと
あれはそこそこ作れるようになってきた人が横に置いておくものでしょ

801 :デフォルトの名無しさん:2014/01/08(水) 03:08:40.62 .net
>>795
深く理解するのはいいことだけど、そもそも規格書を厳密に参照しなきゃいけないようなタイトなコードを書く必要がある時点で大抵何か設計を間違えてる。
あと稀なケースではあるけどコンパイラがバグ抱えてたり未実装だったりする場合、いくら規格書が正しくてもコードはコンパイラに合わせてあげないといけないわけで。
本末転倒に感じるかもしれないけど規格書が常に正しいとは限らないからあんまりその辺の原理主義者に惑わされない方がいいと思うよ。
それに肝心なのは言語そのものの文法より使いこなし方だから、C++本体の規格書とか読む暇があるんだったらBoostのドキュメント読んだ方がよっぽど有意義だと思う。

802 :デフォルトの名無しさん:2014/01/08(水) 07:23:06.92 .net
>>797
割り込みってのが大昔からある

803 :デフォルトの名無しさん:2014/01/08(水) 07:50:49.96 .net
つ setjmp/longjmp
デストラクタ「」

804 :デフォルトの名無しさん:2014/01/08(水) 08:45:11.38 .net
boostなんて使わせてくれるの?

805 :デフォルトの名無しさん:2014/01/08(水) 11:27:20.22 .net
>>801
> 規格書を厳密に参照しなきゃいけないようなタイトなコードを書く必要がある時点で大抵何か設計を間違えてる
> 規格書が常に正しいとは限らない
これ、世の中の大多数のプログラマの共通認識なんですか?

806 :デフォルトの名無しさん:2014/01/08(水) 12:25:47.26 .net
>>805
時々自問するといい、コードを書くのは手段であって主目的ではない
規格書をひもとく必要があるコードってのは、誰でも読める書き方になってないことがある

もちろん、規格書が頭に入ってないといけない人ってのはいる
極端な話、コンパイラ、ライブラリ書いてる人は、そうだな

807 :デフォルトの名無しさん:2014/01/08(水) 12:29:03.51 .net
> 規格書が常に正しいとは限らない
ここだけ抜き出すと意味が変わる
処理系にバグがあると、規格書に準拠して書いてもコンパイル出来なかったり、実行時にエラーになることはある

808 :デフォルトの名無しさん:2014/01/08(水) 12:30:59.42 .net
>>806
あと、ここでバトルする場合規格書に精通していないと負ける

809 :デフォルトの名無しさん:2014/01/08(水) 13:10:27.60 .net
見識不足が原因で負けるのであって
規格に詳しいかどうかは本質的に関係ない。

810 :デフォルトの名無しさん:2014/01/08(水) 20:08:06.17 .net
勝ち負けに拘ってるうちはなんとやら

811 :デフォルトの名無しさん:2014/01/08(水) 20:16:28.12 .net
そのセリフは片山に負けたおバカさんにかけてやれ

812 :デフォルトの名無しさん:2014/01/09(木) 08:22:10.60 .net
負けるっていうか、「規格書みろ(ドヤッ」とくると、お、おう、ってことで、
そこで話が終わってしまう

正直、読めるモノなら、読んでるからねえ

813 :デフォルトの名無しさん:2014/01/09(木) 22:38:32.28 .net
boolは1/0派?true/false派?

814 :デフォルトの名無しさん:2014/01/09(木) 23:56:49.81 .net
C99以前なら
#define true 1
#define false 0
とするのが常套手段かな‥

815 : ◆QZschizo.ptH :2014/01/10(金) 01:35:22.08 .net
原則にもどって 非零/零派なのは間違いないとして、心情的には -1/0 派か

816 :デフォルトの名無しさん:2014/01/10(金) 03:12:33.21 .net
==とか!とかの演算結果がとる値って決まってなかったっけ?
うろ覚えだけど1と0だったような・・・

エラー値としては結構-1が使われる事が多い気がするけど、
それは単に0を含む自然数を正常値として扱うからだろうし。

817 :デフォルトの名無しさん:2014/01/10(金) 04:32:40.45 .net
Cでプログラムしてるのに
C++のtrue falseを使用してた事もあったな

818 : ◆QZschizo.ptH :2014/01/10(金) 04:47:35.31 .net
>>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 .net
_Boolなら0/1で書くのはありだが
boolといいつつ0/1で書くのは
頭がおかしいのでは?

820 :デフォルトの名無しさん:2014/01/10(金) 11:43:43.50 .net
>>817
言いたいことがよく分からん。
日本語で会話しているのに
英語のyes/noを使用するような感じ?

821 :デフォルトの名無しさん:2014/01/10(金) 11:59:57.42 .net
>>820
どちらかというと
「日本語の文章なのに 銀行ATM とか NTT とかアルファベット文字使っちゃった」
というイミフなレベル

822 :デフォルトの名無しさん:2014/01/10(金) 16:27:01.58 .net
野球選手がボクサーに転向して「右手は殴る方だからグローブはしない」って言っちゃう感じ

823 :デフォルトの名無しさん:2014/01/10(金) 20:40:33.32 .net
bool型true/falseはC++じゃないのか

824 :デフォルトの名無しさん:2014/01/10(金) 22:32:29.43 .net
>>823
んなこたーない
Cにも昔からある

825 :デフォルトの名無しさん:2014/01/11(土) 00:35:47.75 .net
それTRUE/FALSEでは

826 :デフォルトの名無しさん:2014/01/11(土) 01:17:45.59 .net
>>825
ISO/IEC 9899:2011 7.18p2
『macro bool expands to _Bool』

この仕様は14年前からあったはず

827 :デフォルトの名無しさん:2014/01/11(土) 01:42:15.67 .net
仕様ならC99からあったけど実際使えるようになったの最近じゃね

828 :デフォルトの名無しさん:2014/01/11(土) 01:45:15.89 .net
と思ったけどgccなら2001年くらいから使えるようになってたのね
つまりVSが

829 :デフォルトの名無しさん:2014/01/11(土) 01:50:56.55 .net
GCCのstdbool.hは2000年直後ぐらいだが
真面目に実装されたのが2005年

830 :デフォルトの名無しさん:2014/01/12(日) 02:18:48.37 .net
>>797
プロとしてはクラッシュが一番怖い。面目丸潰れ。例外なら予想されるクラッシュに先手を打てる。

831 :デフォルトの名無しさん:2014/01/12(日) 02:52:04.54 .net
>>830
アプリケーションが動作を停止しましたってやつ?

832 :デフォルトの名無しさん:2014/01/12(日) 05:26:18.32 .net
>>797>>830
WindowsでC/C++だと、言語自体の例外処理機構使わずにSEH(構造化例外処理)使ったりもするんだけどな。
これ、C++じゃなくてC/C++。Cで普通に使える例外機能。
「クラッシュ」って大半が(特にヌルポでの)アクセス違反だから、クラッシュ避けだけならこれで十分だよ。

まぁそれは置いといて、スタック巻き戻しでデストラクタが走るからエラー処理を簡潔に書けるのがメリットかと。

833 :デフォルトの名無しさん:2014/01/12(日) 12:00:42.55 .net
IT用語集で調べて"クラッシュ"はアプリにもOSにも使われることは知ってるんだけどさ
"クラッシュ"と聞くとアプリよりもOSが落ちることを連想するんだよな
俺が育った会社や親の躾のせいかもしれないが‥

834 :デフォルトの名無しさん:2014/01/12(日) 15:43:20.83 .net
Win32のコールバック関数渡して列挙するenumhoge系のAPIでは
コールバック関数内でのエラー通知するために例外を使う

835 :デフォルトの名無しさん:2014/01/12(日) 16:33:38.68 .net
>>833
すごいしつけをする親もいたもんだな

836 :デフォルトの名無しさん:2014/01/12(日) 23:47:49.62 .net
>>833
WindowsはNT系になってから落ちにくくなったからなぁ…
落ちるときはハードかドライバの故障・バグが大半だし。

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

無限ループ発生→ビジー状態→うぼぁ
ヌルポ発生→一般保護例外連発→うぼぁ

837 :デフォルトの名無しさん:2014/01/13(月) 06:34:33.27 .net
そもそも「クラッシュ」はあまり使わないなあ
使うなら具体的な現象(アプリケーションエラー、ブルースクリーンなど)
を使うから

838 :デフォルトの名無しさん:2014/01/13(月) 06:59:06.38 .net
>具体的な現象(アプリケーションエラー

こんな具体性に書ける説明は信用ならない

839 :デフォルトの名無しさん:2014/01/13(月) 09:37:02.50 .net
そもそも「アプリケーションエラー、ブルースクリーンなど」を具体的とは言わない

840 :デフォルトの名無しさん:2014/01/13(月) 15:43:11.88 .net
「クラッシュ」よりは具体的ではある。
でもOS巻き込んで落ちてた時代に両者の区別ができるかって言うと・・・ねぇ・・・?

841 :デフォルトの名無しさん:2014/01/13(月) 16:50:00.63 .net
それは屁理屈
○○より××だから〜

842 :デフォルトの名無しさん:2014/01/13(月) 17:26:09.43 .net
>>836
Windows2000、XPはDirectXを入れはじめた時でもあって、GDIまでカーネルモードだと
遅くて仕方がないのでここだけユーザーモードにした

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

Vistaからは元に戻した
ハードウェアの性能が上がってカーネルモードでも問題なくなったからだね

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

そもそも固まるのと落ちるのはちと違うし、9xよりは遥かにマシなのは間違いないと思うが。

844 :デフォルトの名無しさん:2014/01/14(火) 05:44:34.27 .net
スワップ中の動作遅延を固まると勘違いしてるんじゃないのか

845 :デフォルトの名無しさん:2014/01/21(火) 06:58:32.99 .net
NRVOってstd::moveで返すよりも遅い?
コピーもムーブも起こってないのに、実測で倍くらいになって???ってなってる
ちなみにVS2013Exp
気持ち悪くてしょうがない

846 :デフォルトの名無しさん:2014/01/21(火) 08:36:01.64 .net
そもそもコピーが起こらないんだからそんなに変わらないはずなんだが
本当にNRVOされてるかアセンブリ見てみないと

847 :デフォルトの名無しさん:2014/01/21(火) 11:06:49.76 .net
DirectX かどうかは知らんがC-Media の音源ドライバ on XP でよくBoD を喰らったな
ゲームのWave 差換えしたりして対処してた

848 :デフォルトの名無しさん:2014/01/21(火) 11:59:23.05 .net
クソハード、クソドライバで落ちるのはしゃあない
どうやったって対抗しきれるもんじゃないだろうし

849 :デフォルトの名無しさん:2014/02/11(火) 18:24:11.74 .net
三次方程式の解を
カルダノの公式を使って
出力するプログラミングしようと思ってるんですが

例えば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 .net
>>849
試しにやってみたソースを上げてみ

851 :デフォルトの名無しさん:2014/02/11(火) 20:30:39.08 .net
>>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 .net
>>851
最後の行間違えました。
double kai = (-p + Math.Sqrt(D)) + (-q - Math.Sqrt(D)) - (b / (3 * a))
です。

853 :デフォルトの名無しさん:2014/02/12(水) 06:23:32.00 .net
http://ideone.com/IUi67G

この時点でp=-1になっちゃうからuが求まらない事になっちゃうんだが
これも無理矢理虚数単位を使うのか?

854 :デフォルトの名無しさん:2014/02/15(土) 17:36:21.18 .net
C++でできることは全部VBでできますか?

855 :デフォルトの名無しさん:2014/02/15(土) 18:31:29.95 .net
できません
c++はVBの様な高級言語ではありません

856 :デフォルトの名無しさん:2014/02/15(土) 18:38:56.03 .net
できません
VBはC++のような低級言語ではありません

のほうが正しいような

857 :デフォルトの名無しさん:2014/02/15(土) 19:28:53.77 .net
そうだね^^;

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

VBは正直食わず嫌い

859 :デフォルトの名無しさん:2014/02/15(土) 22:20:09.06 .net
簡単なものや速度要求されるもんじゃなきゃ
VBでもいいんだよね、楽だし
生産性で考えるならUIをVBにするのが一番だとは思う

860 :デフォルトの名無しさん:2014/02/16(日) 01:19:38.83 .net
アセンブリとC++でも違いありますか?

861 :デフォルトの名無しさん:2014/02/16(日) 04:37:10.13 .net
アセンブリ言語が万能ってわけじゃないんだよ

862 :デフォルトの名無しさん:2014/02/16(日) 08:44:23.88 .net
手の込んだUIをVBでやるのはかなり苦痛だぞ。ネットワークは簡単だった

863 :デフォルトの名無しさん:2014/02/16(日) 09:15:18.53 .net
古代BASICにとってつけた拡張で、超汚い構文
士ねVB
VBAのせいで生き延びてるんだな

864 :デフォルトの名無しさん:2014/02/16(日) 17:36:31.06 .net
高級言語が乱立してて困る。環境が変わらなくても高級言語を使ってる場合
言語が変わると環境も変わる。言語同士のブリッジはC++にしかできない。
WEBでは結構まとまってるようだが

865 :デフォルトの名無しさん:2014/02/16(日) 20:39:15.88 .net
・・・まとまってるか?

866 :デフォルトの名無しさん:2014/02/16(日) 23:34:14.42 .net
まとまってるっつーか最終的に吐くにも読むにもHTMLとJavascriptが必要になるからそうならざるを得ないだけじゃないか?

867 :デフォルトの名無しさん:2014/02/17(月) 14:48:00.87 .net
生産性という話をする際に
作ったものが用途に合わなくなったら捨てるという「前提」が
すっぽり頭から抜けてるやつばかりで困る

868 :デフォルトの名無しさん:2014/02/17(月) 20:10:25.04 .net
ニュートン法を使って
三次方程式の解を求めるプログラムを作りたいと思ってます。
三つの異なる解を出す場合の処理がわかりません。
その処理の部分のソースがあります。
どうすればいいかアドバイスください。
三つの内、一つだけなら今のところ求められます。

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 .net
>>868
ニュートン法で、複数の解の一部または全部を取得するために初期値を定める一般的な方法はない
http://toro.2ch.net/test/read.cgi/tech/1313183984/652

870 :デフォルトの名無しさん:2014/02/17(月) 21:33:53.11 .net
複数の解を求める方法は何かないでしょうか?

871 :デフォルトの名無しさん:2014/02/17(月) 21:45:24.21 .net
3つ求まるまで初期値変更

872 :デフォルトの名無しさん:2014/02/17(月) 22:05:14.97 .net
一つ求まったら
次の初期値は前に求まった解ってことでいいんですか?

873 : ◆QZaw55cn4c :2014/02/17(月) 22:29:29.23 .net
>>872
それはたぶんうまくいかない

874 :デフォルトの名無しさん:2014/02/17(月) 22:44:31.53 .net
どうすればいいでしょう?
ヒントください。

875 :デフォルトの名無しさん:2014/02/17(月) 22:45:55.43 .net
>>872
山登り(または谷下り)するときに、頂上(谷底)でその斜面からより高い(低い)場所に向かって歩いて別の頂上(谷底)に到達できるの?君。

876 :デフォルトの名無しさん:2014/02/17(月) 22:49:16.38 .net
複数解を持つ方程式をニュートン法で解く場合、与える初期値によって求める解が決まるそうです。
リンク先に「どの解を求めるかによって初期値を人間が適切に判断しなければならない」とありますから
この部分はプログラムで自動化することは困難なのでは…
http://ryuiki.agbi.tsukuba.ac.jp/~nishida/lecture/numerical/Newton.html

877 :デフォルトの名無しさん:2014/02/17(月) 22:57:14.32 .net
初期値よりも微分が手作業なのをなんとかしろよ
初期値はランダムでもいい

878 :デフォルトの名無しさん:2014/02/17(月) 23:06:40.07 .net
よく知らんがMathematicaやMapleをつかえば微分もプログラムでやれるんじゃね?

879 : ◆QZaw55cn4c :2014/02/17(月) 23:15:07.61 .net
>>877
数値微分

880 :デフォルトの名無しさん:2014/02/17(月) 23:17:28.87 .net
どんな関数を入力しても、微分も初期値も全自動でないと。

881 :デフォルトの名無しさん:2014/02/17(月) 23:27:34.63 .net
>>875
局所最適解山乙

882 :デフォルトの名無しさん:2014/02/18(火) 20:58:34.18 .net
昨日ソース貼った者だけど
あれからソース変えてみました。
ここから解を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 .net
自分で試してみないの?

884 :デフォルトの名無しさん:2014/02/18(火) 21:43:49.58 .net
試したけどできなかったので
何かアドバイスが欲しいのです。

885 :デフォルトの名無しさん:2014/02/18(火) 22:49:13.10 .net
・何を試したのか
・試した結果、どう上手く行かなかったのか

のリストをまとめてからどうぞ

886 :デフォルトの名無しさん:2014/02/19(水) 11:27:45.14 .net
試したのなら
>>885
> ・試した結果、どう上手く行かなかったのか
これを添えて質問するのは当たり前だろう

887 :デフォルトの名無しさん:2014/02/19(水) 17:50:20.34 .net
>>882
コード読んでないけど、x++;をx=ldexp((rand()+(rand()*1.0/RAND_MAX))/RAND_MAX , (rand()%1024)-512);
とかにでもすれば?

888 :デフォルトの名無しさん:2014/02/22(土) 01:24:47.68 .net
.outっていうファイルを解析して一部書き変えて動作を変更したいのですが
調べてみると.outはC言語の実行ファイルらしいというとこまでしかわかりませんでした
.outのファイルを開くとほとんど文字化けで見れないんですが
.outファイルを逆コンパイルして人間が読めるようなソースを作ることは可能なのでしょうか?
たすけてください

889 :デフォルトの名無しさん:2014/02/22(土) 01:57:03.42 .net
テキストファイルとして開く時点でお前には能力がない
あきらめろ

890 :デフォルトの名無しさん:2014/02/22(土) 04:29:07.37 .net
「逆コンパイルして人間可読にする」って思考してる時点で
「テキストファイルとして文字化けしてる」って認識になるはず無いんだが・・・釣りかね?

891 :デフォルトの名無しさん:2014/02/22(土) 07:01:08.97 .net
テキストとして開いてみた
→文字化けしてるからリコンパイルかな
って流れくらいわかるだろ

892 :デフォルトの名無しさん:2014/02/22(土) 08:26:25.25 .net
そもそもリバースエンジニアリングには注意が必要なわけで
流石に自分で全部調べられるレベルにないとやって欲しくないな

893 :デフォルトの名無しさん:2014/02/22(土) 12:43:27.70 .net
>>888
ム板の天災 片山MZに師事しろ
http://toro.2ch.net/test/read.cgi/tech/1380002328/

894 :デフォルトの名無しさん:2014/02/22(土) 14:18:02.72 .net
最近javaばっかりしてて
久々、C++でデスクトップアプリを作ろうと
思ってるんですが(何を作ろうとは考えて無いけど)
自分の持ってるVSって2005なんだけど
VSってmfc以外の利点は無いし
2005だからだからVC++も中途半端な作りだし
やっばVC++の新しいバージョンのEE入れたほうが良い?
それともマルチプラットフォームのQtが良い?
どなたか教えて!

895 :デフォルトの名無しさん:2014/02/22(土) 14:28:24.14 .net
作りたいものでてから考えろや

896 :デフォルトの名無しさん:2014/02/22(土) 15:13:47.52 .net
っgcc

897 :デフォルトの名無しさん:2014/02/22(土) 15:52:59.73 .net
>>894
VS2005に、最新のEEのコンパイラ組み合わせてはどうか

>>896
gcc, clang もたしなみ

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

助けてくださいということはクラックされて何か仕込まれた?

899 :デフォルトの名無しさん:2014/02/23(日) 05:50:36.81 .net
初心者ですが、文字列の比較について教えて下さい

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 .net
アドレスが異なるから違うよと言われる
値の比較をするならそうしよう

901 :デフォルトの名無しさん:2014/02/23(日) 07:16:49.78 .net
そもそも、ポインタを返す関数で整数を無理やり返してコンパイルできてるのかね。
つーか、AndroidNDKでC++なのか?

902 :デフォルトの名無しさん:2014/02/23(日) 08:04:31.29 .net
>>899
ローカル変数のポインタを返してるからじゃないの?

903 :デフォルトの名無しさん:2014/02/23(日) 17:33:03.17 .net
そこら中誤字まみれでどうしようもねぇな
文字(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 .net
>>889-893
>>898
ありがとう、あきらめたよ

905 :デフォルトの名無しさん:2014/02/23(日) 22:55:03.82 .net
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 .net
>>905
・size_tはunsignedだから、-1をキャストすると最大値が出る
・sizeof(_Tp)で要素1つ辺りのサイズが算出できる

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

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

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

それ以上はもっかい自分できちんと。
処理系や実装者によって多少の差異があるかも?知らんけどw

907 :デフォルトの名無しさん:2014/02/24(月) 00:36:44.71 .net
でも、どう考えてもmax_size()個行く前に仮想メモリ空間が足んなくなるよねコレ
スパコン用とかどうにかそれが出来るC++実装がどこかに存在するのかな…

908 :デフォルトの名無しさん:2014/02/24(月) 07:39:46.17 .net
メモリーをnewして失敗しなくても、実際にアクセスするまで
メモリー確保できたかどうかわからないアーキテクチャなOSがあるんでな
最大サイズも「あれば使える」程度でいいんよ

909 :デフォルトの名無しさん:2014/02/24(月) 08:21:53.96 .net
>>906
なるほど!
よくわかりました!
ありがとうございます。

910 :デフォルトの名無しさん:2014/02/24(月) 17:01:31.55 .net
あの罠仕様は実メモリ・実スワップが割り当てられないだけで仮想メモリ空間自体は割り当てされるんじゃないのか

911 :デフォルトの名無しさん:2014/02/25(火) 20:59:02.95 .net
三次方程式のプログラムを作っています。

複数解を出力する場合の処理についてです。
ニュートン法で一つ目の実数解を出力した後に
次に二つの複数解の実数解を出しました。
次に虚数部を出したいと思うんですが
どう処理すればいいのかわかりません。
その処理をしているソースを載せます。
どう処理すればいいでしょうか?

912 :デフォルトの名無しさん:2014/02/25(火) 21:01:10.22 .net
最後の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 .net
age

914 :デフォルトの名無しさん:2014/02/28(金) 19:09:27.59 .net
マルチプラットフォーム的なコードにしたいんだが
OS依存のライブラリ等に自作ラッパ噛ますのってアリ?

本当はSDLって奴使いたかったんだけど
Windows8でXAudio2のバージョンが変わったとかでビルドできない…

915 :デフォルトの名無しさん:2014/02/28(金) 22:51:40.35 .net
>>914
OS依存部分を直接自前ライブラリに実装して、プラットフォームごとに自前ライブラリ作りなおしてもええんやで

まぁあれだ、どうせ移植するときは自分でやるのが大半だろうし、自分で移植しやすいように書けばいい

916 :デフォルトの名無しさん:2014/03/02(日) 23:13:36.04 .net
>>914
車輪の再設計になってもいいなら。GPLとかでよければ誰かがやってることが多い
それだけみんなおんなじことを考える

そのへんを度外視すれば、悪いことではない

917 :デフォルトの名無しさん:2014/03/12(水) 15:44:24.41 ID:Z46QAlOd.net
ちんこまんこにいれれば
ハッピー

918 :デフォルトの名無しさん:2014/03/12(水) 16:28:46.86 ID:AZrAiCEG.net
ワロタ

919 :デフォルトの名無しさん:2014/03/12(水) 16:42:02.35 ID:4AbABLKQ.net
【Z46QAlOd】の検索

PC等 [プログラム] C++相談室 part111
320 322-323
PC等 [プログラム] スレを勃てるまでもないC/C++の質問はここで 21
917

920 :デフォルトの名無しさん:2014/03/18(火) 06:51:58.40 ID:B0h8c5Jx.net
スレ勃てずに肉棒勃てろ

921 :デフォルトの名無しさん:2014/04/21(月) 11:03:30.57 ID:lfASPZAR.net
認識する必要なんてないだろ

922 :デフォルトの名無しさん:2014/04/21(月) 11:13:48.75 ID:LiZ+Dtbr.net
プリプロセッサがウンタラカンタラ

923 :デフォルトの名無しさん:2014/04/21(月) 12:03:34.89 ID:nKQE7Rc+.net
>>921
.hには.cppの場所記入しないだろ?
.cppが.hを呼んでるだけだから

924 :デフォルトの名無しさん:2014/04/21(月) 22:38:47.97 ID:juP562jX.net
Visual Studio2008で作ったlibをVisual Studio2012で使うとエラーが出ます。
これをなんとかできませんか?

925 :デフォルトの名無しさん:2014/04/21(月) 23:37:15.34 ID:nKQE7Rc+.net
エラーコピペ

926 :デフォルトの名無しさん:2014/04/22(火) 18:46:43.93 ID:f8JeFUsV.net
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)" は未解決です。

927 :デフォルトの名無しさん:2014/04/22(火) 18:50:03.62 ID:f8JeFUsV.net
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) で参照されました

928 :デフォルトの名無しさん:2014/04/22(火) 18:50:46.37 ID:f8JeFUsV.net
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' と一致しません。

929 :デフォルトの名無しさん:2014/04/22(火) 19:05:35.72 ID:yUACokf4.net
ライブラリとリンクするライブラリは、ライブラリのコンパイル時に使ったヘッダファイルと互換が有る奴使え。
最低でもMTとMDのオプションぐらい合わせろ。
ていうか(恐らく)バージョンの違うテンプレートライブラリでリンクしようとすんな。

930 :921:2014/04/23(水) 22:39:38.56 ID:qwt0uHqN.net
そもそも、なんで .h は必要なの?
.cpp だけじゃどんな問題があるの?

931 :デフォルトの名無しさん:2014/04/23(水) 22:43:29.29 ID:U/+ppQ2B.net
他のcppに公開する必要ないなら必要ないけど

932 :デフォルトの名無しさん:2014/04/23(水) 22:45:26.25 ID:V34cTVQA.net
>>930
多数の.cppを別々にコンパイルできます。
各.cppで、共通部分を.hで宣言しておけばコンパイルできます。

リンクするとき、まだコンパイルしていない.cppがあれば、エラーになります。

933 :デフォルトの名無しさん:2014/04/23(水) 22:48:20.65 ID:V34cTVQA.net
Cだけならわかりやすいかも
C++は、いろいろ勉強しないとなぁ

934 :デフォルトの名無しさん:2014/04/23(水) 23:57:20.36 ID:8aJ+1hBq.net
C++はCより難しいですか?

935 :デフォルトの名無しさん:2014/04/24(木) 01:49:00.51 ID:9wgxQ0KX.net
>>930
ここで、他のファイルのヘッダをインクルードすると、
返り値の型 f(引数の型);
というようにヘッダの内容が展開されて、
他のファイルにある、関数の型が事前にわかる(前方宣言)

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

複数のファイルによる、並行・分散、開発・コンパイル時に、
ひとまず宣言だけあれば、実装がなくてもコンパイルできる
と同時に他人が、f()の中身を作る

936 :デフォルトの名無しさん:2014/04/24(木) 02:34:34.09 ID:V/BmNssB.net
>>934
難しさの基準による
ちょっとしたことで低水準に踏み込まざるを得なくなるCと、ひたすら機能が多く複雑な言語であるC++

937 :デフォルトの名無しさん:2014/04/24(木) 09:58:11.17 ID:mnsZs1hI.net
>>934
難しい
実際にC++を使ってる人間の間ですら
極端にイメージするものが違うのも一因

938 :デフォルトの名無しさん:2014/04/24(木) 11:22:47.53 ID:5ftIJb20.net
C++でプログラミング学んだ人は偏見に染まってる感があるね
C++こそ正当なオブジェクト指向言語だと思い込んでたり・・

939 :デフォルトの名無しさん:2014/04/24(木) 15:55:03.07 ID:29x10p2Y.net
>>934
本物のプログラマたちが使う唯一のプログラム言語だよ

940 :デフォルトの名無しさん:2014/04/24(木) 16:08:35.89 ID:mnsZs1hI.net
本物のプログラマは複数使い分ける

941 :デフォルトの名無しさん:2014/04/24(木) 18:53:13.69 ID:fAk9I7UT.net
>>938
その見解も偏見だと思うけどな
Cから入って、C++のクラスは特定の使い方を想定して砂糖まぶした構造体だと理解する人も結構居るだろ
だからと言ってオブジェクト指向の源流を辿りに行くかどうかは別問題だが…
あれだ、関数型言語を食わず嫌いしてる手続き型言語ユーザだって、そういう概念があることは知ってる的な

942 :デフォルトの名無しさん:2014/04/24(木) 19:58:37.02 ID:AklGWvZ+.net
構造体に関数も入れれるのがクラスって感じだったな

943 :デフォルトの名無しさん:2014/04/24(木) 20:06:48.17 ID:mnsZs1hI.net
モダンC++どころじゃないってか

944 :デフォルトの名無しさん:2014/04/24(木) 20:16:31.22 ID:E/S2XTBi.net
むしろ例外の実現が困難ではないか

945 :デフォルトの名無しさん:2014/04/24(木) 21:03:48.20 ID:tXCIarBm.net
>>941
その理解だと virtual の存在意義にしばらく悩むことになる

>>944
SjLj 以外の実装を知りたいものだ

946 :デフォルトの名無しさん:2014/04/24(木) 22:04:47.58 ID:fAk9I7UT.net
>>945
え?関数ポインタの入った構造体へのポインタを砂糖振って使いやすくした奴でしょ、あれ。
やっぱ、C++流オブジェクト指向って使い方を想定して砂糖まぶした構造体じゃないですか。
// この理屈で行くと様々なプログラミング言語の機能が〜に毛が生えただけになりますが。

947 :デフォルトの名無しさん:2014/04/24(木) 22:43:05.57 ID:7Hb7UgBC.net
ある基底クラスを元に派生クラスを定義し
その派生クラスを別のクラスのメンバーとすることを継承って言うの?

948 :デフォルトの名無しさん:2014/04/24(木) 22:56:22.26 ID:tXCIarBm.net
>>947
どちらかというと委譲という気が

949 :デフォルトの名無しさん:2014/04/25(金) 08:28:10.22 ID:cnGbwKBG.net
>>947
派生クラスを定義する所までか派生じゃね?

950 :デフォルトの名無しさん:2014/04/25(金) 14:12:44.94 ID:kZbj9xjz.net
ごめん
継承と委譲の違いを教えて

951 :デフォルトの名無しさん:2014/04/25(金) 14:22:59.64 ID:zjeu9d2L.net
自分がパワーアップするか他人の力を借りるかの違い

952 :デフォルトの名無しさん:2014/04/25(金) 15:25:06.04 ID:jPmvuOB6.net
社員を増やすかアウトソースするかの違い

953 :デフォルトの名無しさん:2014/04/25(金) 16:03:08.19 ID:uPsm+e3e.net
>>950
継承は例えば親クラスの 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 );
 }
};

954 :デフォルトの名無しさん:2014/05/06(火) 19:03:17.01 ID:2s3fltSJ.net
変数や関数の名前ってどうやって決めてる?
いちいち辞書を引いて、誰も読めない正しい英語を書くのはもううんざり

955 :デフォルトの名無しさん:2014/05/06(火) 19:36:25.17 ID:wMsmsiA/.net
しばらくやってたら、ある程度使う単語は決まってくると思う

956 :デフォルトの名無しさん:2014/05/06(火) 20:42:03.54 ID:Jq5zOSvx.net
そういうもんかな
返答ありがとう

957 : ◆QZaw55cn4c :2014/05/06(火) 23:06:29.20 ID:R4LFdeTL.net
>>953
委譲の方、Goo のコンストラクタにも何かしら要るんじゃないの

958 :デフォルトの名無しさん:2014/05/06(火) 23:18:08.81 ID:i07kpOvT.net
質問させてください。
以下のプログラムをグローバル変数を使わず同じ処理をさせるにはどうすればいいのでしょうか?
グローバル変数を使うのはあまり良くないと聞いたのですが、どうにもそのやり方が思い浮かびません。
簡単にでもいいので、よろしくお願いします。

#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){};
}

959 :デフォルトの名無しさん:2014/05/06(火) 23:25:50.28 ID:XedF2XR6.net
本題と関係ないけど命名規則とコメントがクソい

960 :デフォルトの名無しさん:2014/05/06(火) 23:31:57.27 ID:i07kpOvT.net
>>959
その辺は初心者ということで目を瞑っていただきたいです。
コメントはつけていなかったのですが、他人が見る時に有ったほうがいいと聞いていたので
適当ではありますが急遽付け足しました。
命名規則もおいおい勉強していきたいと思います。

961 :デフォルトの名無しさん:2014/05/06(火) 23:32:25.81 ID:WjTWSVZo.net
>>958
これじゃあかんの?
ttp://ideone.com/iVu0sr

962 :デフォルトの名無しさん:2014/05/06(火) 23:43:12.17 ID:i07kpOvT.net
>>961
おお!わざわざこんなサイトまで使って直していただいてありがとうございます。
コピペしてビルドしてみたら全く同じ結果になりました。

各関数の引数にそれぞれlifeを入れたら良かったんですね!
書いていただいたソースをよく見て勉強してきます
どうもありがとうございました!

963 :デフォルトの名無しさん:2014/05/06(火) 23:47:21.66 ID:WjTWSVZo.net
>>962
結果が全てならいいけど
スマートかどうかは別問題だからね

964 :デフォルトの名無しさん:2014/05/06(火) 23:51:26.58 ID:i07kpOvT.net
>>963
今のところはスマートさとか考えている余裕はありませんが、スマートな方が当然良いですよね
頑張ります

965 :デフォルトの名無しさん:2014/05/10(土) 15:00:59.73 ID:xgj3yjgV.net
プログラム初心者です。

ある数(scanfのやつ使って文字適当に決める)の100の位を出す問題なんだけどわからないです。例えば実行ファイルで12345の数を打ったら百のくらいは"3"ですみたいなのを出したい

966 :デフォルトの名無しさん:2014/05/10(土) 15:01:46.01 ID:xgj3yjgV.net
>>965
書き忘れました。c言語です

967 :デフォルトの名無しさん:2014/05/10(土) 16:43:54.14 ID:O2yhZ3ex.net
sprintfで10進文字列に変換して右から3文字目を出力する
だけじゃないの?

968 :デフォルトの名無しさん:2014/05/10(土) 16:52:59.19 ID:O2yhZ3ex.net
http://codepad.org/QqddXav9

やっつけテストプログラム

969 :デフォルトの名無しさん:2014/05/10(土) 18:04:23.64 ID:ZLXGU8kN.net
ありがとうございます!そんなやり方があるとは…
色々な方法で求めることができるんですね

970 :デフォルトの名無しさん:2014/05/10(土) 18:16:35.41 ID:8M00MQ+Z.net
1000で割った余りから100で割った余りを引いて100で割るとか

971 :デフォルトの名無しさん:2014/05/10(土) 18:22:29.28 ID:nO3jje8t.net
(12345 / 100) % 10

972 :デフォルトの名無しさん:2014/05/10(土) 18:55:51.81 ID:8M00MQ+Z.net
すげーあほなこと書いたわ

973 :デフォルトの名無しさん:2014/05/10(土) 19:17:15.28 ID:DcycXvUU.net
コンソールアプリでカレントディレクトリを取得して、表示するってのをやりたいんだけど
どうしたらできる?

974 :デフォルトの名無しさん:2014/05/10(土) 19:23:11.05 ID:vWx61Bp4.net
win32apiを呼べばできるよ

975 :デフォルトの名無しさん:2014/05/10(土) 20:17:50.50 ID:KdDOFXms.net
POSIX準拠なら、getcwd()だろ。

976 :デフォルトの名無しさん:2014/05/10(土) 23:34:24.62 ID:SFO++ycj.net
こういうスレってGoogleの使い方分かってない奴が質問しに来るよな

ダブルクオーテーションでくくるのと
- マイナス記号でのフィルタくらい覚えろよ

977 :デフォルトの名無しさん:2014/05/11(日) 08:17:43.20 ID:HBJbY+fy.net
>>976
そういう奴はどうやってこのスレに到達してんだろうな…

978 :デフォルトの名無しさん:2014/05/11(日) 09:34:39.63 ID:NXvs+Rfo.net
http://msdn.microsoft.com/ja-jp/library/cc429301.aspx
> 現在のプロセスのカレントディレクトリを取得します。

http://msdn.microsoft.com/ja-jp/library/ms235450.aspx
> getcwd
> この POSIX 関数は使用されなくなりました。 代わりに、ISO C++ に準拠する _getcwd を使用します。

979 :デフォルトの名無しさん:2014/05/11(日) 16:45:17.33 ID:bK9D/oLg.net
FAQかもしれませんが、ググっても良く分りませんでした。
二次元配列を引数に持つ関数を作りたい場合、
以下のような感じにしたいのですが、これではエラーします。
最もお勧めの書き方を教えてください。
int func1(int **array, int rows, int cols)
{
int sum = 0;
for (int r = 0; r<rows; r++){
for (int c = 0; c<cols; c++){
sum += array[r][c];
}
}
return sum;
}

int _tmain(int argc, _TCHAR* argv[])
{
const int rows = 5;
const int cols = 3;
int array[rows][cols];
for (int r = 0; r<rows; r++){
for (int c = 0; c<cols; c++){
array[r][c] = r * 10 + c;
}
}
sum = func1(array, rows, cols);
printf("sum=%d\n", sum);
return 0;
}

980 :デフォルトの名無しさん:2014/05/11(日) 17:10:31.97 ID:5s3TJsCS.net
int func1(int**& array, int rows, int cols)
これでおk

981 :デフォルトの名無しさん:2014/05/11(日) 17:29:43.32 ID:NXvs+Rfo.net
>>979
http://ideone.com/ng8IFq

982 :デフォルトの名無しさん:2014/05/11(日) 18:04:41.37 ID:HBJbY+fy.net
>>979
2次元配列はポインタのポインタではない。
1次元配列で長さをcols*rowsにしてrow*rows+colまたはcol*cols+rowでアクセスするとかが定番、かな。

983 :デフォルトの名無しさん:2014/05/11(日) 18:51:15.18 ID:bK9D/oLg.net
みなさんコメントありがとうございました。
>>980
int**& に変更してもビルドできませんでした。もう少し解説お願いします。
>>981
良いアイディアですね。参考にさせてもらいます。
>>982
やはりそういう作戦しか無いのでしょうか?

984 : ◆QZaw55cn4c :2014/05/11(日) 22:27:25.49 ID:VWJDXhYj.net
>>979
可変長な二次元の配列をそのまま渡すことはできない、C99 でも。
malloc() か alloca() を使うのが定番だと思う
alloca() 版:http://ideone.com/ThAqqJ

985 :デフォルトの名無しさん:2014/05/11(日) 22:42:24.03 ID:i3EWh+tv.net
C++なんだから多次元配列クラスを作って参照渡しすればいいんじゃねえの?

986 :デフォルトの名無しさん:2014/05/11(日) 23:09:23.22 ID:oDuibFuc.net
文字列を数値に変換したいです

文字コードの意味をよく理解していないですが
例えば
char str[80];
int num;
scanf("%s",str)
num = str - '0';
aを入力した場合
97ー48で49がnumに入り
%dで出力したら49がでるのでしょうか。
ならばこれを%cで出力したら1?
今実行環境がありません;;

987 :デフォルトの名無しさん:2014/05/11(日) 23:13:26.83 ID:dGFiGG7Z.net
全角文字列を見せられ続けて死ぬ

988 :デフォルトの名無しさん:2014/05/12(月) 00:20:43.71 ID:4z9QgUFm.net
>>984
結果が違う…と思ったら、rowsとcolsの値が逆なのか

989 :デフォルトの名無しさん:2014/05/12(月) 00:24:19.82 ID:DwqGETIp.net
>>988
ごめん間違えた‥

990 :デフォルトの名無しさん:2014/05/12(月) 00:44:03.93 ID:DwqGETIp.net
>>986
http://ideone.com/L3DLPJ

991 :デフォルトの名無しさん:2014/05/12(月) 02:04:30.11 ID:8m8uDaT+.net
>>984
サンプルありがとうございます。参考になりました。
>>可変長な二次元の配列をそのまま渡すことはできない、C99 でも。
なるほど、そういう事なんですね。二次元配列は諦めて、
allocaで行きます。

992 :デフォルトの名無しさん:2014/05/12(月) 11:53:45.09 ID:4z9QgUFm.net
>>991
http://d.hatena.ne.jp/tondol/20090713/1247426321
に多次元配列の実装方法の例があるので参考にしてみるといい。

>>984 は「各行のデータを保持する配列と各行へのポインタを保持する配列に分けて確保」の方法
>>982 は「1次元配列として確保」の方法
俺は「各行のデータを保持する配列を連続した領域で確保」の方法が好き。

993 :デフォルトの名無しさん:2014/05/13(火) 00:33:24.98 ID:1g/5f/R+.net
>>987
マジでそれアスペの手前だよ
何とかするのオススメ

994 :デフォルトの名無しさん:2014/05/13(火) 00:39:58.94 ID:VL3miRAM.net
C/C++における関数呼出関係の把握をしたいので、
gnuglobalを使ってみたのですが、
callee( )がsrc.cppの100行目から呼ばれるという情報は取得できるのですが、
私が欲しいcallee( )がsrc.cppのcaller( )から呼ばれる、という情報は取得できません。
OSはLinuxです。

gnuglobalで私の欲しい情報を得る方法、もしくは
別のツールがあれば教えて下さい。

995 :デフォルトの名無しさん:2014/05/13(火) 00:43:41.91 ID:BZ1B9xOm.net
listやvectorなどにおいて

LIST.begin() <= LIST.end()
LIST.rbegin() <= LIST.rend()

これらがtrueであることは保障されてますか?

996 :デフォルトの名無しさん:2014/05/13(火) 00:47:42.44 ID:wwrEnEuU.net
されません
必ず != を使いましょう

997 :デフォルトの名無しさん:2014/05/13(火) 00:51:28.09 ID:LTUGkVaD.net
>>995
vectorは保証されていると考えて問題無いと思う。
listは保証されていない。

998 :デフォルトの名無しさん:2014/05/13(火) 00:54:39.88 ID:BZ1B9xOm.net
レスありがとうございます
!= を使うようにします

999 :デフォルトの名無しさん:2014/05/13(火) 00:54:56.84 ID:LTUGkVaD.net
>>995
すまん、見間違えた。
rbeginとrendだったとは。

1000 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1000
228 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★