[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/29 13:41 / Filesize : 252 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.47【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:14:51 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.46【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1198755167/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

610 名前:607 [2008/01/30(水) 00:34:08 ]
#include <iostream.h>
#include <iomanip.h>
const int Max_Length = 50 ; // 入力できる文字数の最大値
main()
{
char a[Max_Length] ; // 最初に入力する文字列
char b[Max_Length] ; // あとに入力する文字列
cout << "2つの自然数(最大50桁)を入力し、" << endl ;
cout << "その2数の大小を判定するプログラムです" << endl ;
cout << "数値を入力してください(最大50桁)" << endl ;
cout << "a>>" ;
cin.getline( a , Max_Length ) ;
cout << "b>>" ;
cin.getline( b , Max_Length ) ;
int a_count , b_count ; // 文字カウンタ
int i , j ;
a_count = 0 ;
b_count = 0 ;
i = 0 ;
j = 0 ;
// 文字数をカウントする
while(a[i] != '\n' && a[i] != '\0'){
a_count++ ;
i++ ;
}
while(b[j] != '\n' && b[j] != '\0'){
b_count++ ;
j++ ;
}

611 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:34:14 ]
iostreamマジ見にくい

612 名前:607 [2008/01/30(水) 00:35:02 ]
610が先で、607が続きです(><)

613 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:35:21 ]
入力できる文字数の最大値が 50 なら、バッファは 51 以上必要だね。

614 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:40:17 ]
std::lexical_compare使え

615 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:44:48 ]
すみません、元からこんなに早くリアクションがくれると思っていなかったので、
質問してすぐ風呂に入る予定だったため、
アップロードしてしばらく返事がなかったので、急いでお風呂に入っていたため、反応が遅れました。
申し訳ありません。

>>605-606
ありがとうございます!

セミコロンを直し、game.hをプロジェクトを追加し、gamemain.cppにgame.hをインクルードし、
gamemain.cppのクラス宣言部分をコメントアウトしてコンパイルしましたが、
結局
error C2146: 構文エラー : ';' が、識別子 'Type' の前に必要です。
がヘッダで吐かれてしまっています…
ここの部分を改善する、考えられるミスはありませんでしょうか…

616 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:50:24 ]
>>607
ヘッダファイルは <iostream.h> や <iomanip.h> ではなく
<iostream> や <iomanip> を使用する事が推奨されている。
cout とかが std::cout とかになっちゃうのが嫌なら、
この程度のプログラムなら using namespace std; と書いておけば std:: を略せる。
古いコンパイラなら知らんがね。

最大 50 文字なら、a のサイズは Max_Length + 1 にする。

cout の後 cin をする際には、cout を flush した方がいい。
cout << "a>>" << flush;
でないと、表示されない事もある。

getline は改行文字を格納しない。改行との比較は無駄。
50 文字以上入力したら次の cin.getline が失敗するのは無視してもいいのかな。宿題程度なら。
cin.clear(); して、改行まで読み飛ばすか構わず cin.getline するか・・・。

文字数カウントは strlen で可能だが、まだ習ってないのかな。
i と j という変数を作らなくても、直接 a_count と b_count 使えばいい。
while 文より for 文使った方がすっきりする。

i が 0 〜 a_count - 1 のループでは、
a_count - i は a_count 〜 1 になる。
これは意図する所ではないはず。
そして、a[Max_Length-i] != b[Max_Length-i] で何をやろうとしているのか分からないし、
このあたり全体的にちとおかしいと思う。
もうちょっとよく考えよう。

617 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:51:00 ]
>>615
TCHAR.h → tchar.h

618 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:51:46 ]
全角だろ。間違いない。全角なんだ。



619 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:53:17 ]
>>615
風呂の予定なんかどうでもいい。
しかも二回も風呂って書きやがって。
風呂はゆっくり入れ。


