C++第3版 4章 練習問題解答

目次へ戻る

4.1

VC++では問題無い。g++ だと、ヘッダ名と namespace に問題があったので、次のようにした。
#include <iostream.h>
int main()
{
    cout << "Hello, world!\n";
}
念のため、VC++ の手順を示す。
  1. VC++5.0 を起動。
  2. ファイルメニューの新規作成で「プロジェクト」タブの 「Win32 Console Application」を選択し、適当なプロジェクト名を指定し OK を押す。
  3. ファイルを新規作成し、プログラムをタイプし保存する。 Ctrl+F7 でプロジェクトに追加しコンパイル。(その後 F7)
  4. Ctrl+F5 で実行。

4.2

面倒だけど書こう。typedef と namespace の宣言のみの書き方は判らない。
宣言のみ宣言及び定義
extern char ch;
extern string s;
extern int count
extern const double pi;
extern int error_number;
extern char* name;
extern char* season[];
struct Date;
int day(Date* p);
double sqrt (double);
template T abs(T a);
なし
struct User;
enum Beer;
なし
char ch;
string s;
int count;
const double pi = 3.14;
int error_number;
char* name = "Njal";
char* season[] = {"spring","" /*...*/};
struct Date {/*...*/};
int day(Date* p){/*...*/ return 0;}
double sqrt (double){/*...*/ return 0;}
template T abs(T a){/*...*/ return a;}
typedef complex Point;
struct User {/*...*/};
enum Beer {Carlsberg,Tuborg,Thor};
namespace NS {int a;}

4.3

__int64 は VC++ 固有の仕様。sizeof は( )を必要としないが見易さから( )を付けている。
#include <iostream>
using namespace std;

enum Test {X,Y,Z};

int main()
{
    cout << sizeof (char) << endl;
    cout << sizeof (int) << endl;
    cout << sizeof (long double) << endl;
    cout << sizeof (__int64) << endl;
    cout << sizeof (char*) << endl;
    cout << sizeof (__int64*) << endl;
    cout << sizeof (Test) << endl;
}

4.4

#include <cstdio>

int main()
{
    for (int i=0x20;i<0x7f;++i)
        printf("%3d [%c] %2x  %s",i,i,i,(i+5)%6?"":"\n");
    printf("\n");
}

4.5

#include <cstdio>
#include <limits>
using namespace std;

#define PRINTLIMITI(S,T) printf("%14s : min %12d max %12u\n",S, \
    numeric_limits<T>::min(),numeric_limits<T>::max())
#define PRINTLIMITD(S,T) printf("%14s : min %11g max %12g\n",S, \
    numeric_limits<T>::min(),numeric_limits<T>::max())

int main()
{
    PRINTLIMITI("char",char);
    PRINTLIMITI("short",short);
    PRINTLIMITI("int",int);
    PRINTLIMITI("long",long);
    PRINTLIMITD("float",float);
    PRINTLIMITD("double",double);
    PRINTLIMITD("long double",long double);
    PRINTLIMITI("unsigned char",unsigned char);
    PRINTLIMITI("unsigned short",unsigned short);
    PRINTLIMITI("unsigned int",unsigned int);
    PRINTLIMITI("unsigned long",unsigned long);
}

4.6

局所名、外部名ともに256文字以上は無視される。 (但し、ヘルプには 247 文字までとなっている) 使える文字の制限はないと思う。 (すなわち、大文字と小文字のアルファベットとアンダースコアと数字。数字は先頭以外)

4.7

この結果は、VC++ の場合。他の処理系では異なることも考えられる。
目次次章