2013年17プログラム129: スレを勃てるまでもないC/C++の質問はここで 21 (654) TOP カテ一覧 スレ一覧 2ch元 削除依頼
アセンブラ 13 (144)
【コボル】COBOL不要論【ただのDSLだよね?】 (353)
【iPhoneも】Titanium Mobileスレッド【Androidも】 (342)
iモード携帯電話用Java(iアプリ) Part22 (919)
【初心者歓迎】C/C++室 Ver.86【環境依存OK】 (103)
Git 6 (556)

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


1 :2012/07/15 〜 最終レス :2013/09/08
スレを勃てるまでもない低俗な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 :
>>1
これは乙じゃなくてポニーテールがうんたら

3 :
枯れ木過ぎてこのまま落ちそうだな

4 :
びよーね・すっぽすっぽ先生を讃えるスレということで

5 :
コード -1073741819 で終了してしまう
くっそー

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

8 :
>>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 :
>int readcmdline(FILE *i, FILE *o, char ***args)
ここに書いてるやん

10 :
typedef char ** charPtrPtr;とでもして、charPtrPtr * argsとでもしたらわかるかも知れない。

11 :
う〜ん、
http://www.nurs.or.jp/~sug/soft/tora/index.htm
あたりを読んで勉強してきます。

12 :
質問です。C++の設計者はどうしてあんなに分かりにくい仕様にしたんですか?

13 :
>>12
Cのコードを使えるようにするため

14 :
Cとの互換性の確保と、オブジェクト指向の概念の分かりにくさは、直接関係ないような気がしますが…。

15 :
実はオブジェクト指向ってしっくりこないんです!

16 :
質問ですが
__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 :
>>16
最適化したらどうなる?

18 :
>>17
すでに最適化(/O2)はかけています。
このコードではiの範囲とsetbitを指すポインタの有無を
コンパイラが分からない事が原因なのではと考えています。
ちょっと逆アセも確認してきます。

19 :
逆アセでもほぼ同様でした。
(インライン展開された関係でレジスタが変わっただけ)

20 :
Compiler Intrinsicsって割りと腐ってるのな

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

22 :
C言語でstaticを関数に付けると外部のファイルから参照できないということですが
他にも何かの効果があった気がします。
以下のような効果があるかどうか教えてください。
・関数のアドレスが固定になる?ので関数呼び出しが高速化される
・関数内の自動変数も固定アドレスになる?(int a;がstatic int a;になる?)
以上について教えてください。

23 :
>>22
関数の所在は元々固定的なので、呼び出しが高速になるわけではありません。
但し、コンパイラによっては静的関数のみ、インライン展開するので効果がないというわけでもありません。
また、自動変数は意味的に呼び出しごとに別のものでなければならないので静的関数ないであろうと静的にはなりません。

24 :
簡潔でわかりやすい回答ありがとうございます

25 :
PeekMessageで自分で選んだメッセージだけ処理したいのですが
PeekMessageを呼んだときに、他のウィンドウのWNDPROCも
呼ばれてしまうようです。
他のウィンドウや他のメッセージを全く処理したくないわけではないので
他のウィンドウのWNDPROCを何もせずに抜けるのはNGです。
キー・マウスやペイントを優先的に処理したいだけです。
他のウィンドウのWNDPROCを呼ばずに自分の選んだメッセージだけ
処理する方法はありませんか?
Windows XP、Visual C++ 2010 Expressです。

26 :
>>25
ttp://msdn.microsoft.com/ja-jp/library/cc410948.aspx
他のウィンドウのWNDPROCも呼ばれてしまうようです。の意味がわからない
PeekMessageはあくまでスレッドに関連付けられたメッセージキューからメッセージを取ってくるだけ
メッセージのディスパッチはしない

27 :
0: hoge.dll!WndProc(HWND__ * hwnd, unsigned int msg, unsigned int wparam, long lparam) 行 181 + 0x1c バイト C++
1: user32.dll!77cf8734()
2: user32.dll!77cf8816()
3: user32.dll!77d08ea0()
4: user32.dll!77d08eec()
5: ntdll.dll!7c94e473()
6: user32.dll!77cf93e9()
7: user32.dll!77cf93a8()
8: user32.dll!77cf9402()
9: hoge.dll!DoEvent(unsigned int wMsgFilterMin, unsigned int wMsgFilterMax) 行 17 + 0x1d バイト C++
10: hoge.dll!WndProc(HWND__ * hwnd, unsigned int msg, unsigned int wparam, long lparam) 行 181 + 0x1c バイト C++
11:…
DoEventはPeek/Translate/Dispatchする関数ですが、コールスタックはPeekMessageの行になっています。
ただし、PeekMessageには10:WndProcのHWNDとは別のHWNDを渡しています。
PeekMessageの中でごちゃごちゃ回って、0:WndProcにたどり着いています。
0:WndProcのHWNDは10:WndProcと同じハンドルです。
「PeekMessage 関数を呼び出すと、呼び出し側スレッドが所有しているウィンドウへ送信されたメッセージのうち、保留されていたものを取得できます。
SendMessage、SendMessageCallback、SendMessageTimeout、SendNotifyMessage の各関数を使って送信されたメッセージが、これに該当します。
システムは、内部イベントを処理することもあります。メッセージは、次の順序で処理されます。」
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これでしょうか?

28 :
スレを勃てる必要のある、低俗でないC/C++の質問って例えばどんなのですか?

29 :
最新の規格に関する質問

30 :
>>28
最新の規格に関する質問
C++11/C++1y 15
http://toro.2ch.net/test/read.cgi/tech/1333433900

31 :
>>28
【C++】高速化手法【SSE】
http://toro.2ch.net/test/read.cgi/tech/1130349336/

32 :
unsigned long length = 100000;
char *buff
buff = (char*)malloc(sizeof(char) * length);
strcpy_s(buff, length, ...);

としたい場合strcpy_sの第2引数がsize_t(unsigned int)を超えてしまうんですけど
この場合どうすればいいですか?

33 :
別に超えないけど

34 :
符号無しintは0〜65535だろ

35 :
>>34
32ビットなら0〜4,294,967,295

36 :
そうだったんですね
言い方を変えます
もしstrcpy_sの第2引数(文字列操作関数の文字数を渡す部分)が
受け取る型以上の数値を渡したい場合対応する関数って何ですか?

37 :
キャスト以外の方法聞いてんのか?
その場合32bit以上コピーしようとしてることになるってのは理解できるか?

38 :
>>36
strcpy_sの第2引数ってバッファのサイズで、size_tだったと思うけど
この型で表現できるサイズより大きいメモリは確保できないから考えるだけ無駄だと思うけど

39 :
>>37
理解できます
32bit以上の文字数を扱う場合も書いた方が安全なのかって考えすぎてました
>>38
メモリ確保できないなら詰みなので考えないようにします
ありがとうございました

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

41 :
無理

42 :
まじですか…ションボリ

43 :
インスタンスって参照渡しすれば使いまわせますか?

44 :
あんたの気持ちしだいだな
高潔な魂をもった人間なら使いまわせる

45 :
delete this; するまでは生きてるんじゃね

46 :
はぁ、そうですか
ありがとうございました

47 :
C言語の勉強をしているのですが、タイマーを使ったプログラムの仕組みというか概念がよくわかりません。
抽象的な質問で申し訳ないですが、わかりやすく説明して頂けないでしょうか。

48 :
もう少しわかりやすく質問文を変更して欲しい

49 :
>>47
イベントドリブン形式のプログラムを書いてみるとわかるよ

50 :
>>47
割り込み を検索すればいい。

51 :
>>47
定期的に関数を呼び出してもらうための仕組み

52 :
C++で質問です。
class A;
class B;
class C;
があって、class AはpublicデータメンバとしてB obj1;を持っています。
各クラスは.cppと.hで書かれています。
class Cのメンバ関数内でobj1のpublicなメンバ関数を実行しようとすると
>error C2065: 'obj1' : 定義されていない識別子です。
というエラーが出るのですが、どこが間違っているのでしょうか
インクルードは問題無いです…

53 :
書き忘れました、クラスの前方宣言もしています

54 :
ttp://ideone.com/oDblr
もっと詳しく書かないと
何が問題になってるのかわからんぞ

55 :
>>54さんありがとうございます
>a.obj1.funcB();

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

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

57 :
>>56
ttp://ideone.com/rRd0H
前方宣言だけでそのクラスのメンバ変数を使おうとしてないか?

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

59 :
ふらっとVisual C#,C♯,C#(初心者用) Part98
http://toro.2ch.net/test/read.cgi/tech/1349163087/

60 :
誘導ありがとうございます♪

61 :
質問です
std::wstring型の文字列(reserve済)に、1文字だけ追加したい場合、
最も高速と思われる関数はどういったものになりますでしょうか。
wstr.append()では、wchar_t型の文字入力は受け入れてくれないようなので…。
おねがいします。

62 :
pushbackがあったんですね。
解決しました。失礼しました。

63 :
windowsで連続したメモリを確保するには、どの関数を使うのが一番なのでしょうか?

64 :
virtualalloc

65 :
>>64
ありがとう

66 :
知恵を貸してください。
gccとmakeで開発しています。C++でなくCの範囲での開発です。
適切な値が設定されないまま、関数ポインタによる呼び出しが行われてしまうのを
回避する方法を探しています。
以下に例を示します。

67 :
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 :
問題は、handlers構造体の仕様を変更、特にメンバを追加したときです。
上記のソースコードに、(1)構造体宣言にメンバ(関数ポインタ型)を追加し、
(2)main()内に呼び出し文を追加、
するところまでは良いのですが、ここでプログラマがミスをして、
新たに追加されたメンバを初期化するコードを書き忘れたとします。
コンパイルは成功してしまい、プログラム実行時に異常が発生してしまいます。
追加メンバ分の初期化コードの書き忘れを、C言語の範囲内で、
コンパイラのエラーや警告で検出する方法はないものでしょうか?
ただし、プログラム実行時のチェックによる方法は不可とします。

69 :
長くてごめんなさい。
失敗例1
「;」をパラメータとするマクロを使ってhandlers構造体を宣言し、同じマクロで
「,」をパラメータにして、メンバ初期化関数の引数リストの部分を作れないかと
思いましたが、「,」をマクロのパラメータにできず断念。
失敗例2
メンバ初期化のための原型となるhandlers変数を1個用意して、
構造体初期化子{}を使って初期化する方法。
[{}内の項目の個数]より[構造体メンバの数]のほうが多くてもコンパイルエラーになってくれないのでNG。

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

71 :
最近入門してロベールの本読み終えたんだけど
テンプレートとかboostとか駆使したり、コードインジェクトとかいう謎の技術でDirectXをハックしているソース見てしまって
底の深さに愕然としてしまった
こういうバッドノウハウ的なものや、boost、C++11などの最新技術をスマートに学ぶにはどうしたらいいかね
おすすめのソースとか書籍あったら紹介してもらえると嬉しい

72 :
java屋さんの自分は、thisが大好きです。
C++でもjavaのようにthis使っていいですか?

73 :
>>72
Javaと違ってC++はポインタなんでそこだけ注意

74 :
C++の勉強の最初の一冊はロベールとC++プログラミング入門(オライリー)のどっちが

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

76 :
>>75
http://www.kouno.jp/home/c_faq/c20.html#20
> Cのコメントが入れ子にできないのは、PL/Iのコメントが入れ子にで きないからである。CはPL/Iからコメントについてのアイデアを借用 している。
PL/Iのコメントがネストできない理由は知らん。

77 :
/* を含む文字をコメントに入れられないから・・・と言いたいけど
*/ を含めない問題は放置なので多分関係ない

78 :
>>77
単に、処理がちょい面倒で、そんなに必要性を感じなかっただけでしょ。

79 :
まあ手抜きだな

80 :
そのせいで#if 0の方を多用しちゃう

81 :
範囲が広い場合は#if 0しかもう使わないな

82 :
逆にもし/* 〜 */ のネストが許される仕様だとコンパイラが処理(判断)に困る。。。
そんな記述の具体例ってあるでしょうかね。
自分はまったく思いつかないのですが。。。
ところで本当をいいますと、今私が使っているのはMQLって言語でして、仕様的にほとんどC言語なんですが
#ifや#ifdef系のプリプロセッサが一切ないんで、上記のワザが使えないんです。
そのくせにコメントがネストできないという負の遺産(?)はシッカリ受け継いでいるんです(>。<)

83 :
>>82
別にないでしょ、あなたの言う通りforやifブロックのネストを解釈できるのなら
/* 〜 */ のネストだって理解可能だと思うよ
本当にほんのちょっとだけコンパイラ(プリプロセッサか)の処理が面倒なだけで
たまたま不便な仕様だったと諦めるしかないね

84 :
一行コメントがあるなら、全部一行コメントでコメントアウトしてしまう手はある
エディタにその機能がなければ、マクロで機能追加したり

85 :
みなさん、レス感謝します。
ちなみに自分がやっているのは、if条件の一部を一時的に殺してテスト

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

さらにこのif前後の処理ブロックをまとめて一時的にコメント・アウトしてテストするってことです。
行頭//は使えますが、まとめる行数が多いので、入れ子状態で大域を/* */で括れると便利なこと
この上ないんです。
でもありがとうございました。

86 :
フラグ使うと動作に影響するしねえ
ま、しゃーないんじゃない

87 :
組込みで開発環境してエラーだらけになったと思ったら、
/**/ネストできるコンパイラだった・・・

88 :
たまにそういう処理系あるよね

89 :
>>85
>さらにこのif前後の処理ブロックをまとめて一時的にコメント・アウトしてテストするってことです。
こっちは #if 0 とかで良いんじゃないの?

90 :
>#ifや#ifdef系のプリプロセッサが一切ないんで、上記のワザが使えないんです。

91 :
プリプロセッサが無いっての

92 :
行コメント使え
いちいち一行づつコメントアウトするのがめんどくさいとか言うのは無しな
そんなもん、エディタの設定(マクロとか)で、大抵なんとかなる
もしかして、行コメントもないのか?

93 :
行コメントも無いの?
俺はエディタのマクロとかで、選択行全部を行コメントアウト出来るようにしてるよ

94 :
お前ら>>85も読めよ・・・

95 :
私のせいでスレが荒れてしまったようですね。すみません。
コーディングのアイデアをお寄せいただけるのは有難いのですが、
私の質問は
・(コメントのネストを)どうやればいいのでしょうか?
ではなくて、
・(ネストできない仕様は)なぜなんでしょうか?
です。
実際は、コメントアウトしたい部分は関数の中だし、任意の文字列を埋め込みたいわけじゃないので
if(0) {

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

}
みたいにやって一時的に実行を迂回させてます。
ありがとうございました。

96 :
>>95
多分、解析できない記述が存在するからだと思う
/*
int a=1;
int *p=&a;
int b=2/*p;
*/

97 :
その例は「コメントが閉じられていない」と正しく解析できると思うけど

98 :
>>97
それは正しくない

99 :
そもそも外側のコメントがない状態で
コメントになってしまう問題のある記述じゃないのか?

100 :
だからこそ>>97が正しいと思うんだけど
そうじゃないらしいな

101 :
みんな分かってるようだが俺には96が何をいいたいのかさっぱりわからん

102 :
b = 2 / (*p);
2 / 1なのかコメント最初の/*なのか
じゃないのか?

103 :
>>102
正解!

104 :
そう言いたいんだろうってのは伝わるがコメント開始なのが明白だからな・・・

105 :
>>104
何で?

106 :
>>105
http://ideone.com/koUYhr
>>96の外側のコメントを外したら int b=2/*p; の /* 以降がコメントになるでしょ。
ならネスト出来る仕様だったら>>97の言う通り「コメントが閉じられていない」と解釈されるのが自然だし、
普通にコメントのネストを解釈するそう解釈する処理系はもちろん作れる。

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

108 :
その除去でプログラマが意図しないコメント解釈されたらどうなるか

109 :
ネスト出来ない仕様 → コメントを外すと問題が起こる
ネスト出来る仕様 → コメントを外しても外さなくても問題が起こる
どちらにせよ問題があるので
無関係としか言いようが無い

110 :
2/*pの/*をコメント開始と捉えて、コメント閉じられてないからってコンパイルできなくなるのはCの規格上どうなの?

111 :
そもそも演算子をあまりくっ付けて書くべきではないってこった
字句解析的な意味で

112 :
いずれにしても混乱が起こる事がわかっているのなら、わざわざ複雑な機能はいれないだろ
費用対効果悪すぎって判断じゃね?
って言うか、D&E読む限り、行コメントの方を推奨している模様

113 :
一方D言語はネスト可能な /+ +/ を導入した

114 :
ソースにインベーダーの敵が侵入するわけか

115 :
なるほど、除算ポインタ演算子か(なんて言うんだっけ?*pの演算子)

116 :
>>110
規格上は問題なくて、単にコンパイラの不備だとおもう
ソースを読み終えた時点で「/*」に対する「*/」が見つからなければ、除算演算子とポインタ演算子の組み合わせって判断できるからね
つまり何重の入れ子コメントになっていても、一番外側の「/*」「*/」ペアが成立する限り
その中身を読み飛ばせばいいだけ。入れ子コメントの実装は可能
ちなみに入れ子コメントに意味があるか、を問題にするのはナンセンス
正しく構文が解釈できる限り、プログラマに対する制限は緩い方向(自由度が高い方向)へ仕様設計すべきだからね
メモリーやディスク容量、コンパイル時間等によって制限されるなら仕方ないと言えるが

117 :
すまん、訂正させて欲しい
誤> 規格上は問題なくて、単にコンパイラの不備だとおもう
正> 規格には問題ないのにエラーとして処理するのはコンパイラの不備だとおもう

118 :
トークン分割の妨げにならなければ空白の数は無視するんだっけ?? ※文字列中は例外だけど。

119 :
int x[2]={1,10};
int *i;
↑だとエラーが出ないのに
↓だとエラーが出ます
int x[2];
x[0] = 1;
x[1] = 10;
int *i;
error C2143: 構文エラー : ';' が '型' の前にありません。
何故こうなるのか分かりません・・・

120 :
ttp://codepad.org/S2TcBwvl
エラー出ないけど

121 :
>>119
C89規格でコンパイルしているからでしょう
int x[2];
int *i;
x[0] = 1;
x[1] = 10;
としたら大丈夫。
変数の宣言がブロックの先頭になければならない。

122 :
C++なら通るな
Cは変数宣言をブロックの先頭でしないといけないからこうだろ
int x[2];
int *i;
x[0] = 1;
x[1] = 10;

123 :
おっとリロードしてなかった、すまん

124 :
>>116
じゃあさ、やってみてよ。
gccならオープンなんだからさ。
口だけなら、誰でも言えるんだよなー。

125 :
>>116
アホか
コメントはコンパイラじゃなくプリプロセッサが処理するんだよ
演算子なんて解析しねーよ

126 :
そうか!わかった!!
ifはコンパイラが処理するからネストできるけど
コメントはプリプロセッサが処理するからネストできない
ってことですね!

127 :
違う。たとえば#ifはプリプロセッサが扱うがネスト出来る
http://ideone.com/rKasOJ

128 :
>>127
わざわざありがとうございます!
コメントと間違うから/と*は離して書きましょう
ってことですね!
じゃあ 結局 コメントがネストできない理由ってなんすかねー Orz

129 :
昔の人がそう決めたから。それ以上でも以下でもない
なぜ昔の人がそう決めたかと気になるかもしれないが、たいてい当時の技術的には難しかったとかそんなもんさ

130 :
if/for → ネストできる
/* */ → ネストできない
両者を分かつ技術的困難が何なのか興味あるな。
カーニハンの存命中に尋ねてみたい。

131 :
そうそう
わざわざサポートするメリットが無いとか、どうせそんな理由だよ
そもそも、コメントはネストさせるようなものでは無いし
デバッグで一時的に〜とかは、本来の使い方ではないわな

132 :
>>130
コメントをコンパイルするとか、空間的にも時間的にも、ムダばかりでメリットがない

133 :
本当にコメントを書く事しか頭に無かったんだろうな
コメントアウトは考慮外というか

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

135 :
技術の進歩というか
単にそういう仕様変更をしただけというか

136 :
>>132
>コメントをコンパイルするとか、
誰もそんなことは言ってないが?

137 :
プリプロセスでもなんでもいいから
とにかく処理したくないってことだろう
昔はコンパイル凄く遅かったから
コメントアウトするくらいなら削除したんだろうよ

138 :
ムダばかりなら最新の言語がサポートするはずないよな
http://wisdom.sakura.ne.jp/programming/d/d3.html

139 :
ただの歴史的な理由以外に特に理由は無い

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

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

142 :
スペースを入れるように規定されているというか、
スペースを入れないとコメントになってしまうように規定されているんだよ