620 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:54:03 ]
インクルードガードがないのもすげー気になるが、
これだけのヘッダファイルだと BOOL は定義されてなくね?

621 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:54:56 ]
#include <cstddef>
#include <tchar.h>

622 名前:デフォルトの名無しさん [2008/01/30(水) 00:55:17 ]
>>616
たくさんありがとうございます!
考え直してもういっかい来ます

623 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:58:12 ]
>>615
とりあえず windows.h をインクルードしとけ。

624 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:58:29 ]
#include <iostream>

int main(void)
{
    const int max_str = 50 + 1;
    char str1[max_str], str2[max_str];    
    std::cout << "数値a入力>";
    std::cin >> str1;
    std::cout << "数値b入力>";
    std::cin >> str2;

    int len1, len2;
    for( len1 = 0; len1 < max_str; ++len1 ){
        if( str1[len1] == '\0' )
            break;
    }
    for( len2 = 0; len2 < max_str; ++len2 ){
        if( str2[len2] == '\0' )
            break;
    }


625 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:59:29 ]
    std::cout << "数値a 文字数:" << len1 << std::endl;
    std::cout << "数値b 文字数:" << len2 << std::endl;
    if( len1 == len2 ){
        std::cout << "文字数が一緒なので一桁ずつ判断します" << std::endl;        
        for( int i = 0; i < max_str; ++i ){
            if( str1[i] == str2[i] )
                continue;
            else if( str1[i] > str2[i] )
                std::cout << "a > b" << std::endl;
            else
                std::cout << "a < b" << std::endl;                
            break;
        }
    }else if( len1 > len2 )
        std::cout << "a > b" << std::endl;
    else
        std::cout << "a < b" << std::endl;

}

>>612
総書き直しすれば簡単

626 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:59:38 ]
>>617
提案ありがとうございます。すみません、でもとおりませんでした
>>618
エディタでトリプルチェックしましたが、やはり全角はありませんでした…
>>619
う…(苦笑)。すみません、お気遣いありがとうです。
>>620
windows.hをインクルードすれば定義されるでしょうか?
>>621
これは、BOOLのヘッダでしょうか。すみません、レスを先にして、試してきます。

627 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:00:18 ]
>>624
std::cin >> str1;

バッファオーバーフロー一直線!!!

628 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:02:38 ]
>>625
無茶苦茶やな・・・。



629 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:04:36 ]
>>621
試してみたら、エラーが13に減りました!
でも、
>>623
windos.hをインクルードしたら、もっと減りました(10)!

あとは、game.hに、using namespace std;をかけば、通りそうな雰囲気です。
ありがとうございました。
一応、最後に通るか確認してきますね。 

630 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:05:22 ]
>>629
ヘッダファイルで決して using しないと俺と約束してくれ。

631 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:08:29 ]
>>630
ごめんなさい。
gamemain.cppの方でした。
そして、通りました!皆さん本当にありがとうございました。そして、お騒がせしました!

ちなみに、ヘッダファイルでusingすると、どんな弊害がおきるのでしょう?
ちょっと考えれば分かるかもしれない気はするので、失礼な質問でしたらすみません。

あと、<TCHAR.h>より、<tchar.h>をお勧めになった理由もお教えいただけないでしょうか?

632 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:10:41 ]
本来 tchar.h という名前のファイルだから気になっただけ。

ヘッダで using して、色々インクルードしまくってると、
どこで using されているかさっぱり分からない状態になる。
using されては困る状況が現れた時、どの using が原因で困ってるか分からない。

633 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:12:45 ]
触っちゃダメよと言われてるヘッダファイルで using されてると泣くしかない。

634 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:16:32 ]
usingされているヘッダファイルをインクルードすると、
その名前空間がインクルードしたファイルにもusingされてしまう、ということでしょうか?

それとも、usingされてると、呼び出すときに、どの名前空間に所属しているのが分かりにくくなり、
数が膨大になったときに、エラーからたどりにくくなる、ということでしょうか?

…後者ですよね?

635 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:17:47 ]
両方。

636 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:21:19 ]
おあ、両方ですか。
前者も、ということになると、確かに本当にヘッダファイルでusingしてしまう(されてしまう)と、困ってしまいますね。
絶対にヘッダファイルでusingしないと、>>630さんと指きりしてお約束します。

ありがとうございました!

637 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:24:53 ]
namespace isolate { // isolate using directives and declarations
#include "hoge.h" // has using directives or declarations
}
using isolate::Hoge; // declared in hoge.h, and want to use in this source

と無理矢理隔離してみたり。

638 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:28:40 ]
なるほど



639 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:46:32 ]
STLとATLではどちらを覚えたほうがいいですか?

640 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:50:28 ]
STL: どの環境でも使える
ATL: Windows でしか使えない

641 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:54:30 ]
STL: 誰も使ってない
ATL: 90%くらいの環境で使える

642 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:57:43 ]
両方覚えろよ

643 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:04:22 ]
Windowsでプログラミングするなら両方。
そうじゃないならSTL。

644 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:39:23 ]
>>642に一票

645 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 05:46:40 ]
てゆーか二者択一するようなもんじゃないだろwwwww

646 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:02:37 ]
関数内でnewでchar型の動的確保をしたいんだけど、他の全ての関数でもその宣言した
char型のを使えるようにするにはどうすればいい?

647 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:06:10 ]
ごめん文章が変だったので追記
要するに関数内でnewで宣言したcharをグローバル変数みたいな感じで使いたい

648 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:07:01 ]
外部変数にchar*型のポインタ用意してそこに代入すれば?



649 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:16:06 ]
>>648
ああそうか。それでいけたw
staticみたいなので全範囲で使えるようになるのないかなって探してたよ
ありがとう

650 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:31:28 ]
C++で開発をする際、他言語以上にいつもクラス設計で悩まされます

何かそこらへんを専門的に取り扱ったおすすめの本はないでしょうか?

651 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:11:37 ]
ATLにSTLのコンテナ使う仕掛けが合ったよな。

652 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:12:25 ]
有った

653 名前:デフォルトの名無しさん [2008/01/30(水) 15:30:11 ]
C言語の質問です。コンパイラはgccです。

while(fgets(buffer,filesize,fp)){
flug=strstr(buffer,str);
if(flug!=NULL)puts(flug);
}

これでなぜ出力文字列が検索できないのでしょうか。
教えてくださいませんか?

私の頭の中ではまず改行までのファイルの一行をbufferに読み込む。
その後、bufferに格納されている文字列とstr(検索したい文字列)を比較して検索。
その返り値がflugに入るので、NULLポインタ以外(失敗)のflugは出力。
これで検索した値からの文字列が出力されると思っておりました。

654 名前:デフォルトの名無しさん [2008/01/30(水) 15:40:40 ]
cin.getline
って文字列を入力させるときに使うの?
普通に50桁の配列に数字を入れたいときって
cin >> a[50]
でいいのかな??

655 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:43:25 ]
きもい

656 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:49:42 ]
>>653
その部分だけじゃわからん。
つーか、その部分に問題は無い。

657 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:50:58 ]
>>653
・flugという変数名がキモい
・filesizeは本当にbufferが指すバッファのサイズ?

buffer, filesize, str の宣言や初期化などを詳しく開示しましょう。


658 名前:デフォルトの名無しさん [2008/01/30(水) 17:03:00 ]
>> 654
getlineの使い方(ファイルからの一行単位の読み込み)
string line;
ifstream ifs(filename);
while (getline(ifs, line)) {
lineには一行がはいってる。
}

> cin >> a[50];
これでは配列aの51番目の要素に代入してるだけでは?





