2012-04-29 6 views
0

私は非常に基本的なプログラムを書きましたが、その動作を理解できませんでした。C++でword octとhexをマクロとして定義していますか?

 # include<stdio.h> 
    # include<iostream.h> 
    # include<conio.h> 

    using namespace std; 
    int main() 
    { 
     cout << "50" << oct <<"50" << hex <<"50" << abc << "50";// error abc not defined 
     cout << "50" << oct <<"50" << hex <<"50"; // No error output 505050 
     getch(); 
    } 

は私が二cout文のエラーを取得しない理由がある含まれているファイルのいずれかでいくつかのマクロとして定義されocthexていますか?

+4

http://www.cplusplus.com/reference/iostream/manipulators/hex/ –

答えて

6

octhexABC標準ヘッダのいずれかで定義されたシンボルではないのに対し、<ios>で定義さstream manipulatorsあります。したがって、プログラムで自分で宣言していないので、エラーはabcにしか表示されません。

それ以外は、<iostream.h>という非常に古いコンパイラを使用しているようです。私はあなたのコンパイラ(またはより良いコンパイラに切り替える)を更新し、<iostream.h>の代わりに<iostream>を使用することをお勧めします。これは標準ヘッダではありません。

+0

これらの機能は、実際には「」ではなく「」の一部です。 –

+0

@BoPersson:ええ、私は答えを投稿した後に気づいた。これはC++ 11の変更ですか? – Nawaz

+0

いいえ、彼らはずっとそこにいました。 –

1

hexおよびoctは、std名前空間に含まれるマニピュレータです。 フルネームは実際にはstd::hexstd::octです。 abcというマニピュレータはありません。そのため、エラーが発生します。 www.cplusplus.com

さらに詳しい情報:std::hexstd::oct

3

あなたはここで大きなミスをしています。ソースコードを読んで実験をするだけで、C++を学ぶべきではありません。これはあなたをどこにも導かない道です。

C++を学ぼうとする唯一の方法は、a good bookを入手してカバーすることです。

C++は多くの場所で非論理的であり、どのように賢明であっても、C++のすべてを正しく推測する方法はありません。 C++言語の設計には、後方互換性の理由から削除できない真のミスが含まれている場合があるため、実際にはスマートすぎることは推測の問題となります。あなたがスマートならば、あなたの推測は論理的で...死んでも間違っています。

C++のいくつかの明確かつ合理的な行を書くことができますし、適切なものを効率的に作成することができますが、さらに論理的で見栄えの良いいくつかの行を書くことも可能です恐ろしいパフォーマンスや未定義の動作をします。

未定義の振る舞いは、多くの場合に間違いを犯すと、コンパイラとランタイムは不平を言うことがなく、しばらくしてようやく動作が始まることを意味します。未定義の振る舞いは、実験がC++を学ぶための良い道ではない理由です。

+0

一般的に良い投稿ですが、質問には答えません。答えの問題に対処する最初の2行は、より良いでしょう。 – Nawaz

+0

これは実際の問題に対処していると思います。なぜ 'abc'が認識されないのか、' hex 'は実際にはIMOが役に立たないということを説明します。なぜなら、 'namespace std'を使うことを理解し、IMOのC++出力フォーマット。 OPはたぶんナンセンスの間違った合理化を覚えて、後でもっと苦しむでしょう。 – 6502

関連する問題