私は、ほぼ同じ数の変数とポインターを含むファイルの範囲で、数千行を含むいくつかのプログラムを調査しています。変数に遭遇したときはいつでも、すべてのファイルでそれを逆方向にトレースして、それが単純なポインターか配列かを確認する必要があり、まったくの不便を引き起こします。そのポインタに関連付けられているメモリブロックが複数あるかどうかを通知する関数を作成する方法はありますか?または、そのための組み込み関数があり、バイナリの答えを与えるだけです.. !!!
3 に答える
1
簡単な答えはノーです。実行時でも、ポインタが配列を指しているかどうかを判断するのは困難です。
優れたIDEを使用している場合は、変数名にカーソルを合わせて定義を表示できる可能性があります。これにより、多くの場合、目的の答えが得られます。
私はEclipseを使用していますが、これは変数のタイプを教えてくれるのがかなり得意です。他の人は他のIDESを使用します。YMMV。
于 2012-08-29T09:49:34.803 に答える
0
相互参照ツールを試してみることができます。そのパーサーは、本格的なIDEと同じくらい、エラーによって妨げられないほど愚かである可能性があります。Source Navigatorは、私が数年前にプレイしたものです。
于 2012-08-29T10:15:16.120 に答える
0
このコードはあなたを助けるかもしれません。
#include <iostream>
using namespace std;
typedef char true_type;
typedef struct{ char one; char two;} false_type;
template <size_t N, typename T>
true_type test_func( T (&anarr)[N]);
false_type test_func( ... );
{
template <typename T>
bool is_an_array( const T& a) // const reference is important !!
if (sizeof (test_func(a)) == sizeof(true_type) ) return true;
else return false;
}
int main()
{
char testarr[10] = {'a','b','c','d','e','f','g','h','i','j'};
if (is_an_array(testarr) ) cout << "testarr is an array" << endl; else cout <<
"testarr is not an array" << endl;
char a_char = 'R';
if (is_an_array(a_char)) cout << "a_char is an array" << endl; else cout << "a_char is
not an array" << endl;
}
于 2012-08-31T06:02:28.113 に答える