- 1 名前:デフォルトの名無しさん [2007/06/03(日) 22:33:55 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.37【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1178432985/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 809 名前:デフォルトの名無しさん [2007/06/20(水) 19:21:18 ]
- class Stone{
public: Stone(); int color, groupNumber; Stone *nextStone, * groupHead, *nextGroup; }; Stone::Stone(){ color = groupNumber = 0; *nextStone, = *groupHead, = *nextGroup = 0; // (1).ここで整数を代入できない } というStoneオブジェクトのインスタンスを21*21の二次元配列として生成して、 Boardオブジェクトを作りたいと考えています。 改行が多いといわれたので続きます
- 810 名前:809の続き [2007/06/20(水) 19:22:32 ]
- class Board{
public: Board(); Stone board[21][21]; Stone *boardHead; }; Board::Board{ *boardHead = &board; // (2).Stone(*)型はStone型に変換できない for(int i; i < 20; i++){ int j; for(j; j < 19; j++){ board[i][j].color = 3; board[i][j].(*nextGroup) = board[i][j + 1]; } board[i][j].color = 3; board[i][j].(*nextGroup) = boardboard[i + 1][1}; // (2).と同様 } と表記したところ、(1).(2)のエラーが起きました。 配列の要素一つ一つにポインタを持たせて、グループ化をしたいと思っています。どうすればよいのでしょうか?
- 811 名前:809、810 [2007/06/20(水) 19:24:44 ]
- すいません。書き忘れです。
(1)では、ヌルポインターを取り合えず代入したいと思っています。 (2)では、配列番号から、要素のポインターを代入したいと思っています。
- 812 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 19:29:47 ]
- (1)のところには、余計なカンマが付いている
(2)の最初の箇所は、余計な*が付いている 2つ目の(2)は、board[i][j].nextGroup = &boardboard[i + 1][1];にしろ
- 813 名前:デフォルトの名無しさん [2007/06/20(水) 19:31:34 ]
- (1)で*付ける意味も分からんし
nextStone = groupHead = nextGroup = 0; とか
- 814 名前:デフォルトの名無しさん [2007/06/20(水) 19:33:43 ]
- すみません、質問させてください。
void foo(const char *const& hoge); のような宣言の関数があるのですが、引き数定義部分の「const&」の意味が 分からずに悩んでいます。この宣言はどう解釈すればよいのでしょうか? よろしくお願いします
- 815 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 19:42:09 ]
- constな(C++の)参照
宣言自体の読み解き方がわからなければ、ここでも読んでおけ kmaebashi.com/programmer/pointer.html Cだから参照は出てこないが、ポインタの*と同じような要領で解釈しろ
- 816 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 20:19:12 ]
- >>812-813
あ、*の扱い方が間違ってたのか。ありがとうございました。
- 817 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 21:05:47 ]
- windowsで、C++builder使用してます。
質問です。 Linuxだと、iptablesのテーブルの中身を書き換えて iptablesを再起動すると、設定変更できますよね。 やりたいことは、 ※時間ごとに、アクセスできる人を変更したいんです。 これをwindowsでやりたいんです。 1、ファイアーウォールみたいなのから、自分で作る。 これは難しいでしょうか?パケット見て、捨てたり、捨てなかったり とかのやり方がわからないです。本などご存じないでしょうか。 2、フリーのファイアーウォールソフトを探してきて、 linuxのiptablesと同じように、テーブル書き換え->ソフト再起動 で、できそうでしょうか? 2番目だと簡単そうですか?
- 818 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 21:56:04 ]
- ソフト単体ならパケット監視してどうこうということもできるだろうけど、
windowsのばあい、システムに対してユーザーが介入するのは難しい。 アクセスというのは、何に対してのアクセスなんだ? webサーバーとか、ftpサーバーとかだったら、そのサーバーソフトのフィルタリング設定を使うべきだろう。 共有ディレクトリへのアクセスを制限するというなら、また別の方法が必要だろうが。
- 819 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 22:05:58 ]
- >>817
ttp://www.wilderssecurity.com/showthread.php?t=112582 でも読んでみたら
- 820 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 22:29:39 ]
- >>818
レスありがとうございます。 ふむふむ。windowsだと難しいですか。 自分作ってないソフトで、しかもそのソフトは フィルタリング機能とか無いんです。 >>819 ありがとうございます。 iptablesと似てるのないですか。だけ理解できました。 じっくり、読んでみます。 似たようなのがあれば、やりたいことできそうですね。
- 821 名前:デフォルトの名無しさん [2007/06/20(水) 22:47:33 ]
- >>820
そんなあなたにフィルタドライバか、DLLインジェクション。
- 822 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 23:07:41 ]
- なんで具体的にそのソフト名をいわんのかね。
- 823 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 23:36:12 ]
- 改造する気?
- 824 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 23:45:03 ]
- C++でLinkポインタというのを作りました
所有権を持つポインタオブジェクトが自分のコピー?に対する参照リストを持っていて 自分が消滅する時にそれらを一気にぬるぽ値に設定することで コピーは本体の事を意識しなくて済むというメリットがあります 質問はこれと似たような事が出来る既存のライブラリは無いかということです 正直あまり良い実装じゃない上に根本的に泥臭いんですよね…
- 825 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 23:53:56 ]
- Lockできないboost::weak_ptrを実装したって話?
- 826 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:31:22 ]
- あのー
(unsigned int) ((context->count[0] >> 3) & 0x3F) これがなぜ64のあまりになるのですか?
- 827 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:33:42 ]
- >>826
0x3fは2^6-1だから。
- 828 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:47:40 ]
- 0x3f=16*3+1*15
- 829 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:50:06 ]
- えーとじゃあ
45と120の場合いくらになるんだろ なんか計算あわない
- 830 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:52:38 ]
- >>826
一瞬、LISPあたりのコードかと思った。
- 831 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:53:37 ]
- ところでなんで
(context->count[0] >> 3)してるんだろう。 これすると値辺になる気がするのですが
- 832 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 13:05:29 ]
- つーかそれ、
8で割った後に64で割った余りを求めてる事になるが
- 833 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 13:14:49 ]
- あっそ、よかったね
- 834 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 14:30:08 ]
- よくないという話だな
- 835 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 14:54:13 ]
- >>826
10進数で下6桁残して上の桁を0にしたら それは100万 (10^6) で割った余りになる。 それと同じように、0x3F で AND とると (=2進数の下6ビットを残して上のビットをクリア) 64 (2^6) で割った余りになるわさ。
- 836 名前:ひろみつ [2007/06/21(木) 16:29:58 ]
- Cって何言語で一版最初書かれたの?今のC言語はCで書かれてるとかいうのはなしね。
K&Rだかなんだかが、一版最初に書いたのは、何で書いたの?アセンブラ?B?
- 837 名前:デフォルトの名無しさん [2007/06/21(木) 16:33:43 ]
- ひろみつ死ね
- 838 名前:デフォルトの名無しさん [2007/06/21(木) 16:50:44 ]
- すみません。長いソース打ち込みたいとおもって、本屋で長いソースが載っている本を買ってきました。
www.amazon.co.jp/C%E4%BE%BF%E5%88%A9%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E9%9B%86-%E6%9E%97-%E6%AD%A3%E5%B9%B8/dp/4320027108/ref=sr_1_3/250-4187414-6697033?ie=UTF8&s=books&qid=1182412183&sr=1-3 です。 QuickC対応って書いてあるんですが、VC++6.0でも大丈夫ですか?
- 839 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 17:10:28 ]
- >>838
QuickC…… その本は今すぐ返品しなさいw ソースが欲しいなら、 sourceforge.jp/ sourceforge.net/ なんかで探しなさい。 もしくはあなたの好きなアプリやライブラリでオープンソースなのを探しなさい。
- 840 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 17:57:25 ]
- 94年じゃしょうがないな
- 841 名前:デフォルトの名無しさん [2007/06/21(木) 18:27:59 ]
- unsigned conv_in:1;
という記述を見かけたのですが このコロンはなんですか?
- 842 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 18:31:58 ]
- >>841
ビットフィールド。 変数のサイズを1bitにする指定。 とはいっても、実際に1bitになっているわけじゃないけど。 1bitしか使わない宣言というべきなのかな。
- 843 名前:838 mailto:sage [2007/06/21(木) 18:33:45 ]
- >>839
どうもありがとうございました。そんなサイトがあるんですね・・ すごいです。独学者なので、助かります。ありがとうございました。 >>840 やっぱだめですよね。。どうもありがとうございました。
- 844 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 18:35:49 ]
- おいおい独学社ならそれくらい嫉妬家よ
- 845 名前:841 mailto:sage [2007/06/21(木) 18:44:33 ]
- >>842
ありがとうございます
- 846 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 18:55:12 ]
- >>844
今日始めたばかりの独学者なんだろ。事情を察しろ。
- 847 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 19:06:10 ]
- そういうところのリンクをまとめて貼ってもいいんだが
見つける喜びってのがあるからなあ
- 848 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 19:09:04 ]
- >>847
急に貼られても今日始めたばかりの独学者だから困るだろ。事情を察しろ。
- 849 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 22:20:52 ]
- 長いソースを打ち込みたいならCプログラミング診断室
いや本気にしないでね
- 850 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 22:22:08 ]
- >>825
おー、weak_ptrで出来るんですね しかもロック付ですか…凄い
- 851 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 22:45:49 ]
- OfficeのWORDの文字だけをいじるプログラムを組みたいのです。
ただ、UNIX系を想定しているので、COMを使った方法ではダメなのです。 DCOMを使うのも、避けたいのです。 そこで、WORDのデータ構造を調べてみたのですが、どこにも見当たらないのですが、 UNIX系で操作できるようなライブラリ・もしくはデータ構造がわかるサイトがあれば教えてもらいたいです。 よろしくお願いします、
- 852 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 22:51:51 ]
- あ〜残念。データ構造がわかる頭は持っててもサイトは知らないやゴメンね、
- 853 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 01:10:31 ]
- あー残念。RTFやOpenOfficeText形式なら知っているけどMSWord形式は知らないや。
- 854 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 01:17:29 ]
- POIでいいじゃん。
がんばって移植すれ。
- 855 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 04:31:38 ]
- typedef vector<int> V;
typedef V::iterator I; typedef vector<V> VV; VV vv; for_each( vv.begin(), vv.end(), tr1::bind( &fill<I,int>, tr1::bind(static_cast<I (V::*)()>(&V::begin), tr1::placeholders::_1), tr1::bind(static_cast<I (V::*)()>(&V::end), tr1::placeholders::_1), 0)); g++ 4.1.2です。 2次配列の初期化をalgorithmの練習でやってみようと思っていろいろ試行錯誤してみたのですが、 こんな悲しいコードになってしまいます。 static_castは省略できても良さそうなものですが、これはg++特有の問題でしょうか? (省略できたとしても普通にループ書いたほうがわかりやすいけど)
- 856 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:20:41 ]
- >>852
ふと思ったんだが、公開されてないデータ構造ってどうやってわかるの? やっぱバイナリエディタで開くと、大体わかっちゃうものなの?
- 857 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:06:54 ]
- >>856
バイナリデータの解析の基本は 「ちょっといじって何が変わったか調べる」。
- 858 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:10:48 ]
- 夏カシス昔よくやった
- 859 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:00:27 ]
- >>855
g++ じゃなくても static_cast は外せないだろうね。 bind() の第1引数にはほとんど何でも入るから、コンパイラの知ってる情報だけでは オーバーロードされた &V::begin のうち適切なものを選べない。
- 860 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:55:40 ]
- >>851
WORDは色々バージョンも多いから そんなめんどくさい事せずに、POIを使った方がいいと思われ。 ただ無駄にJavaのコード呼び出す必要があるけどな。
- 861 名前:デフォルトの名無しさん [2007/06/22(金) 13:26:29 ]
- 0〜9の数字をランダムに発生させて
数字が被らないように どのような順番で数字が来たか表示させるという処理をしたいのですが このようなプログラムを作るにはどうすればいいのでしょうか 乱数生成時に数字が被りすぎて無限ループに近いじょうたいになってしまいます
- 862 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:30:14 ]
- 0〜9 の数字を入れた配列を作ってシャッフルするのが一般的。
C++ なら random_shuffle って関数テンプレートがあるから、それ使う。 C なら自前で作るべし。 アルゴリズム悪いと確率が偏るから、 ランダムシャッフルで検索してアルゴリズム調べてちょ。
- 863 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:30:39 ]
- >>861
絶対被っちゃいけないなら、それは0-9のランダムではなくて0-9のうち前回の数字を取り除いたランダムじゃないか。
- 864 名前:861 [2007/06/22(金) 13:35:54 ]
- ,, ,,,
゙'lliiiiiiiiiiiiilllllllllllllllll|||li,, l||||l ゙゙゙゙゙ 、,,,,,,,ii!!"゙゙゙゙゙ 、,,,,,, 、,,,, |||| ,l||||" ゙゙'llli,, ゙l||! ,,l|||゙ ill,,,,,,,,,,,,,,,,,,,,,,,,,,,iiilllll,,, ||| ,,l|||! ゙゙゙゙゙ ,,,l||" ゙゙'゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙ || ,il|l゙゙ ,,rlll" ,,,, ,,ill"゙ ,,,ril"゙ il||||l
- 865 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:40:26 ]
- 力抜けよ
- 866 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:56:17 ]
- そう、もっと・・・力を抜いてごらん・・・。
- 867 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:59:44 ]
- for (;;) { >>865 >>867 >>866 }
- 868 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 14:02:50 ]
- 5→6→4じゃね?
- 869 名前:デフォルトの名無しさん [2007/06/22(金) 14:27:56 ]
- C++では変数の宣言をどこにでも置けると聞いたのですが、
goto文で変数の宣言を飛ばすことはできないのですか? 以下の文をコンパイルできません。 int main() { goto end; int a = 100; end: return 0; }
- 870 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 14:38:20 ]
- >>869
何が目的なのかさっぱり解らんが、 「宣言」は「実行」されないんだから 飛ばすも何もない。
- 871 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:43:43 ]
- つまり、gotoで分岐する範囲では宣言できないということだ。
- 872 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:46:05 ]
- switch - case で、caseで宣言できないのと同じだな
- 873 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 16:18:11 ]
- 最初に格納する数値を入力して、
以下のように文字などを無視してその個数分だけ整数値を格納する というプログラムを作りたいのですが、これって可能でしょうか? fgetsとstrtolを使うといけそうな気がするのですが 頑張ったものの自分ではどうにもならない状況ですorz 【実行画面】 個数を入力したください>>5 5a11bbb7 88yew99 数値1:5 数値2:11 数値3:7 数値4:88 数値5:99
- 874 名前:デフォルトの名無しさん [2007/06/22(金) 16:53:19 ]
- いままでCでは数値を文字列にするときは
sprintf(str,"%d",num);のようにやってたのですが、 C++でstd::stringとsize_type size()等、STLを使う場合はどのように変換すればいいのでしょうか? std::string str1 = "ああああ"; std::string str2 = "長さ" + str1.size() + "です"; みたいに使いたいのですが、これはエラーがでます。
- 875 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:01:09 ]
- boost::lexical_castなどはどうだろう
- 876 名前:874 [2007/06/22(金) 17:10:29 ]
- >>875
おお、すげー便利なもんあるんですね。ありがとうございます。早速使ってみます。
- 877 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:20:04 ]
- >>873
一文字ずつアスキーコードで比較して行けばいいのでは?
- 878 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:25:46 ]
- >>873
宿題なら宿題スレ行きを薦めるが、とりあえずこんな感じで出来る。 #include <stdio.h> #include <ctype.h> int main(void) { int i, c, nc, *nv; printf("個数を入力してください>>"); if (scanf("%d", &nc) != 1 || nc <= 0) return 1; nv = malloc(nc * sizeof(int)); for (i = 0; i < nc && (c = getchar()) != EOF; ) { if (isdigit(c)) { ungetc(c, stdin); scanf("%d", &nv[i++]); } } nc = i; for (i = 0; i < nc; i++) printf("数値%d:%d\n", i+1, nv[i]); free(nv); return 0; }
- 879 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:41:32 ]
- >>877
このスレを最初から読んでいたらscanf処理のことが書いてあって、 代わりにfgets+strtolということが書いてあったので この処理を弄くって上に書いたような処理がOKになったら 使いやすくなりそうだと思ったのですが やはりこの仕様にするとそれが早いかもですね…。 >>878 宿題では無くちょっとこのスレを読んでいて気になったので考えていました。 しかし書いてくださりありがとうございます。 いくつか知らない関数があるのでググって見てみます。 ちなみにfgetsとstrtolで12a23から12と23を取りたかったら strtol(str,&error[i],0); strtol(&error[i]+1,&error[i+1],0); こんな感じでずらしていく感じにするのでしょうか?
- 880 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:51:22 ]
- >>879
こんなかんじ。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(void) { char buff[0x1000], *p, *q; unsigned char c; while (fgets(buff, sizeof buff, stdin)) { for (p = buff; c = *p++; ) { if (isdigit(c)) { printf("%ld\n", strtol(p-1, &q, 10)); p = q; } } } return 0; }
- 881 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 18:25:06 ]
- >>880
おぉ、激しく感謝です! しかもコードが短くて使いやすくて良いですね! 今日なんだかんだで5、6時間ほど考えていたので 教えてくださりかなりガチで嬉しいです>< 重ね重ねですが本当にありがとうございます!
- 882 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:30:17 ]
- 突然すみません。質問させていただきます
自分は最近Cを始めたばかりの初心者で、初心者向けの本を参考にしてプログラムしています。 そして、その本を読み終えてさあがんばってみようと、ためしにオープンソースのものをDLして、ソースコードを見てみました すると、いくつもファイルがあり、ひとつではありませんでした。 教本を見ても複数ファイルを同時に扱ってプログラムをする、なんてやりかたはどこにも書いていなく、戸惑っています どうやって複数のソースコードをひとつのプログラムとしてまとめられるのでしょうか? 分がわかりにくかったらすみません。教えていただけたら幸いです。
- 883 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:35:30 ]
- 分割コンパイルで検索
- 884 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:43:54 ]
- 解凍したディレクトリで、./configure か、counfigure.bat したあと、make か nmake
- 885 名前:たろう [2007/06/22(金) 21:41:10 ]
- 曖昧さについて質問があります。
現在、ある処理をできるだけ小さいプログラムで記述する競争をしてまして、 以下のような記述か可能かどうか教えてください。 ●質問1 ----- int a = 0; int b[] = {a++, a++, a++}; ----- と記述した場合、 b = {0, 1, 2} となるのでしょうか? それともコンパイラ依存でしょうか? コンマ演算子は左から行う結合ルールですが、 この場合は演算子じゃないので、 明確なルールはなく、コンパイラ依存でしょうか? ●質問2 func1 があるクラスのポインターを返す関数であるとして、 ----- int a = 0; func1(a++)->func2(a++); ----- と記述した場合、 func1(0)->func2(1) となるのでしょうか? それともコンパイラ依存でしょうか? func1(0) を実行してからでないと、func2 が決定しないので、 なんとなくその中の引数の評価が後のような気がしますが。
- 886 名前:じろう [2007/06/22(金) 22:12:25 ]
- やあ、たろう
この勝負は俺がもらった 約束通りお婆ちゃんの貞操は頂いて逝くぜ
- 887 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:20:55 ]
- int a = 0;
int b[] = {a++, a++, a++}; ----- int b[] = {0, 1, 2};の方がよほど短いわけだが。 ----- int a = 0; func1(a++)->func2(a++); ----- 同様にfunc1(0)->func2(1);ではいけないのだろうか。 まぁ、一つの式の中にa++が二つある場合の評価順序は不定と言うことで。
- 888 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:27:23 ]
- >885
プログラムを短くするノウハウについては ↓のスレが勉強になるかもよ 七行プログラミング part5 ttp://pc11.2ch.net/test/read.cgi/tech/1142467359/
- 889 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:38:11 ]
- >>880
sizeof(buff)の形ならよく見るのですが、sizeof buffのように括弧のないものって何でしょうか?
- 890 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:41:30 ]
- >>889
別にカッコつけなくても生きていけるんです
- 891 名前:デフォルトの名無しさん [2007/06/22(金) 23:46:17 ]
- sizeofというのは「関数」じゃない。
だから、sizeof(buf)のbufは、関数の「引数」じゃない。 関数じゃないから、括弧は「関数呼び出し演算子」ではない。 sizeofは、演算子の一つ、sizeof演算子です。だから、括弧は不要。 「1+1」を「 (1)+(1) 」とは書かないでしょ?これと一緒。
- 892 名前:889 mailto:sage [2007/06/23(土) 00:11:33 ]
- ありがとうございます。付けなくてもいいんですね。
なのに()付きのサンプルコードが多いのは何故なんでしょうか?
- 893 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:15:46 ]
- >>892
型のサイズを知るには、sizeof(int)のように括弧が必要。 それに倣って、括弧をつける人が多数。
- 894 名前:889 mailto:sage [2007/06/23(土) 00:19:49 ]
- なるほど、そういうことだったんですね。
ありがとうございました。
- 895 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:22:27 ]
- 括弧つけても優先順位に全く影響与えないしな。
無駄だし勘違いする人も出るからと嫌う人もいるし、 括弧を付けた方が統一性が出ると付ける人もいる。 そして、よく知らないけど括弧付けないといけないと勘違いしてる人もいる。
- 896 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:56:10 ]
- 何でtypeidはカッコ必須なの?
- 897 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 00:58:17 ]
- typeidの場合はsizeofと違って対象が型だろうが値だろうが括弧が必要。
だから個人的には、sizeofも常に括弧を書いたほうが何となく対象性がある気がする。
- 898 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 01:07:29 ]
- >887
>まぁ、一つの式の中にa++が二つある場合の評価順序は不定と言うことで。 不定じゃなくて未定義でしょ。 鼻から悪魔がでてくるじょ
- 899 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 06:59:03 ]
- いや不定だろ
- 900 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 07:11:10 ]
- JISX3010 6.5式 (70)によれば、
「この段落の規定によると(略)a[i++]=i;は、未定義の式文である」
- 901 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 13:33:55 ]
- せいぜい言葉遊び。
「未定義」だから、コンパイラにより「不定」になるんだろ。
- 902 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 14:02:30 ]
- >>901
www.kouno.jp/home/c_faq/c11.html#33
- 903 名前:デフォルトの名無しさん [2007/06/23(土) 14:44:39 ]
- C++とはちょっと違うのですが、適当なスレが見つからなかったので、すみませんが質問させてください。
VC++6.0のマクロ機能を使って、エディタ上で選択している文字列を 外部プログラムに渡すマクロを作りたいのですが、このマクロの仕様というか そもそもこいつが何者なのかがさっぱりわかりません。 マクロのサンプルを見て出てきた文字列を片っ端からぐぐりつつやってみたのですが 外部プログラムの実行だけがどうしてもできません。 どなたかこいつが何者なのか、どうすれば外部プログラムを実行できるのか教えてください。
- 904 名前:855 mailto:sage [2007/06/23(土) 21:13:36 ]
- >>859
遅くなってすみません。キャスト外せませんか…ありがとう。 俺もそのような意味の話をネットのどこかで読んでキャストをつけたんですが、 でもV::beginってオーバーロードされてないですよね?何か勘違いしてるんでしょうか。
- 905 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 21:15:34 ]
- >>904
const の有無で2つある。
- 906 名前:855 mailto:sage [2007/06/23(土) 23:25:01 ]
- >>905
あ、ありがと。気づきませんでした。 &V::beginは関数ポインタの集合で、これをキャストなり代入なりする時に 型に合う関数ポインタが適当に選ばれるような感じでしょうか。 V::iterator (V::*b)() = &V::begin; V::const_iterator (V::*cb)() const = &V::begin; V::beginは前者、(const V)::beginは後者を選ぶようなルールがあれば話は早いと思うけど、残念。
- 907 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:46:52 ]
- 文字列中の " を \" に変える関数ってコレで良いんですかね?
std::basic_string<TCHAR>::iterator dquoteToESC(std::basic_string<TCHAR>& str) { typedef std::basic_string<TCHAR>::iterator iter; iter i = str.begin(); while ( i != str.end() ) { i = std::find(i, str.end(), _T('\"')); if ( i == str.end() ) break; i = str.insert(i, _T('\\')) +2; } return str.begin(); }
- 908 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 00:03:12 ]
- どうでもいいが関数名はEscDQuoteのほうがいいんじゃないの?
- 909 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 05:33:08 ]
- 今では vector のメモリ上での連続性は保証されてますけど、
昔は少なくとも規格上では保証されていませんでした。 で、実際のところ、メモリ上での連続性がない場合のある処理系って実在したんでしょうか? 実在しなければ、メモリ上での連続性を仮定したプログラムは 過去の処理系との互換性があるということで安心できるのですが。
|

|