0

assert() 関数は、エラーとエラーが発生した場所を出力できますが、関数も中止します。

中止せずに assert() 関数が必要です。エラー、エラーが発生したファイルの名前などを出力したいだけです。

C にそのような API またはソース スニペットはありますか?

ありがとう!

4

4 に答える 4

2

まず、アサートとは何かを見てみましょう

ドキュメントによると

assert() はマクロとして実装されています

そして、このような assert の実際の実装を見てみましょう

((x = 0) ? (void) (0) : __assert_fail ("x = 0", "t.c", 9, __PRETTY_FUNCTION__));

あなたの場合、以下の式は必要ないかもしれません

__assert_fail ("x = 0", "t.c", 9, __PRETTY_FUNCTION__))

今ここで私たちにできることは

このようなもの

#define MY_ASSERT(expr) \
    (expr ? (void) (0) : printf("something"));

int main(int argc, char *argv[]){
    MY_ASSERT(argc == 0)
}

お役に立てれば

于 2013-05-13T14:53:03.400 に答える
2

したがって、私がこれを正しく読んでいる場合、あなたの質問は基本的に「ファイル名と行番号を出力するにはどうすればよいですか?」です。

シンプル、使用

__FILE__, __LINE__

必要に応じて、次のような独自のマクロを作成します

#define MY_ASSERT(x) if(x) printf("Assertion! Line: %d File: %s \n", __LINE__, __FILE__)

他にも便利な定義済みマクロがあります。http://gcc.gnu.org/onlinedocs/gcc-3.1/cpp/Standard-Predefined-Macros.html

于 2013-05-13T15:31:02.327 に答える