143 :
>>142
そのとおり。
JIS X 3010で「文字の並び/*は注釈の始まりを示す」
と規定されているよ(6.4.9) だからb=2/*p;をb=2/(*p);とは解釈しない。
116の間違いはこの点にあるとおもう。
除算を意図しても構文が【規格上間違っている】のだ。
これはコンパイラ(プリプロセッサを含む)のインプリの話ではなく
C言語規格の問題だ。125の揚げ足取りでは何の反論にもなっていない。
116の言う「コンパイラの不備」ではなく、規格に反した記述だったから
エラーではじかれたわけだね。
ネスティングができない理由は、当時の計算機リソースだとコンパイラ
(プリプロセッサを含む)のインプリが楽だったから…
くらいじゃないのかな。(←これはオレの想像)

144 :
あの世から「だから#ifとか用意してやってるのに 最近の若いモンは!」みたく言われちゃいそうw

145 :
#ifの方がparseしやすいってことなのか

146 :
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 :
> 2GBくらいまではできるはず
ただの妄想だろ
環境くらい書け

148 :
環境
OS Vista Home 32bit
メモリ3GB
メモリクリーナーでは2GB超のメモリを空きメモリにできるのですが
その後>>146を試しても1.6GBしか確保できません

149 :
仮想と物理をごっちゃにしてるような気がする... (´・ω・`)

150 :
連続した1.6GB超えの領域がないんだろ。

151 :
>>149
物理メモリ3GB
仮想メモリ4GB
です
>>150
1度に2GBを確保しようとしているのではなくて
>>146のソースで示した通り小分けにして確保しています

152 :
32bitならそういうもんなんじゃねーの

153 :
タスクマネージャでメモリサイズ見れば?

154 :
タスクマネージャのパフォーマンスタブの空きメモリがまだあっても
プロセスタブにあるメモリ列が1.6GBになると止まってしまいます

155 :
>>147
プロセス毎に動的確保できるのは2GBまで

156 :
VC++は16バイトなんて噂もあるから、一度16バイトで試してみればいいんじゃ

157 :
メモリ関連で思い出した
mallocで小分けにして物理メモリの空き領域以上を確保したら
それ以外の既存のデータがページファイルに追いやられるよね
これで一応メモリ掃除できたとか思ってたけど
見かけ上空きメモリが増えただけで
メモリクリーナーはまた別のやり方でメモリ空けてんの?

158 :
>>154
ならWindowsはそういうものなのかもね

159 :
>>157
メモリクリーナーも一緒(mallocじゃなくて別の関数かもしれんが)
ページファイルに追いやって、すぐ使える物理メモリを確保する

160 :
こういうもんだと納得するしかないんですね
ありがとうございました

161 :
mallocやcallocで確保した領域は
プログラム終了時に明示的にfreeするべきでしょうか。
それともやるだけムダでしょうか。

162 :
終了時まで確保しっぱなしなの?
使わなくなったタイミングで解放しないの?

163 :
>>161
基本的には適切なタイミングで解放しましょう

164 :
返事ありがとうございます。
大昔、fj.comp.lang.cでこの辺りが話題になったことがありまして
上でmallocの話が出て思い出しついでにちょっと尋ねてみました。
当時、malloc/callocがメモリを確保するヒープ領域は、プログラム(正確にはプロセスだったか?)終了後に
OSが解放するんだからfreeは不要だ!と主張する人がいたことを憶えています。
プログラムを"安全側"に設計することに嫌悪する人もいたり…
私もfreeするべきだと思います。
プログラムもOSも、それぞれが自分がやったことの後始末は、基本的に
自分の中で責任持って完結するべき、と思ってます。
OSがやってくれるからサボってていいや〜みたいな考え方だと
余計なトラブルを招きかねないですよね。まぁ安全側の考え方ですが。
つまらない話、すみませんでした。

165 :
>>164
その手の話は...
終了直前以外でfree不要と言うバカいるの?2人目
http://toro.2ch.net/test/read.cgi/tech/1359585842/
でやってくれ。

166 :
宗教論争っぽくなるからな。。。

167 :
>>164
プログラム終了時にOSなりライブラリが自動で解放してくれるのが
保証されているなら、解放処理は書かなくてもいいだろうが、
解放処理が書かれていれば
「このコードを書いた人はメモリをちゃんと把握しているな」
という示しになる。

168 :
_beginthreadex(NULL, 0, fnFunction, NULL, 0, 0);
とする場合fnFunctionを変数参照で指定する場合は変数をどう定義したらいいですか?
イメージとしては
unsigned int *sum;
sum = fnFunction;
_beginthreadex(NULL, 0, sum, NULL, 0, 0);
としたいのですがパラメーターと互換性がありませんと出てしまいます

169 :
いま手元にコンパイラがないので想像ですが、宣言を
unsigned int (*sum)(void *);
でしてみたらどうでしょうか?

170 :
ありがとうございます
unsigned int (__stdcall *sum)(void*)
としたらいけました
でもなんか今まで書いた事のない書き方なので気持ち悪いです
もっとスマートな書き方は無さそうですし慣れるしかないんでしょうか
UINT (WINAPI *sum)(VOID*)
これくらいでしょうか

171 :
>>170
typedef unsigned int (*FUNCPTR) (void *);
FUNCPTR pf;
pf = func;
pf(…);
で良いんじゃないの

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

173 :
>>172
すみませんでした。アンカー(>>170)の入れ忘れでしたorz

174 :
そこらへんは個人の好みだろ
何回も書くなら>>171みたいにしたらいいと思う
()の位置が気持ち悪いのはわかる

175 :
>>170
>今まで書いた事のない書き方なので気持ち悪いです
関数ポインタ宣言の基本型さえ押さえときゃ気持ち悪くならないよ。
関数の返却値の型 (*変数名)(引数の宣言);
※オレの流儀は sum = &fnFunction; だなぁ。ま、好みの問題だww

176 :
>>170
> でもなんか今まで書いた事のない書き方なので気持ち悪いです
関数ポインタの記述のしかたはCの中でも特例だから、
「そういうもんなんだ」と思う以外に選択肢は無い。

177 :
__stdcallとかの呼び出し規則は独自拡張だから
括弧の位置がコンパイラによって互換性なくていちいちtypedefしてた記憶がある

178 :
>>175
typedef struct hoge {
unsigned int (__stdcall sum)(void*)
};
って事?
hoge.sum hoge->sumができなくね?

179 :
>>178
ちょっと175との絡みがわからないけど、hogeはタグ名であって構造体変数じゃないからできないんじゃないの?

180 :
こういう事もできる
typedef unsigned int FUNC(void *);
FUNC* pf;
pf = func;
pf(…);

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

182 :
ttp://ideone.com/CKPRSO
こういう話かな?

183 :
>>182
コピペの恐怖

184 :
182を読んでも178と181が何を言いたいのか良くわからんなぁ
そもそもなんで関数ポインタから関数の型の宣言に話がかわったんだ?

185 :
割と知られていない関数の typedef の挙動
http://ideone.com/kwArU8

186 :
>>183
ああ、指摘ありがとう。間違っていたので直しました
ttp://ideone.com/SZgkp1

187 :
>>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 :
>>187
すまん。うかつだった orz
hoge.sum = &amp;MyFunc; は hoge.sum = &MyFunc;

189 :
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 :
暗黙に、関数は関数ポインタに変換される。
暗黙に、関数ポインタは関数に変換される。

191 :
謎が消えたありがとう

192 :
昨日から何を聞きたかったのか、やっとわかった… (´・ω・`)

193 :
関数呼び出しや配列要素参照の定義って
無駄が多いように思うんだけど何か理由でもあるの?
関数呼び出し
 関数(引数リスト) or 関数ポインタ(引数リスト)
配列要素参照
 配列[インデックス] or ポインタ[インデックス]
関数が関数ポインタに暗黙に変換されるのなら
関数ポインタ(引数リスト)の定義1つで済む気がするのだが

194 :
関数と関数ポインタは違うだろう

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

196 :
有り体に言えば、関数名は、その関数本体のアドレス(ポインタ)を持つということじゃないですかね。

197 :
左辺値のまま呼び出しを行いたいのだろうか
関数ポインタに暗黙変換して右辺値になって何か不都合ある?

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

200 :
>>199
//homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.htm
こちらのHPを見て勉強しているのですが理解ががが

201 :
>>200
初心者にC++/CLIやらせるとか糞だな
C++/CLIはC/C++じゃないのでスレ違い
http://toro.2ch.net/test/read.cgi/tech/1268613679/
まずはそんな画像処理なんかより言語自体の勉強をすべき

202 :
>>201
スレチすいませんっした

203 :
GetDiskFreeSpaceExで空き容量を取得したいんですが
今後1000000TBのHDDが出たとして
正常な空き容量を返せますか?
この関数が返す戻り値が__int64のようなので
これの最大値までは大丈夫なのでしょうか?
それともOSで最大値が制限されてたりしますか?

204 :
__int64までなら大丈夫

205 :
C言語のキャストと、reinterpret_castで違いってあるのでしょうか?

206 :
あるよ

207 :
ないだろ
あれは目印だめの存在

208 :
const void* p;
(int*)p; // できる
reinterpret_cast<int*>(p); // できない
char c;
(double)c; // できる
reinterpret_cast<double>(c); // できない

209 :
>>208
おおお。有難うございます。
後者のはstatic_castなら大丈夫なんですね。勉強になりました。

210 :
間違った勉強の仕方をしても意味ないよ?
208が紛らわしいレスしてる責任があるけど
209が仕事で恥かいても俺は知らないけど

211 :
>>210
初心者みたいだし仕方ないよw

212 :
>>208のように嘘を教える者。嘘を信じる者がいるのが悲しいですね。

213 :
int&x=a;
static_cast<unsigned long>(x) = b;
の挙動を正確に説明できる奴なんて早々居ないんじゃね

214 :
aはなんなんだよ

215 :
C++の型キャストで一番安全そうに見えるstatic_castが実は一番危険

216 :
なんで釣堀になってんの

217 :
unsigned long型の右辺値にキャストして代入なんてできるの

218 :
ばかばっかかここ

219 :
ばかばーっか

220 :
ばかという奴がバカボンド

221 :
プリプロセッサの一部適用てなんか方法あったけ?
gcc E -DPAPAN_DNA=1 maman.c > okochan1.c
gcc E -DPAPAN_DNA=2 maman.c > okochan2.c
PAPAN_DNAの部分だけ展開するような

222 :
sed -e 's/PAPAN_DNA/1/'

223 :
unifdef

224 :
ある2つのライブラリがFuncを持ってて両方リンクしなきゃならない場合ってどうするんですか?

225 :
WindowsのDLLなら
LoadLibrary と GetProcAddress で
それぞれのDLLのFuncのアドレスを取得して
別々に使う。

226 :
>>224
linuxのsoなら
dlopen と dlsym で
それぞれのsoのFuncのアドレスを取得して別々に使う。
静的libなら。。。

227 :
ラッパーdll噛ませるしかないのかな

228 :
わざわざdl作らなくとも、ラッパー関数を作れば良いだけじゃないのか?

229 :
印刷設定の用紙サイズを変更するAPIがあったら教えてください
変更したらOS上で変更しない限り永続させたいです
お願いしますm(__)m

230 :
自己解決しました

231 :
と思ったけどやっぱり分かりません

232 :
>>231 ソース貼れや

233 :
>>231
そりゃ誰にも分からん

234 :
回答できないならレスするなゴミ

235 :
ゴミ質問者にはゴミ回答者がよく似合う

236 :
>>234
うるせえよゴミw
早くRよゴミw

237 :
アマゾンギフト10万円で死んでやるよ

238 :
どんだけぇ〜!

239 :
STLのstringについて質問です。
char型の非constアドレスを要求するCのライブラリ関数などに
このオブジェクトの持つバッファのアドレスを渡すにはどうしたらよいでしょうか。
data()のアドレスをキャストして無理やり渡してみたら書き込む事は出来たのですが、
保証されない動作になると思われるうえ、当然length()の値との整合性が取れなくなってます。
と書いたのを読み返してみたら、関数側がlengthの仕組みを認識出来ない以上無理な気がしてきた。
char型のバッファでワンクッション置くしか無いんでしょうか…

240 :
たぶんない

241 :
>>239
ほらよ
http://ideone.com/7uRXoZ

242 :
std::basic_string<T>はメモリの連続性を保証しないのでstd::vector<char>を通した方がよい
ttp://ideone.com/0Njz2Y

243 :
保証するよ
C++11から

244 :
そうだった失礼

245 :
>>241
なるほどresize()を使って帳尻を合わせておけばいいんですね
ありがとうございます
>>242
連続性が保証されていないバージョンがあったんですね
参考になります

246 :
>>245
C++03までは規格上は保証はされていないけど、
連続性の無い実装は1つも無いよ
だからこそC++11で保証するようになったんだし

247 :
誰か立ててくれませぬか

スレ立てるまでもない質問はここで 126匹目
質問する前にGoogleで検索しましょう。http://www.google.co.jp
プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。
前スレ
スレ立てるまでもない質問はここで 125匹目
http://toro.2ch.net/test/read.cgi/tech/1361608847/

248 :
>>247
他人任せの精神異常者はさっさと消えてください

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

250 :
>>249
その情報にいくら払えるって?

251 :
>>250
そんなこといわんといて・・・

252 :
英語を勉強しるよ

253 :
すいません、教えてください。
#include <signal.h>
void (*signal(int signum, void (*handler)(int)))(int);

intを引数に取り、void型の戻り値を持つ
関数ポインタの宣言。
とは、違うんですよね?
どのように解釈するのでしょうか?
この宣言から
signal( SIGINT, SIG_IGN );
がコンパイルエラーにならない理由が良く分からないです。

254 :
>>253
signal()の戻り値は関数ポインタ。
第一引き数はint。
第二引き数は関数ポインタ。
SIG_IGNは関数ポインタのはず。

255 :
typedef void (*signal_handler)(int);
signal_handler signal(int signum, signal_handler handler);
こう解釈する

256 :
K&Rですら反省しているうんこ文法なのでそういうものだと思って覚えましょう

257 :
C言語初めて、2ヶ月程度の初心者です。
free関数に関する質問です、よろしくおねがいします。
free関数は、どうやって、どこまでのメモリを解放するか判定しているのでしょうか?
free関数にわたすのは、先頭のポインタですよね。終了点はどこから情報を得ているのでしょうか。
int* px;
px = (int *)malloc(sizeof(int) * 10);
という感じで、メモリを動的に確保した後に、
free(px);
で普通に解放。
しかし、ためしに、
px++; /*してから*/
free(px);
解放してみると、派手にエラーを吐いたので、
実行時の解放中に気づいた?ようです。
px++;
px--;
free(px);
だと正しく解放したようです。
よろしくおねがいします。

258 :
>>257
処理系依存の話になるが、
たいていはmallocが呼ばれたときに、ポインタからサイズが得られるように
構造体を使ったヒープや配列で管理している。

259 :
>>257
_msize(px);
でサイズ得られるから
内部で管理されてる事になるね

260 :
>>258
ありがとうございます。
別のところで、管理されているのですね。
ということは、
malloc() で動的に確保したメモリのポインタに
(別のアドレスを)再代入しない方がよさそうですね。

261 :
>>260
当たり前だろボンクラ
どんな本で勉強してんだパーかおめ

262 :
>>259
自分の環境では、
undefined reference to '_msize'
となりましたが、たしかに、環境によってはメモリサイズが得られるようですね。
ありがとうございます。
>>260
たぶん当たり前すぎて、書いてありませんでした。。(^^;)

263 :
>malloc() で動的に確保したメモリのポインタに
>(別のアドレスを)再代入しない方がよさそうですね。
これって行った場合、
プログラム終了時に一般的なOSならfreeされますよね?

264 :
C++でguiアプリ作りたいんだけどオススメの方法おしえて

265 :
C++/CLIでCLR

266 :
C++Builder

267 :
以前は、wxWidgetsをやってたひとが、最近は、FLTKをつかってるといってた

268 :
ええとQT?

269 :
Qtがいいの?

270 :
>>263
free()していないメモリブロックは、OSなりでよきに計らわれる。
なので、生存期間の短い大量のメモリを使用しないようなプログラムでは
ポインタ変数の使い回しによるfree()の省略はしばしば行なわれる。

271 :
freeしない派ってほんとうざいわ

272 :
free必須信者ってほんとうウザい。 Rばいいのに

273 :
くだらん宗教論争する連中が一番ウザいです

274 :
freeしたいやつは自分が担当するソースだけしとけ
freeしたくないやつは自分が担当するソース以外はfree消すな

275 :
>>274
そのうちゴチャゴチャになって
freeしたメモリブロックをべつのソースモジュール内で再度freeしてしまう罠

276 :
初心者は、
&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 :
うわ、変になった。
 if(ptr) {
  free(ptr);
  ptr = NULL;
 }

278 :
if(ptr) って要るのか?

279 :
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 :
フリー(無職)の俺も何もしない

281 :
>>280


282 :
ptrが指してるものがなにか別のポインタを持っていて、
それを先にfreeしてからptrをfreeするという手順を取るというときに
すでにptrがfreeされたものが与えられてしまってもぬるぽにならないように。

283 :
((man *)280)->deleteThis();

284 :
>>282
nullpoになるわけないじゃん

285 :
 
  ∧_∧
  ( ・∀・)      | | ガガッ!
 と    )      | |
   Y /ノ      .人
    / ) .人   <  >_∧∩
  _/し' <  >_∧∩`Д´)/
 (_フ彡 V`Д´)/   / ←>>282
            / ←>>284

286 :
>>282
malloc〜free  malloc〜free と処理が分離されててptrを使い回すならわかるけど
malloc malloc 〜 free free みたいな状態でptrを使い回すってこと?

287 :
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 :
今日の釣堀
http://itpro.nikkeibp.co.jp/article/Watcher/20130331/467401/

289 :
>>279
炎上学習法で得た知識はダメだな。www
未だに生きていてNULLをfreeしても良いとしていない規格がある。でも教えてやらない。www

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

291 :
>>290
> そんなマイナーな環境があるんだ
自分の知らない規格はマイナー wwww
炎上学習法にはのらない。教えてやらない。www
> それってシステムコールを直呼びしているだけの手抜きライブラリだねえ
システムコールを知らない事を自白しちまったな。wwww
Rよクズ

292 :
春だねぇ

293 :
HAL

294 :
2013: A 2ch odyssey

295 :
規格?
規格と実装をごっちゃにしてないか

296 :
バカはほっとけよ

297 :
列挙型enumについて質問です。
// 向き
enum MUKI {EAST,SOUTH,WEST,NORTH}は実質MUKI {0,1,2,3}とのことですが、
MUKUI muki_states;
muki_states = 1;みたいな演算って可能でしょうか?

298 :
>>297
なんでやってみないの?
これからの人生、そういうスタンスで生きていくつもりなの?

299 :
言語が書いてないし、代入は演算じゃないし、自分で試さないのはなんで

300 :
人間の屑ばっかりのスレで役に立たねぇなぁ
キャストすりゃいいんだな、調べたら分かったわ
お前らは用済み

301 :
Yahoo知恵袋で聞いて来いよ
やさしく教えてくれんだろ

302 :
>>300
これからの人生、そういうスタンスで生きていくつもりなの?

303 :
enumで列挙宣言しておきながら敢えて整数値を代入する、その意図(理由)に興味があるな

304 :
調べてわかるなら最初からそうしろと
ま、釣り針だろうけど

305 :
>>303
ファイルから

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

307 :
ファイルから読み込むと普通は文字列になるんだけど、一旦intに変換してさらにenumにするの?

308 :
>>307
> ファイルから読み込むと普通は文字列になるんだけど、
それは作り方次第(というか読み方次第?)。たとえばfscanfという関数があってだな…

309 :
>>308
いきなりfscanfしちゃうの?
データの妥当性何かのチェックとかしない派?

310 :
>>308
おいおい
文字列として読み込んで、妥当性チェックした後に変換だろ
sscanfでもstrtolでもいいが、俺はあまりsscanf の優位性を感じない

311 :
現在の議論の本質と無関係なポイントで揚げ足をとりたければ勝手にどうぞ。

312 :
揚げ足というのは誰のどの点なんだ?

313 :
ファイルから読み込むと普通は文字列になるんだけど、…
ファイルから読み込むとき、普通は(まずは)文字列として読み込むんだけど、…
前と後では質問した人の知識背景がちがうよね

314 :
というのが揚げ足取り

315 :
まぁ質問していた無能はいなくなったからもういいんじゃね

316 :
>>313
fwrite,freadは場合によっては使うけど、まさかfscanfするなんて想像もしなかったからね

317 :
iostreamの拡張?てどうやるんですか?なんのためにやるんですか?

318 :
>>316
まぁ「ファイルから読み込むと文字列になるw」という誤解をとくための例ならべつにいいんじゃん?

319 :
#define EAST 0
#define SOUTH 1
...
にして
int muki_states としとけば muki_states=1 も muki_states=SOUTH も(*^ー゚)b
これじゃダメなん?て聞こうとしたけど、PCに戻ってみたら、すでに祭りは終わっていましたとさ (゜Д゜) メデタシ メデタシ

320 :
>>318
いや…
それの例にfscanfなんて出すから、余計におかしくなっていると言う話じゃね?

321 :
fscanf が読み込むのは紛れもない文字列だと言う事に気付いて無いんじゃないかな。

322 :
%dで読み取ってint変数に入れた値も文字列というのか?

323 :
>>322
それなら直接enum変数に読めばいいよね。
態々int変数経由するまでもなく。

324 :
>>322
ファイルには文字列で書いてあるだろう?

325 :
>>323
> それなら直接enum変数に読めばいいよね。
いや、だからさ。
intでもenumでもfloatでもいいんだよ。ファイルから読み込むと文字列になる、と考えてる人に対して
文字列型以外で読み込むこともできるよ、ていう例なんだろうから。
>>324
>ファイルには文字列で書いてあるだろう?
お前は帰っていいよw

326 :
>>325
君が言ってるのは多分俺のことだろうけど、俺も別にファイルを読むと必ず文字列になるなんて思ってないし、俺の他にも誰もそんな人いないから、見えない敵と戦う必要ないよ。
俺はただ単に、ファイルからデータを読み込む文脈で、int経由でenum変数に代入するなんてシチュエーションないだろって思っただけだから。

327 :
あのぉ… 皆さん オレの書き込み(319)はスルーですか… そうですか… (ノД`)

