概要 anchor.png Edit

D言語のCTFE(コンパイル時関数呼び出し)機能を使うと、コンパイル時に関数を実行して結果を表示することが出来ます。

Page Top

ポイント anchor.png Edit

Everything is expanded.Everything is shortened.
1
 
pragma(msg, func(args));

と書く事で、CTFE可能な(CTFEableな)関数をコンパイル時に実行して表示させることが出来ます。

Page Top

CTFEableな関数の条件 anchor.png Edit

  • 関数のソースコードがある(extern宣言だけがある関数はCTFEableでない)
  • 関数の引数を、 C形式の可変個引数にしていない → Issue 6908
  • synchronized関数でない
  • 関数内部に以下が存在しない
    • 例外のthrow(追記:例外をthrowする関数はCTFEableになりました)
    • クラスの使用(追記:クラスを使用する関数はCTFEableになりました)
    • グローバルな変数への参照
    • ローカルstatic変数への参照
    • delete式 → Issue 6907
    • typeid式 → Issue 7147
    • CTFEableでない関数の呼び出し
    • プラットフォーム間で互換性のないキャスト(例えばint[]からfloat[]へのキャスト、エンディアンに依存するキャストなど)
    • asm文
    • TemplateMixin文
    • synchronized文
    • throw文(throw文はCTFEableになりました)
    • with文(with文はCTFEableになりました)
    • scope文(scope文はCTFEableになりました)
    • try-catch-finally文(try-catch-finally文はCTFEableになりました)
    • ラベル付きbreak,continue文(ラベル付きbreak,continue文はCTFEableになりました)
Page Top

サンプルコード anchor.png Edit

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-
!
 
 
-
|
!
 
 
 
 
 
 
//main.d
 
import std.conv;
 
string hoge() {
    return "hello";
}
 
pragma(msg, hoge());
pragma(msg, to!int("6"));
pragma(msg, to!float("3.141592"));
 
void main(){}
Page Top

コンパイル結果 anchor.png Edit

1
2
3
4
~~~dmd.exe main.d
hello
6
3.141592
Page Top

補足 anchor.png Edit

CTFEには少なくないバグがあります。詳しくはここを参照してください。

Page Top

投票とコメント anchor.png Edit

Choices Vote
大変参考になった5  
参考になった0  
あまり参考にならなかった0  
まったく参考にならなかった0  

No comment. コメント​/SampleCodes​/D言語文法​/コンパイル時実行関連​/1Edit

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1832, today: 1, yesterday: 1
Princeps date: 2012-03-31 (Sat) 00:28:15
Last-modified: 2012-03-31 (Sat) 00:28:15 (JST) (3530d) by ゲスト
メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu