
constについて教えてください。以下のコード
//------------------------------------------------------
#include <stdio.h>
#include <math.h>
const double RANGE = 12.;
const int MESH = 10;
//const int N = (int)(12.0*10); // (1) OK
//const int N = (int)(12.0*MESH); // (2) OK
const int N = (int)(RANGE*10); // (3) NG
//const int N = (int)rint(12.0*10); // (4) NG
double Array[N];
//------------------------------------------------------
をg++ 4.0.1でcompileすると
error: array bound is not an integer constant
とでてきます。(1)(2)ではエラーは出ません。
(1)(2)が良くて、(3)がだめな理由がわかりません。
どなたか教えてください。
No.1ベストアンサー
- 回答日時:
配列を宣言するときの要素数は, 整数型の定数式が必要です.
この「整数型の定数式」に「リテラル」や「整数型の const 変数」は使えるんですが, 「実数型の const 変数」を使うことはできません. そういうものです.
ISO だと 5.19 Constant expression のあたりに, この制限が書かれています.
ありがとうございます。浮動小数点リテラルをcastして得られるconst
intはOKで、浮動小数点const変数をcastしてえられるconst intはNGというのが理解できないなかったのですが、「そういうもの」なのですね。
おそらく、cast計算と配列領域確保のtimingの問題でそういう仕様になっているのでしょうか。
教えていただいた規格を確認してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で構造体の配列を持った構造...
-
配列の要素数に変数を入れたい...
-
C言語 ファイルの指定された行...
-
C言語の2次元配列 容量が大き...
-
C言語において、 配列要素をひ...
-
c言語 構造体
-
万年カレンダーについて。
-
Cのエラー
-
CStringからchar*への型変換に...
-
VBAのプログラムで、DIAG = 1# ...
-
C言語 配列の長さの上限
-
init関数の意味
-
c言語のポインタへの文字列入力...
-
プログラムによく出てくるst...
-
System.IO.Directory.GetFiles...
-
Integer変数をカラにしたいので...
-
char*を初期化したいのですが
-
new charとnew char[N]の違いは?
-
win32APIのHeapAlloc()の使い方...
-
C# DataTableの行をソートしてD...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
c言語
-
c言語プログラミング 等差数列...
-
define で 配列
-
配列の要素数に変数を入れたい...
-
C言語 ファイルの指定された行...
-
int i, int i[1];
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
C言語から質問です。
-
C#でのフィボナッチ数列
-
c言語 構造体
-
MFC - ダイアログボックスのPic...
-
構造体のextern方法
-
fclose()でセグメンテーション違反
-
C言語の課題が出たのですが自力...
-
2番目の最大値を求める
-
MFCのCArrayを使った二次元配列
-
const で宣言してるのに、値が...
-
配列の不正アクセスについて
おすすめ情報