328 :
>>326
>>307

329 :
以下、無限ループ

330 :
>>328
ん?
その>>307が俺なんだけど。

331 :
一体何人が参加した議論だったんだろうな
カオスになっててワロタ

332 :
誰か >>327 を構ってやれよ

333 :
>>331
自演っぽいのもいるからユニーク・ビジター数は案外少ないかもな

334 :
fscanf()するとか言っちゃった奴が暴れただけ

335 :
>>330
> >>328
> ん?
> その>>307が俺なんだけど。
だから自分が >>307 で書いた文章を深呼吸して落ち着いてからよく読め って意味じゃないの?
ファイルから読み込むと文字列になるって自分で書いてんじゃんw

336 :
>>335
落ち着いて読むも何も、俺がファイルを読んだら必ず文字列になるなんて思ってないから、見えない敵と戦わなくていいんだよってことで。

337 :
コンピューター言語をいじくる前に先に日本語の読み書きを勉強した方がいろいろと捗るとおもうぞ
ま、これが落としどころ、ということで
327はタイミングが悪かったね〜 これに懲りずに、またいらっしゃい

338 :
見苦しいわ。

339 :
匿名性の面白さが出たカオスっぷりだったね。
まぁ、楽しめたんじゃないの?

340 :
さっきから一生懸命に終わらそうとしている奴はなんなの

341 :
>>340
> さっきから一生懸命に終わらそうとしている奴はなんなの
自分に不利な議論の流れだから。当然しょっw

342 :
端から見てると、どいつが終わらせようとしているかもわからんぞ

343 :
面白そうな流れだったのにリアルタイムで参加できなくて残念ですw
>>319
#defineのアイデア
ソースの可読性という点においては大差なさそうだけど、
enum型には規定された値以外の使用(代入等)をコンパイル時にチェックできる、という利点がありますね。
なのでenumのほうが多少はメリットがあるんじゃないでしょうか。
(ご本人抜きにして部外者がプログラムの仕様を語っても仕方ないですが)
>>336
> 落ち着いて読むも何も、俺がファイルを読んだら必ず文字列になるなんて思ってないから、
最初に、ファイルから読み込むと普通は文字列になる、って自分で書いてますよねw
物忘れが激しいタイプ?揮発性メモリ?
荒れた原因を作った真犯人が、見えない敵と戦わなくていい、とか、ほとんど人事不省ですかねw
その上にデータの妥当性チェックに話をすり替えるから、ますます流れがおかしくなったんですね。

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

345 :
テキストはダメでバイナリなら中身が保証されてる(キリッ って決めつけちゃってるところが… ま、その何というか… ええ、アレ、ですわ

346 :
>>345
バイナリなら中身が保証されているなんて言ってないよ。
内容が保証されているバイナリデータなら、freadで読む場合もあるって書いてるでしょ。
それにテキストが駄目なんて書いてないし。
テキストファイルをfscanfで読むのが駄目だって書いてるだけだし。
ちゃんと読んでくれよ。

347 :
テキストファイルをfscanfで読むのがダメなんてことはない

348 :
内容が保証されているバイナリファイルをfreadしていいなら
内容が保証されているテキストファイルもfscanfしていいよね

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

350 :
freadにも致命的な欠陥があって、
「完全に正しい」とは限らないバイナリファイルの読み込みには向いてないな。

351 :
>>350
man freadして、向いてるか向いてないか自分で考えろ

352 :
意味の無いやり取りはもうやめてくれよ。

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

354 :
すみません…質問の仕方が悪かったですorz
一旦スルーしてください…。

355 :
delete this;

356 :
delete c++;

357 :
16ビトのサイズとか具体的に決まってる場合多いじゃないですか。ハイルの形式って。
そういうハイルを読み書きするときには決まったサイズを保存する型って
どうしたらいいですか。

358 :
16ビトてきまてるなら、16ビトの変数をよういすればいいじゃないかな

359 :
>>357
short [], usort [], int16_t []など

360 :
>>359
ありがとうございまする。
後ろについているカッコはなんですか?
shortはintより短いことを保証するに過ぎませんよね。
int16_tが正解ですか?
さようならば。

361 :
>>360
[]は配列。
複数の連続した16ビットのデータを読み書きすると思って配列にしただけなので、そうでなければ無視してくれ。

362 :
int16_tってどう定義されているの?

363 :
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 :
LONG_MAX >= 2^31-1 じゃなかったっけ?

365 :
unsigned

366 :
unsigned float
unsigned double

367 :
そしてこのように話が進むと、めんどくなって「じゃーint使うのやめてshortでいいわ」って
ことにしてしまいたくなる

368 :
>>364
CHAR_BITが16かもしれない

369 :
しかしこれはint16_tの定義だからその場合は==1か!
脊髄反射はダメだなやっぱ

370 :
まあ sizeof(T)*CHAR_BIT==16 のようにビット数で比較したとしても
>>363 じゃ不十分なんだけどね

371 :
もう環境依存の予約語でいいよ

372 :
Cからポータビリティを捨てたらゴミしか残らん

373 :
ヘッダファイルとインクルード関係の使い方がよく分かりません。
cppに関数を継ぎ足すたびにhを編集して・・・とやっていけばいいのでしょうか。ものすごく間違えそうで危ない気がするのですが。

374 :
外に公開するものはヘッダに書く
はずかしいところはcppに書く

375 :
>>373
間違えるとコンパイラが教えてくれるから危ないことなど全くない

376 :
>>373
.hは目次、.cppは本文と思えば分かりやすいんじゃないかな。
先に.hを書いて、.cppは後で書く。

377 :
逆に.cppから書く俺みたいなのもいるがね
テストまでやってから公開って考え方

378 :
公開する .h は、設計段階で決定するから、
.cpp に合わせて .h を編集ってことはあまり無いなあ

379 :
いろいろ決めてから書く人はヘッダから、具体的に処理書いてって肉付けしてく人はソースから
書くんじゃない?

380 :
いきなりコード書きだすのは良くない。
趣味のプログラムなら勝手だが。

381 :
お前らビルドはいつするんだよ
ビルドすること無しに.cppを書き続けるのか?

382 :
慣れてくるとビルドはたまにしかしないな
週一とか

383 :
コード書くの遅すぎ

384 :
最近はビルドが早いからな。
ビルドエラーや実行時エラーに頼ったコーディングスタイル、
設計や机上デバッグを軽視している輩が増えているような
気がする。

385 :
開発中は、基本今変更したファイルのみコンパイル対象になるから
もうずっと前からビルド時間なんて気にならなかったが

386 :
組み込みで特に小さいチップだと、EEPROM書き換え回数に制限があって
もったいないので無闇にビルド→書き換えをしないよう設計と机上デバッグを煮詰める。

387 :
>>386
組み込みのこと全然知らないんだけど、書き込みせずにテストは出来ないの?

388 :
フラッシュメモリも内容の保持保証が約10年だとは割りと知られてないようだな
SDカードに入れたデジカメの画像は大切ならBD-REに焼いとけよ

389 :
ROMと言えば。。。 (  ̄ー ̄)y-~~
「ROMだってランダムアクセスできるんだから、そういう意味ではRAMじゃないの?」
とのたまう、素直で内気な少年でした… 今から○十年前の話です。

390 :
>>389
その頃から既に屁理屈っぽい萌芽が育ち始めていたんだろうね

391 :
>>387
環境によるんじゃね?
だからこそ、環境がどうであろうが実施できる机上デバッグなんだと思う

392 :
>>387
ICEで確認してからだな

393 :
>>389
律儀に RWM とか書いてたな…

394 :
390は技術屋には向かないな

395 :
>>394
あら傷ついちゃったの?www

396 :
>>393
> >>389
> 律儀に RWM とか書いてたな…
初めて知ったけど、これってなんて読むの?リウォム?リワォム?

397 :
記憶があやふやだけど、素直に「アールダブルエム」とか言ってたような気がする。
「ロム」みたいな言い方ができなかったのも、流行らなかった理由かも。

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

399 :
名前のみが重要な#defineは全部enumでまとめた法が良いの?

400 :
ちょっとなにいっているかわかんない

401 :
つまりだな
識別子(?)として「RED」「GREEN」「BLUE」を使いたい。割り当てられる値はどうでもいいって時に
#define RED 1
#define GREEN 2
#define BLUE 3
とするより、
enum color { RED , GREEN , BLUE };
した方がいいか、って質問だろ?
答えはYES。
使い方によるがenumなら値の妥当性チェックをしてくれるから。

402 :
しまった!揚げ足とられる前に訂正しておくわ
#define RED 0
#define GREEN 1
#define BLUE 2
に差し替えてくれ

403 :
差し替えの意図がわからん。

404 :
>>401
それよりもスコープの問題の方がでかいね

405 :
>>401
ありがと
そう言いたかった
#defineは全部enumに直すよ

406 :
> enumなら値の妥当性チェックをしてくれる
どういうこと?

407 :
typedefしたときの話だろ

408 :
typedefにそんな機能ないだろ

409 :
>>408 馬鹿か
typedef enum{...} E;
void f(E e){}
f(10); // compile error

410 :
enum E{...}
void f(enum E e){}
でいいじゃんtypedef関係ないよね
そもそもCではエラーにならないし
C++でエラーになるのは「値の妥当性チェック」じゃなくて単純に型によるもの

411 :
enumのあとになんで名前をつける必要があるの?
この名前使うの?

412 :
>>411
他の人間にコードの説明するときに使う

413 :
グループ名

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

416 :
//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 :
SND_RESOURCEを付けるのがポイント。
GetModuleHandle(NULL)の代わりにWinMainのhInstanceを使ってもいい。

418 :
>>416
>>417さん
すいません、先に言うのを忘れていましたが、私初心者に近いので
ソースコードの詳細利用方法があまりわかりませんでした。
すいません。
また別のスレに移動します。
ソースコード、情報提供 誠に感謝します。

419 :
そんなに難しい話じゃないよ。
<windows.h>をインクルードしておき、PlaySound APIを呼べば音が鳴る。フォームを使ってる場合でも同じ。

420 :
プログラム板 自治スレッド Part6
http://toro.2ch.net/test/read.cgi/tech/1368020285/
強制IDの導入議論を行っています。

421 :
クラスのメンバ変数をconstにしたい場合
staticにしないと初期化出来ませんか?

422 :
は?

423 :
>>421 コンストラクタ

424 :
C++とは言ってないが

425 :
>>421
メンバ初期化子
でもあまりconstメンバ変数は使わない

426 :
グローバル変数は危険だと聞いて、ローカル変数のみでゲームプログラムを組む練習をしたいのですが、スコープ外に出る時に変数は消えてしまいますよね。
どうすればいいんでしょうか。

427 :
>>426
スコープ外、例えば関数を読んだ先で使いたければ、
呼び元で必要な変数群を構造体で用意しそのポインタを渡す

428 :
××は危険だと聞いてそれに向き合わず逃げるようでは
Cなんぞ使うべきではない
なぜならC言語そのものが危険だから
・・・あれ、Cの話だっけ?

429 :
グローバル変数と聞いただけで火がついたように襲い掛かってくる連中がいるから
そういう意味では確かに危険

430 :
>>424
グローバル変数とローカル変数と動的確保は適材適所。
どれがよくてどれが悪いという話ではない。
一般論としてグローバル変数は少ないほどいいというだけ。

431 :
>>429
ほかにもGOTOを諸悪の根源とする原理主義者たちとかw いそうだねぇ

432 :
gotoはだめだろ

433 :
んなことはない

434 :
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 :
なんか自己解決したような気がします。
これだと見ただけでは何がしたいのか分かりづらいというか分からないですね。
全部宣言し、各商品の値段を出し、何を答えとして出すっていう分かりやすい順序を
作ったほうがいいということなんでしょうか。
一応自分で改善案をつくってみました。
#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 :
>>432
例えば多重ループの中から抜けたいとき
for() {
 for() {
  for() {
   〜
   if() goto LoopExit;
  }
 }
}
LoopExit:
gotoなしで書くとフラグと複数breakの組み合わせになると思うが
それよりもいっきにジャンプしたほうがシンプルで分かりやすくないだろうか?
「goto=悪」を金科玉条とするんじゃなくて、
要するに使い方(プログラマの思想?)次第じゃない?

437 :
>>435
考え方による。正解はない。
とにかく冗長でも分かりやすい記述を好む派と、簡潔で少ない行数であることを好む派がいる。
ちなみに前者の書き方は関数型言語に近いから前者の思考で書きたければそっちも勉強した方がいいかもしれん。
その書き方専用の定石というのも存在する。

438 :
>>435
最初にまとめて宣言するのはC89的な古くさいプログラムで、C++ではナシだな
「変数が初期化されていない」期間は
できるだけ短い方がバグが入りにくい
例外的なものは全体的に使い回す変数かな
その場合は初めて使う時に宣言すると、
その処理をやっぱ2番目に置こうと思った時に不便

439 :
>>436
基本的にそういう場合は関数に分けた方がいい
で、returnで抜ける
ただ、gotoの方がいい場合もあるので100%関数にした方がいいとは言わない

440 :
>>436
そのための大域脱出=try-catch-throw ですよと

441 :
正常系で例外使うのはgotoと変わらない

442 :
goto否定の発端ってほぼ全部gotoで書いちゃうような輩のせいだろ。
チョコチョコ使う分にはむしろ直感的で読みやすいソースになる。

443 :
>>439
> >>436
> 基本的にそういう場合は関数に分けた方がいい
syori();
---------
void syori()
{
for() {
 for() {
  for() {
   〜
   if() return;
  }
 }
}
return;
}
動くだろうけど、これが基本とは思わないな
関数コールのオーバーヘッドと引き替えにどういう利点がある?

444 :
むしろループそのものをiteratorやvisitor使って抽象化する

445 :
おっ 構造化プログラミングの話か? 
#今の若い人は知らないだろうな
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 :
goto      を使わない馬鹿 そればかり使う馬鹿
グローバル変数 を使わない馬鹿 そればかり使う馬鹿
C言語      を使わない馬鹿 そればかり使う馬鹿

447 :
>>444
やりすぎはコードの見通しを悪くする

448 :
>C言語      を使わない馬鹿 そればかり使う馬鹿
仕事上、Cを使わざるを得ない、とか、(ほかの言語を使うから)Cを使う必要がない、って人もいるかもよw

449 :
実際の開発でGOTOなんか使うの?

450 :
>>443
ループがそれほどあるだけで
普通は結構な行数だろ
短いなら別にgotoでもいいけど、
大抵は関数に分けた方がいい場合が多い

451 :
独りよがりな考えを普遍的事実のように書く輩って自分では意識してない(できない)んだろうな (´・ω・`)

452 :
>>450
環境によっては、無駄な関数コールを減らすことを考えざるを得ないこともある。
RAMが256byteしかないとか

453 :
そんなならもうアセンブラ使えよ

454 :
多少goto使ってでも、Cだとアセンブラと比べて作業効率が桁違いなのだ

455 :
do〜while(0)でbreakしてるのをみると、
素直にgoto使ったんでいいんじゃないかと思う時はある

456 :
ただ、goto嫌いな人が無理に使うことはないよ
スキルの低いうちは封印した方がいい

457 :
俺ならbreakフラグを使う

458 :
全てのループはgotoで置き換えられる

459 :
gotoとifで置き換えられる
すべてのプログラムは、連接、分岐、繰り返し、の三要素で必ず表現できるんだっけ?
えーっと なんの定理だっけ?
まぁ論理的に可能というだけで、
必ずしも見通しのよいコードになるとは限らないと思うけど

460 :
フラグをいくつも使って多重ループから脱出するよりは
gotoを使ったほうが見通しが良くなる場合もある

461 :
// フラグをいくつも使って多重ループから脱出するよりは
// gotoを使ったほうが見通しが良くなる場合もあるので
というコメントを残しておけば、引き継いで保守する人も納得する。
納得されなかったらム板かマ板のコメントスレにあげられる。

462 :
>>461
そんなコメントいらんわ

463 :
ラベル名にBREAKを含めてるね

464 :
むかしから...
goto肯定派は、何でもかんでもgotoでやりたい、と主張している「わけではない」のに
goto否定派は、gotoなんか不要だ、使う必要は全くない、という主張になっていることが多そうな気がする
この温度差はいったい何なんだろうって思うよ

465 :
break が「一つ上のレベルに脱出する」という機能でしかないからではないか?
ラベル付き break であれば温度差は解消される
ラベル付きbreak‥‥‥これって goto?

466 :
redoはgotoでなければ実現できない

467 :
条件脱出用に関数内で1つだけの脱出ラベルに対するgotoなら
個人的には容認かな。setjmp / longjmpのほうがいやらしい。

468 :
前後を見ないとgotoによりすっ飛ばされている区間を見落としてしまうという恐れ
goto-free で縛ればそんなことを「一切」気にしなくて済む

469 :
ラベルで検索すればいいだけだから、いろんなところで
使われてそうなbreakよりもしかして見落としにくいんじゃね?

470 :
gotoは便利なんだよ。
ただ、馬鹿に使わせるととんでもないことになるから信用できない奴には使わせたくないってだけで。

471 :
C++の規格書って日本語版はないの?

472 :
JIS X3014(C++03)がある
C++11はまだ
ただし他のいらない規格票もたくさん入っていて分厚い本の一部
1万前後だったかなあ

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

474 :
上記への追加です。
デバッグビルドしました場合は、キャッシュされず、毎回最新のタイムスタンプが
取得できるのですが、リリースビルドしました場合にはキャッシュされた値しか
取得できないという状況です。

475 :
GetFileTime

476 :
>>474
http://d.hatena.ne.jp/satosystems/20110517/1305585726

477 :
>>475-476
情報ありがとうございました。キャッシュされているようだと断言して
いましたが、結局私の環境ではキャッシュが原因ではなく、FindFirstFileの
誤動作(仕様?)が原因でした。
FindFirstFileで検索するファイルが置かれているパスは、かなり深い階層の
フォルダにありまして、検索用の文字列としてとても長い文字数のものを
指定していました(恐らくMAX_PATH数を超える文字数)。その結果、ヒットした
ファイルそのもののタイムスタンプではなく、そのファイルが置かれているフォルダの
タイムスタンプがWIN32_FIND_DATA構造体にセットされていました。
教えて頂いたGetFileTimeでも、引数にファイル自体のパス名を与えているのに
フォルダのタイムスタンプが取得されました。
(ただし、デバッグビルドした場合はヒットしたファイル自体のタイムスタンプが
とれていました)

478 :
そこでためしに、ファイルを置くフォルダをもっと浅い階層にして、検索用の
文字列ももっと短くて済むようにしてみました。その結果、きちんと検索で
ヒットしたファイル自体の最新のタイムスタンプがセットされるようになりました。
(デバッグビルド、リリースビルド双方とも)
MAX_PATH数を超える文字数を引数に与えていたと思いますので、FindFirstFile
の使い方の間違いだとは思いますが、それではデバッグビルドしても同様の動きを
してくれれば、それこそもっと早くデバッグできたと思いますのに、デバッグビルドした
やつを使ったら、かえってデバッグの障害になったという顛末でした。

479 :
シングルトンの重要性を教えてほしい
普通にstaticとどう違うの?

480 :
最初に取得する時までコンストラクタが動かない
ただのstaticメンバ変数だと、複数のシングルトン間の初期化の順番が仕様で未規定

481 :
>>479
シングルトンのが響きがかっこいい

482 :
複数のシングルトン間のじゃないわ
複数のstaticメンバ変数間の、だわ
シングルトンだと初期化順は取得した順
相互に使うようなものでも、コンストラクタでお互いを使わない限りは問題ない

483 :
シングル + クルトン

484 :
CやC++って
Microsoftが作ったの?

485 :
ちょっとは検索してみようとか思わないのかね。

486 :
「C言語 作った人」「C++ 作った人」で検索

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

488 :
int i;
などで作った?定義した?変数には最初なんの数字が入っているのでしょうか?
#include<stdio.h>
int main(void){
int a;
printf("%d",a);
retrun 0;
}
を実行すると2883044という数字が出てきますが、この数字はなんなのでしょうか?

489 :
環境にもよるが、
まあ大体の環境は変数の領域を確保した際に
たまたまそのメモリに残っていた値だな

490 :
最初に何の数字が入っているか分からないからこそ何か仮の数を入れて初期化するという作法がある。

491 :
>>488
変数を作る、というのは概念的な話で
実際はメモリのどっかの部分に名前を付けただけなんだよ。
だから、たまたまその部分にあった値が入ってる。
でもコード、コンパイラ、リンカ、システム共に同じなら
毎回別の値が出たりすることはあんまり無いと思う
コンパイラやリンカ、システムごとのメモリの扱い方の癖がそこに出てくる感じ
コードをちょっと弄ると別の値が出たりするからやっぱアテにしちゃダメだけどね

492 :
>>491
このプログラムなら別の値が出る事は少ないだろうけど
現実的なプログラムだと大抵別の値が出るぞ

493 :
>>492
そうか…現実的なプログラムだとまず試さないからな…

494 :
JIS X3014が見られん(*1)ので記憶違いならすまんが
外部変数とstatic変数は初期値ゼロが保証されていて
それ以外の場合は不定じゃなかったっけ?
ちなみにauto変数は記憶域がスタック上に割り当てられるんで
そこのゴミが入ってくるような気がします。
(*1)
JISCでオンラインで規格書を閲覧しようとしたらAcrobatのバージョンを更新しろとポップアップが。
すでに最新バージョンにしとるのにどうしろと? (`へ´)凸

495 :
C言語を作った人はデニスリッチーって分かったけど
結局、C言語の権利はどこが持ってるの?

496 :
言語の権利は誰も持ってないけど
ランタイムライブラリの権利は各実装者が持ってる

497 :
>>495
権利って著作権のことか?
あるプログラム言語で書かれたプログラムは著作権の対象になるが
プログラム言語自体が著作権対象になるかは知らん
小出しに質問してるけどいったい何が聞きたいの?

498 :
商標権かね
まあまず何を聞きたいか具体的にしないといかんな

499 :
>>497
言語自体もプログラムだろ

500 :
>>499
言語仕様のことだろ

501 :
C/C++のコンパイラとライブラリなどを自作したから、これを売って儲けたいとか、か?K&Rも知らない人間がありえねーー

502 :
>>494
singletonの話なら、static変数は普通ポインタだよ。

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

504 :
LISPって、AIが流行った頃にもてはやされていたから
わりと近年の言語かと思っていたけど、2番目に古い高級言語だったとは (゜Д゜)ポカーン
コンピュータサイエンスが20世紀中頃から勃興した学問だから
その頃に活躍された先生や技術者が、最近になって亡くなるのは
淋しいけど歴史の流れだよね… (ノД`)

505 :
C言語の権利をどこも持っていないってどういうこと?
JavaだったらSunMicrosystemsだと思うけど
C言語は本当にどこにもないの?

506 :
むしろ Javaがおかしい

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

508 :
>>505
まず「C言語の権利」が何を指してるか明確にしろってば
著作権じゃないんだろ?

509 :
言語仕様は著作権ないけど、
Sunを買い取ったOracle様がJavaのAPI仕様自体(API仕様書や実装ではない)に
権利主張してたよね。Androidの仕様を訴えてたあれ。
そんなもは認められないはずだけど、まだ完全には解決していないはず。

510 :
「 Java APIは著作権保護対象ではない 」
http://sourceforge.jp/magazine/12/06/03/2329238

511 :
あれは権利ゴロの嫌がらせだろ

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

513 :
基本情報やITパスポートで勉強するだろ
・言語仕様に著作権はない
・アルゴリズムに著作権はない
・コードに著作権は有る
・ドキュメントに著作権は有る
apiの仕様そのものに対する著作権はわからんが
apiのインターフェイスを記述したコードがあるならそのapiには著作権が発生する
当然第三者が勝手に利用したらアウト

514 :
>>513
GIF はアルゴリズム特許で問題が勃発したよね

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

516 :
うわぁ…
事実と理想が混同されてる

517 :
現実など糞食らえだ

518 :
R・ストールマンに傾倒されている方ですか?

519 :
ちなみに GIF の読み方は 「自負」 であって 「岐阜」 に非ず

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

521 :
すべてがFREEな世界に

522 :
すべてがFREE FREEな世界に

523 :
結局、彼の質問の意図は何だったんだろう
Cの参考書でも書くつもりなんかな
プログラミング言語の権利を気にする、その理由に興味があるな。 煽りじゃなくて、さ

524 :
うざいわ

525 :
法学部の学生かなんかで、ソフトウェアがらみの知財権か何かについて調べてたんじゃん?Dリッチーの名前すら知らなかったし。

526 :
>>525
俺も法学部だったけどあの訊き方じゃそれは無い。
法学部で重視するのは「誰か」じゃなく「どんな権利か」だし、C言語だけにこだわる理由もない。

527 :
>>526
> C言語だけにこだわる理由もない。
C以外のの言語には 【こだわってない】 という証拠は?

528 :
>>527
他の言語スレをひと通り見てきて同じ質問がされていたかを見てくれは済むんじゃない?
別に俺の言いたいことはそこじゃないからこだわっていようがいなかろうがどうでもいいけど。

529 :
他の言語スレを見てないのに言ってやんのwww 語るに落ちてるよw

530 :
知的財産権のばあい、権利の種類および、
誰が権利を所有しているのか、も当然、重視される事柄だが. 本当に法学部?

531 :
オマエらーー

もう許してやれ

532 :
>>530
その「誰が」ってのはあくまで概念上の話であって、具体的にCがどうのJAVAがどうのって話はしないよ。
ましてや権利の種類すら明らかにせず訊くなんてことは有り得ない。
少なくとも法学部のやる法学なら100%そう。

533 :
ここに書かれてることをできるだけ詳しく説明して欲しいです。
http://cansecwest.com/slides/2013/DEP-ASLR%20bypass%20without%20ROP-JIT.pdf

534 :
C言語から派生した言語はいろいろあるけと
全てデニスリッチーが作ったの?

535 :
デニスさんマジパネェッス

536 :
ケントンプソン涙目

537 :
デニスリッチーが作った言語のはCとC++のみ?

538 :
C++はビョーンスポッスポッ

539 :
デニスリッチーが作った言語は
C言語のみなの?

540 :
>>536
ケントンプソンだってチューリング賞をもらってんだ なにも泣くことはあるまいw

541 :
おRミルク出ちゃいましゅ!

542 :
BCPL -> B -> Cだな。

543 :
>>542
Cの次は特に無し?

544 :
C → C++ → C# → D

545 :
Java

546 :
Javaもデニスリッチーなの?
神じゃん

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

548 :
>>547
メンバ変数に煩雑にアクセスするんならクラスの設計を見なおした方がいいよ
読み書きするアクセサを付ける位ならクラスの意味ないじゃん

549 :
>>547
やりたきゃやればいいと思うけど

550 :
publicにしてもいいしな
でも後から泣くような気がする

551 :
>>547
メンバ変数が public/private に綺麗に分かれているという前提で
public なメンバのみアクセッサを付けるというのがポピュラー
C#とか rubyとか専用の構文を持つ言語すらある
特に setter だけでも作っておくとデバッグがもの凄く楽になる

552 :
アクセサってattr_accessorとか@propertyとか書いてパッと作れたりしないんですか?

553 :
ないよ
ヘッダファイルにプロトタイプを書いて
ソースファイルに関数実体を書くのが男の流儀だよ
ヘッダに書いてインライン関数にしたりIDEの機能で追加したりするのも邪道
おれがゆるさない

554 :
そもそも
そういう無駄な設計技法を取り入れて実行時パフォーマンスを犠牲にするやり方は
Cのお作法ではない
JavaなりC#なりに移るべき

555 :
いやむしろDに(ry

556 :
>>551
publicは自由にアクセスできるのになんでアクセッサを付ける必要があるの?

557 :
C++ならではの汚い文法だけど、特定の関数やクラスだけにfriendとして
公開する方法もある
大抵はこれで行ける

558 :
文法が汚いというか、設計が汚いね、それ

559 :
friend は公開じゃなくて
1つのクラスをやむを得ず複数に分割せざるをえないような時に使うもの

560 :
でもstd::ostresmやstd::istreamに渡す時はfriendにするしかないだろ?

561 :
<<か。上の話とはあまり関係無い気がするが。

562 :
まとめると
デニスリッチーが作って今使われてる言語は
C、C++、C#、Java
ってことでOK?

563 :
>>562
> デニスリッチーが作って今使われてる言語は
> C、C++、C#、Java
> ってことでOK?
その文章だと、C++もC#もJavaも、リッチーが作ったという意味になる。そう理解してるの?

564 :
人に聞くばっかりじゃなくて少しは検索しようぜ。
wikipediaとかもあるわけだし。

565 :
そろそろ目的を白状しようぜ!!!
大勢の人間がレスしてんだから、質問の意図ぐらい開示してくれてもいいだろう

566 :
白状しろとか怖い

567 :
 
             /. : . : . : . : . : . : . : . : ヽ
           /. : . : . : . : . : . : _,. -┐. : :|        貴
            |. : 「`¨ ー-‐     j. : :!
          !. : 〉         〈. : :.│    目  様
           l. :ノ-―≧从r≦=― 、ヽ、 j
            「V     }丞{     }气rfミ     的  の
           Yハ.__ ,ノj ヾ、   ノ  jら}》
          ヾ    {〈  r }  ̄   Lハノ     は
         _   ⊥ _/ゾj__ ヽ      厂
       /       \辷_ヽ }l    入    何
     /              ヾ-く丿j  /  }\
      |             Y´  /   /   ヽ だ
      |   ,∠ ̄ ヽ     ├-ァく     /
      l   (廴 )/     l /  \

568 :
オイオイ
あまりみんなで脅すと本人が萎縮しちゃって
言いたいことも言えなくなってしまうじゃないか! もっと優しく聞けよ!
ん? 怒らないからオジさんに言ってごらん
恥ずかしがること ないんだよ
ほら もうこんなに....

569 :
だってとっくに本人いなくなってるし

570 :
ポインタって動的になるの?

571 :
ポインタによる無効なアドレスへの参照
>>1002

572 :
ハイパーリンクつかないのか。チッ余計なことを

573 :
例えばmallocで帰ってくるポインタ(アドレス)は動的に変わりうるが
静的なインスタンスに対するポインタならプログラムの実行を通して不変だろう
いまいち質問の意味がわからん
最近こんなのばっかり

574 :
>>547
外部公開するクラスだけでいいよ

575 :
ポインタってnewみたいに
動的って解釈で良いの?

576 :
意味が分からない問いには答えられない

577 :
ポインタ自体は静的だな
char *p;
free(&p);
なんてことしないだろ?

578 :
SUCCEEDEDってif文の中の処理が正常に実行されたらif文実行ってことで良い?

579 :
>>578
それはWindowsプログラミングにおけるSUCCEEDED()マクロのこと?
もしそうだとしたら、HRESULTで調べてみて

580 :
>>578
自分がぷろぐらむを書くんじゃなくて読むだけならそう思っておいていい

581 :
>>577
最近教えていただいたネタ http://codepad.org/ChgEkuVs

582 :
何の関係があるのか分からん

583 :
IOCCC的なネタだな。

584 :
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 :
1.0*10^38 ~ 1.0*10^-37
1.0*10^308 ~ 1.0*10^-307

586 :
自己解決しました
scanfの中でdoubleで定義された文字を使う場合は%lfでないとだめなのですね

587 :
@C++
1.テキストの先頭に追記したいです
2.テキストの先頭文字を削除したいです
・やりたいこと
test.txt aaa → bbbaaa
test.txt abc → bc
・あまりやりたくないこと
バッファに文字列を一度読み込んで,同じファイルに上書き再出力

588 :
エラー耐性が高いのは、
別ファイルに出力して、元ファイルを消して、別ファイルをリネーム
エラー耐性不要なら
バッファに文字列を一度読み込んで、同じファイルに上書き再出力

589 :
一度読み込むと言っても全部読み込む必要はなくて
適宜上書き出力すれば良い
上書きしてもまだ読んでない所には上書きされないので

590 :
ありがとう
素直に読み込んどきます

591 :
仕事ではやるなよ

592 :
普通は元になるデータを保持しておいて
適宜最初から書き出すとは思う

593 :
intのバイト数って環境によって変わるらしいけど
何が原因でかわるの?

594 :
ハードウェアの都合で

595 :
64bit版とか32bit版とか1度くらい聞いたことあるべ

596 :
一応
short≧int≧long
ってなってるはずだけどな

597 :
逆だろう

598 :
あ、ほんとだ

599 :
あと、intはそのマシンの自然な語長にする、という規定があったような… 俺の勘違いかな??

600 :
8ビットCPU用Cのintは16ビットだった気がする

601 :
さっそくの反例 ありがとうございます。 勘違い、失礼いたしました。
#CP/Mの時代か〜 俺の産まれる前だわ (←ウソ)

602 :
いくらマシンが貧弱な時代でも
0-255 の範囲で整数型(キリッ などと考える馬鹿がいるものか

603 :
>>599
合ってるんだけど、何をもって自然とみなすかは規定されてないんだよね

604 :
多分、CPUの一番使用頻度の高いレジスタサイズで決めるんじゃない?

605 :
>>600
そりゃ規格でintは16ビット以上が
要求されてるからな

606 :
>>604
64bit機でもint=32bitが一般的
レジスタサイズなどあくまで目安にしかならない

607 :
>>606
それは win32api のソースを全面刷新させないための、つごー

608 :
ちょっと!なに言ってんのかわかんない

609 :
なにがわからないのかがわからない

610 :
gccだって32bitなのに

611 :
糞プログラマーのレベルに合わせて
互換性を優先したってことだろ
文字通りの解釈しかできないアスペか

612 :
>>607
x86 & Windows 以外の処理系もあるのに それは理由にならんだろ

613 :
>>611
> 文字通りの解釈しかできないアスペか
お前はWindows以外を知らないアスペねw

614 :
x64 なんて後ろ向きの妥協の局地で動かすんだから
互換性最優先なのは当然だろ

615 :
char=1,short=2から4を飛ばしてint=8にするのはおさまりが悪い
short=4じゃ2が空くしな

616 :
いっそ int2, int4, int8, int16 ってすればいいのに
将来 int3, int7が出てきても大丈夫w

617 :
x64が64bitならx86は86bitじゃないの?なんで32bitなの?命名者馬鹿なの?

618 :
単にCPUの名前から由来してるからしょうがない
Corei7とかもどこにも64なんてついてないだろ?
そういうことだ

619 :
x86 は 80x86 の略だからな

620 :
>>616
処理系独自の拡張は既にあるよ。たとえば
__int8、 __int16、 __int32、 __int64

621 :
文句があるなら IA64 を捨てた奴らに言え

622 :
>>616
>int3, int7ってなんだよ
もし作っても、メモリレイアウト上パディングされるだろ

623 :
C99でint8_tとかint16_tとか追加されてるね

624 :
>>623
それってオプションじゃなかった?

625 :
least16みたいなのは必須でも
16丁度みたいのはオプションだね

626 :
>>616
7bitレジスタのCPUは昔存在したはず

627 :
CHAR_BITは8以上だから・・・
というかそのレスはバイト数の話だし

628 :
intの違いはOSの32bit64bitだけなの?

629 :
間違えた
intのビット数が変わる要因はOSの32bit64bitだけなの?

630 :
神様の気分次第

631 :
>>629
コンパイラーを作る人の気分による。
コンパイラーは開発プログラム動作する環境の
オペレーティングシステムを強く意識している。

632 :
むかしDECのマシンでアプリを作ってた。
VAXからAlphaにマイグレーションしたんで、intが64bitなるか、と調べてみたら32bitだった。多分コンパチのためだろうけど。
intが64bitの処理系ってあんのかな。
PA-RISCやSPARCマシンは使ったことないけど、どうだったんだろう?

633 :
ILP64は一応あるにはある

634 :
任意ビットのintが宣言でき、ビットフィールドのごとく配列にして使えるようになると便利かな
CPUの制約は、この際無視w

635 :
使いどころが無いと思う

636 :
operator 駆使して自分で実装すればいい

637 :
#pragmaのいくつかをもうちょっと標準にしてくれるとか。
#pragma onceとか#pragma pack()とか。
あとendian関係とか。

638 :
>#pragma pack()
プリプロセッサーの仕事から逸脱してるし
そもそも同等のことは既に標準化されてる
>あとendian関係
ちょっと意味わかんない

639 :
bswapは欲しい

640 :
>>602
TL/1

641 :
TL/1wwww
昔のPC板かよ

642 :
そういやGAME/86ってのもあったな
記号だらけの言語
まあBASICの予約語を記号に置き換えただけなんだけど

643 :
月刊ASCII読者のOB会はココですか?
ナノピコのコンピュータ世界の最前線が面白かった

644 :
それよりbitのナノピコ教室がー

645 :
当時のCPUには当然FPUなんかなかったから浮動小数点演算は全部手書きだぞ
あれで相当勉強になった
これはアセンブラスレで書いた方がいいな

646 :
8087買う金がなかったんじゃないの? (* ̄ー ̄)y-~~~

647 :
要りもしないところに小数演算は甘え

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

649 :
8bit CPU の話だろう
そういや、FACCとかいってたねえ > ROM
ふぁっく!

650 :
>>646
8087馬鹿みたいに高かっただろ
しかも遅いし
あれで大学の研究室でマンデルブロ集合の絵描いたんだぞ
FPUとは思えないほどの遅さだった
>>648
ソフトウェアエミュレーションの場合FPUの全ての命令をエミュレート
してるわけじゃないんだよな
C言語で使う物だけ最低限入ってた

651 :
coutの出力時に precisionで指定した桁数より下の桁は四捨五入されますが
四捨五入ではなく切り捨てで出力する方法はないでしょうか?
double second = 59.9999999999997;
cout.precision(8);
cout << second <<endl;
で 60 ではなく 59.999999と表示されて欲しいです。
(std::scientificではなく std::fixed で表示したいです。)
お分かりの方がいらっしゃいましたらご教授いただけますと
大変ありがたいです。何とぞよろしくお願いいたします。

652 :
>>651
stringstreamに一桁精度高く流し込んで一文字削ったら?

653 :
>>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
保守
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【最速へ】LowLevelVirtualMachine【LLVM】 (608)
【消しゴム】MONOを使ってみるスレ4【じゃない】 (525)
.netグレープシティコンポーネント (151)
Ruby 初心者スレッド Part 52 (520)
C++は難しすぎ 難易度:4 (441)
HTABOXコア Part3 (703)
--log9.info------------------
モニタの歪みが気になって眠れない (104)
JPEGの後継画像フォーマットについて議論するスレ (136)
驕るなクリエーター、著作権は「5年」で十分w (177)
●JPEG2000(*.j2k)ってどうよ?    . (578)
おまいらのPhotoshopマシンのスペック書け!! (654)
〓CG業界の現在・未来V〓 (628)
湾岸ミッドナイト in CG板 (122)
(  ´_ゝ)流石だよな俺ら@CG板(´lt;_`  ) (778)
■■ハリウッドのCGクリエーター■■ (195)
絵が可愛くて上手いHP (343)
MAYA (450)
■□ちっとも上手くなんねーよ。モデリング□■2 (118)
【御中元は】Elemental World総合・15【ハムに汁】 (918)
Mypaint Part 2 (542)
『西E田』妹でいこう!『神』 (792)
【遊友館】クリエイター通信? part1 (644)
--log55.com------------------
新潟人って陰険陰湿
百姓と言えば
新潟のNGT48に対抗して金沢は兼六坂46を誘致しよう2
新潟と金沢、どっちが都会? Part46
■札幌、仙台、広島、福岡■VOL460〜 封 鎖 〜
新潟市都市開発スレ137
■札幌、仙台、広島、福岡■VOL461〜 臨検2 〜
広島と岡山、どっちが都会?