@niftyレンタル掲示板

掲示板の使い方

関数外での#if (マクロ)の認識について

  • d_n
  • 2012/04/05 16:56

はじめまして。
最近使用し始めたものです。
関数外での#if (マクロ)の認識についてご教授いただけますでしょうか。
下記のような例でステップ数をカウントしようとしておりますが、#ifで囲っている箇所は常に有効、
#else側は常に無効としてカウントされているようですが、
意図通りにカウントする方法はありますでしょうか。


#define AAA 1
#define BBB 0

#if AAA
void func1(void) → 有効
{
・・・
}
#else
int func1(void) → 無効
{
・・・
}
#endif


#if BBB
void func2(void) → 無効
{
・・・
}
#else
int func2(void) → 有効
{
・・・
}
#endif

-----ciaosyst.dat-----
[PREPROCT]
0

-----ciao_c.edt-----
[PREPRO]
2
3,0,1,1,0,0
#if
#elif
#else
#endif
1,1,0,0
#else
#endif
[MACRO]
1
AAA

  • コメント

コメント

    • 1.管理者
    • 投稿者のメール
    • 投稿者のホームページ
    • 2012/04/06 00:09

    d_nさま

    はじめまして。
    かぞえチャオ!をご利用いただき、ありがとうございます。
    ご質問の件、回答いたします。

    かぞえチャオ!Ver.1.53以降であれば、ciao_c.edtの[PREPRO]セクション、[MACRO]セクションを下記のようにすることで、ステップの有効/無効が指定できます。

    [PREPRO]
    2
    3,0,2,2,0,0
    #if
    #elif
    #else
    #endif
    1,1,0,0
    #else
    #endif
    [MACRO]
    1
    AAA,1

    マクロAAA=1と定義することで、#if AAAが有効になります。
    マクロBBBは、定義してないため、#if BBBは無効になります。

    この設定で、一度お試しください。

    • 削除
    • コメント
    • 2.d_n
    • 2012/04/06 09:34

    >>1
    早速のご回答ありがとうございます。
    試してみましたが、期待通りの結果となりませんでした。
    上記例の期待結果としては、
    void func1()、int func2()は有効としてステップ数カウント、
    int func1()、void func2()は無効としてステップ数0
    となることですが、
    ご教授いただいた設定でも
    void func1()、void func2()が有効、
    int func1()、int func2()が無効となりました。

    使用しているツールはかぞえチャオ! Ver.1.61β7です。

    • 削除
    • コメント
    • 3.管理者
    • 投稿者のメール
    • 投稿者のホームページ
    • 2012/04/06 22:57

    >>2
    d_nさま

    調査しますので、ご利用の定義ファイル(ciao_c.edt)とシステムデータファイル(ciaosyst.dat)を、メールにて送っていただけますでしょうか?

    以上、お手数をお掛けして申し訳ございませんが、よろしくお願いいたします。

    • 削除
    • コメント
    • 4.d_n
    • 2012/04/10 09:24

    >>3
    メールでの問い合わせに対し、ご回答ありがとうございました。
    送付いただいた定義ファイルにて、ほとんど意図通りカウントされましたが、もう一点だけご教授ください。

    void func1()とint func2()を有効と認識し、void func1()の方は
    実ステップ数も正しく算出されますが、int func2()は実ステップ数が
    1行多くカウントされます。
    (#endifの行まで有効となっている?)
    これについて回避方法はございますでしょうか。

    • 削除
    • コメント
    • 5.管理者
    • 投稿者のメール
    • 投稿者のホームページ
    • 2012/04/10 23:03

    >>4
    d_nさま

    お問い合わせの件、回答いたします。

    プリプロセッサ定義を下記のようにしてください。
    改行コード前に半角スペースが入っていれば除いてください。

    [PREPRO]
    3
    3,0,2,2,0,0
    #if
    #elif
    #else
    #endif
    1,1,0,0
    #else
    #endif
    0,1,0
    #endif

    この設定で、一度お試しください。

    以上、よろしくお願いいたします。

    • 削除
    • コメント
    • 6.d_n
    • 2012/04/11 09:18

    >>5
    ご教授いただいた設定ですべて意図通りとなりました。
    ありがとうございました。

    • 削除
    • コメント
    • 7.d_n
    • 2012/04/12 09:55

    >>6
    度々すみませんが、追加でもう1点だけ質問(要望)させてください。
    現状、マクロの登録数は上限255個までとなっておりますが、
    上限を増やすことは可能でしょうか。開発に使用している
    マクロが数千オーダーであるため、増やしていただけると
    ありがたいです。

    • 削除
    • コメント
    • 8.管理者
    • 投稿者のメール
    • 投稿者のホームページ
    • 2012/04/13 00:31

    >>7
    d_nさま

    お問合せの件、回答いたします。

    現状、マクロの登録数の上限は、256固定となっています。
    次回以降のバージョンアップで、マクロの登録数の上限を10000個程度に拡張したいと思います。

    • 削除
    • コメント
    • 9.d_n
    • 2012/04/20 15:36

    >>8
    最新版でのマクロ登録数拡張ご対応ありがとうございました。

    • 削除
    • コメント

タグ(キーワード)