2011-10-18 13 views
2

gccコンパイラを使用しています。私は頻繁に1つの#defineディレクティブの中に文のチャンクを書くことを含むコードに取り組んでいます。たとえば、次のようになります。gdbを使用して#defineステートメントを実行する方法

#include<stdio.h>  
#define DO_RR(x) do { \ 
for(i=0;i<x; i++) \ 
    printf("%d", i); \ 
}while(0); 

int main() { 
    int i=0; 
    DO_RR(5) 
    return 0; 
} 

ここでDO_RRのステートメントをシングルステップで実行できます。しかし、私が試してみると、コントロールはメインのDO_RRステートメントから次のステートメントに直接ジャンプし、シングルステップにはなりません。プリプロセッサブロック内でステッピングを達成するための方法はありますか?

+0

@OP:コードとして書式を設定するには、Ctrl-K(インデントを4つのスペースでインデントする)を選択します。 – sehe

+0

ヒントをお願いします。 – AnkurVj

答えて

3

#defineはプリプロセッサによって展開され、コードには存在しません。

+0

#defineを使用しないで、代わりにインライン関数を使用します。インラインvoid do_rr(int x){for(int i = 0; i tenfour

+0

@tenfourはインラインを使用することは素晴らしい考えです。しかし、私にとっては、#defineを使用する目的を打ち破っています(例からはわかりません)。 – AnkurVj

1

@ Angelomの答えを補うには、の回避策を使用してください。任意のコードを#defineから関数に移動すると、関数呼び出しをステップ実行することができます。

#define全体をインライン関数で置き換えるのが理想的です。

関連する問題