Tatsuya Asano wrote:
> '定数'でなくてはならないと思いまして static かつ const で指定
> しました。これでは定数にはならないのでしょうか?
「書き換えできない変数」であって、「定数(イミディエイト値)」
ではないということでしょう。
厳密に言えば違いますが、高度に最適化してしまえば同じものと
言えるのかもしれません。
> ファイルが別れている場合、コンパイル時には static で const である
> クラス変数の値はわからないのでしょうか?
staticかどうかとか、constかどうかとは関係なく、コンパイル
対象となるソース(インクルードファイルを含む)中に値が記述され
てない以上、コンパイル時には解決しないでしょう。
> 最初のメールでも記述した通りに Cygwin に付属の g++ では
> コンパイル・実行は正常に行えましたが、これはコンパイラの
> 違いなのでしょうか?
コンパイル時にソース中で定義されていなかった値は、自動的に
外部定義という扱いになるんじゃないですか?
Cygwinのg++って、アセンブラソースを出力するプリプロセッサじゃ
ありませんでしたっけ? Intel(MASM)表記的に言えば ...
A0.ASM ____________________________________
PUBLIC __A0@MAX_BUFF_LEN
_A0@MAX_BUFF_LEN DD 256
A1.ASM ____________________________________
EXTERNDEF __A0@MAX_BUFF_LEN:DWORD
_A1@func PROC
PUSH EBP
MOV EBP,ESP
MOV EBX,OFFSET32 _A0@MAX_BUFF_LEN
MOV EBX,[EBX]
SUB ESP,EBX
NEG EBX
MOV EBX,[EBP-EBX] ; &buf
...
ってな感じのソースが出力されてるのでは?
「MAX_BUFF_LEN」が定数(イミディエイト値)なら ...
A0.ASM ____________________________________
PUBLIC __A0@MAX_BUFF_LEN
_A0@MAX_BUFF_LEN EQU 256
A1.ASM ____________________________________
EXTERNDEF __A0@MAX_BUFF_LEN:ABS
_A1@func PROC
PUSH EBP
MOV EBP,ESP
SUB ESP,_A0@MAX_BUFF_LEN
MOV EBX,[EBP-_A0@MAX_BUFF_LEN] ; &buf
...
ってな感じのソースが出力されるはずです。
+---------------------------------------------------------------------+
| From : Dairyo Gokan ( 後神 大陵 ) |
| Org. : Hitmark Computer Corporation ( ヒットマークコンピュータ ) |
| Adrs : 13256 Northup Way Suite 3, Bellevue WA 98005 |
| TEL:425-649-8808 FAX:425-649-9001 mailto:n...@can.bekkoame.ne.jp |
+---------------------------------------------------------------------+
> '定数'でなくてはならないと思いまして static かつ const で指定
> しました。これでは定数にはならないのでしょうか?
「書き換えできない変数」であって、「定数(イミディエイト値)」
ではないということでしょう。
厳密に言えば違いますが、高度に最適化してしまえば同じものと
言えるのかもしれません。
> ファイルが別れている場合、コンパイル時には static で const である
> クラス変数の値はわからないのでしょうか?
staticかどうかとか、constかどうかとは関係なく、コンパイル
対象となるソース(インクルードファイルを含む)中に値が記述され
てない以上、コンパイル時には解決しないでしょう。
> 最初のメールでも記述した通りに Cygwin に付属の g++ では
> コンパイル・実行は正常に行えましたが、これはコンパイラの
> 違いなのでしょうか?
コンパイル時にソース中で定義されていなかった値は、自動的に
外部定義という扱いになるんじゃないですか?
Cygwinのg++って、アセンブラソースを出力するプリプロセッサじゃ
ありませんでしたっけ? Intel(MASM)表記的に言えば ...
A0.ASM ____________________________________
PUBLIC __A0@MAX_BUFF_LEN
_A0@MAX_BUFF_LEN DD 256
A1.ASM ____________________________________
EXTERNDEF __A0@MAX_BUFF_LEN:DWORD
_A1@func PROC
PUSH EBP
MOV EBP,ESP
MOV EBX,OFFSET32 _A0@MAX_BUFF_LEN
MOV EBX,[EBX]
SUB ESP,EBX
NEG EBX
MOV EBX,[EBP-EBX] ; &buf
...
ってな感じのソースが出力されてるのでは?
「MAX_BUFF_LEN」が定数(イミディエイト値)なら ...
A0.ASM ____________________________________
PUBLIC __A0@MAX_BUFF_LEN
_A0@MAX_BUFF_LEN EQU 256
A1.ASM ____________________________________
EXTERNDEF __A0@MAX_BUFF_LEN:ABS
_A1@func PROC
PUSH EBP
MOV EBP,ESP
SUB ESP,_A0@MAX_BUFF_LEN
MOV EBX,[EBP-_A0@MAX_BUFF_LEN] ; &buf
...
ってな感じのソースが出力されるはずです。
+---------------------------------------------------------------------+
| From : Dairyo Gokan ( 後神 大陵 ) |
| Org. : Hitmark Computer Corporation ( ヒットマークコンピュータ ) |
| Adrs : 13256 Northup Way Suite 3, Bellevue WA 98005 |
| TEL:425-649-8808 FAX:425-649-9001 mailto:n...@can.bekkoame.ne.jp |
+---------------------------------------------------------------------+