659 名前:デフォルトの名無しさん [2008/01/30(水) 18:54:56 ]
>>658
やっぱりだめなんですね・・
cin>>a[50]
だと50桁も入力できないんです
ありがとうございました

660 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:19:46 ]
例外がcatch{}の中では生存していると仮定して
関数でnew | malloc した文字列を返して
デストラクタでdelete[] | freeするのはありですか?

661 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:29:05 ]
言っている意味が分からん。
コードで書いてくれ。

662 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:47:17 ]
エスパーな俺が翻訳すると、

catch内で作ったインスタンスでもデストラクタは呼ばれるのか?

ではないかと。

663 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:59:41 ]
ふつうにわかるだろ

664 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:03:22 ]
>>660
文字列クラス返せば?

665 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:42:46 ]
>>659
「桁」が何のことか分からん
配列のサイズのことならfor引数足してまわせばいいだけ
50桁の数値(10の50乗とか)を扱いたいなら普通には無理

666 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:43:28 ]
引数じゃなかった添え字だ

667 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:27:02 ]
自作クラス内に、CreateWindowというメソッドを作りたいんですが、エラーが出てしまいます。
エラーメッセージを見るとどこかで定義されてるようなんですが、
クラス内は独立した名前領域で、同じ関数名を使えるのではないのですか?
どなたか、回答をお願いします。

668 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:29:10 ]
>>667
windows.h から同名のマクロが include されているのかも知れない



669 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:32:01 ]
回答ありがとうございます。
windows.hは確かにインクルードしていました。
windows.hをインクルードしないわけにはいかないし、
CreateWindowという名称を使うのはあきらめたほうがよさそうですね。

670 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:10:41 ]
すみません、質問です.
C++言語のソースを読んでいて、疑問に感じた所があります。
struct Hoge{
unsigned Wakeup(void) const { return wakeup_time; }
Hoge(Container& container);
~Hoge();
private:
unsigned int hoge_time;
Container& fuga;
};

これ構造体ですよね?クラスみたいですけど・・・。
本を読んだりしてクラスと構造体はまったく別物と認識していたんですが。
混乱しています。

671 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:12:12 ]
C++では同じ
違いはデフォルトのアクセスがpublicな事

672 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:19:54 ]
>>670
実装は同じだけど、考え方としては区別したほうが良いんじゃないかな、

673 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:21:02 ]
>>671
もうちょい違うっしょ。

674 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:21:53 ]
メンバ変数を public にした方が何かと便利そうなのは構造体に、
そうでないのものはクラスに。
そう考えると、自然と構造体を使う状況は限定される。

675 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:23:22 ]
>>673
デフォルトで public 継承になる、というやつのことか?

676 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:30:12 ]
テンプレート絡み。

677 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:32:36 ]
最近どこかで目にした流れだな

678 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:36:09 ]
はい、STLスレの受け売りです。



679 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:38:38 ]
だからテンプレート引数の話とここの話とは
ちょっと違うんじゃないか、と。

680 名前:670 mailto:sage [2008/01/30(水) 23:43:33 ]
C++だと若干の違いはあるにせよ、classの代わりにstructと書くこともできるんですね。
ありがとうございました。

681 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:26:32 ]
newで多次元配列分の確保ってできない?
char *c;
int p=20;
c=new char[p][255];
こんな感じでしたいんだけどこれだとエラーでる

682 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:26:53 ]
char (*c)[255] = new char[p][255];

683 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:32:46 ]
>>682
ありがとうございます。原理はよく分からないけどできました
勉強してきます

684 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:36:46 ]
配列へのポインタを使ってる。
typedef 使うと多少分かりやすいかと。

typedef char BUF[255]; // BUF は char 型 255 要素の配列型
BUF *c = new BUF[p];

やっぱそうでもないか。

685 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:40:26 ]
つまり、char 型 255 要素の配列を p 個確保して、
c[i] とすると i 個目の配列が得られ、
c[i][j] とするとその配列の j 番目の要素にアクセスできる、と。

686 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 00:53:06 ]
>>684-685
分かり易くありがとうございます。何となく分かったような気がする
とりあえずもう一度newについて再勉強してきます

687 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 01:23:02 ]
newでもmallocでも同じだよ

688 名前:デフォルトの名無しさん [2008/01/31(木) 04:56:35 ]
template <int N, typename T>
struct array_str {
T array[N];
T &operator[](int n) {
return array[n];
}
};
int p = 20;
const int ssize = 255;
vector< array_str<ssize,char> > c(p);
として、以下のように使う方法は?
c[1][1];




689 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:15:04 ]
>>688 使い方を示しながら使い方を聞く意味がわからん。

690 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:19:04 ]
proxy classの話かな?

691 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:37:32 ]
this->template func<type>(arg); という書き方を見たんですが、
this->func<type>(arg); との違いを教えてください。

692 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:48:03 ]
>>691
template付けないとエラーでコンパイルできない場合がある。
.演算子、->演算子、::演算子の後ろにメンバテンプレート特殊化の
名前があり、それがテンプレート仮引数に属している場合がそう。

693 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 05:52:19 ]
>>691
テンプレート内で、 this の型がテンプレート引数に依存するとき、前者のように
template を明示しないと、コンパイラは this->func<type という部分を
(this->func) < (type) のような比較式と認識してしまう。

694 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:21:51 ]
"ab"でaとbの間に「"」を入れたい場合って「"a""b"」でおk?

695 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:23:28 ]
>>694
"a\"b"

696 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:23:51 ]
\"

697 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 08:29:43 ]
ありがとう。あぶなく間違って使うところだった

698 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:05:56 ]
まぁやったところで別に問題はないけどね、表示されないだけで



699 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:07:00 ]
確かになw

エスケープを "" で表現するのって、どこの文化だっけ?
どっかで見た気はするんだが。

700 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:46:44 ]
昔のBASICだろ

701 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 09:50:26 ]
だっけか。全然覚えてないや。

702 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 10:45:56 ]
試しにVBでやってみたら通ったわ。""

703 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 11:36:23 ]
演算子の優先度と結合規則がいまいちよく分かりません。
下の式を意味が変わらない範囲でカッコを外すとどうなりますか?

a = ( b *= ( ( c+d ) << e ) )

( ( * ( a[b] ) ) . c ) -> d

( a - ( ( b-c ) * d ) ) - e

( + ( ++a ) ) + ( ( b&c ) << ( d+e ) )

( ( ( * ( a.b ) ) . c ) -> d ) ++

あと下の4つは順序を明確にするためにカッコを付ける問題です。

a + b * c - d

a <<= b << c <= d

a = b &= c ==d

* a . b * c


参考になるサイトとかありますか?アドバイスお願いします。

704 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 11:39:36 ]
参考になるのは優先順位表
高低だけじゃなくて、右左にも注意

705 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:06:37 ]
テスト問題とか、与えられた式を最適化するようなプログラムを作っているのでなければ
素直にカッコをつけておくというのはどうだろうか。

前提無視ですね、すみません。

706 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:40:09 ]
言語仕様とはちょっと違うけど今でもDB2のSQLは文字列中の"を""で表すぞ

707 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 15:44:34 ]
>>703
そんなの、K&Rにかいてあるだろ

708 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:40:40 ]
ビット演算の優先順位をちゃんと把握してる人なんてそんないないわ。



709 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:09:03 ]
>>703
優先順位がわかりにくいときは括弧つければいいと思うよ。別にかっこ悪くないと思うよ
括弧減らしてもバグが増えたら意味が無いしな。


710 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:35:35 ]
VC++8使ってるんですけど、グローバルスコープの関数ってやっぱり
::CreateWindowEx とかスコープ演算子つけた方が良いのですか?
ネットにあるサンプルコードだと、両方見かけますが…






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<252KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef