C中的错误处理

时间:2014-05-05 10:29:50

标签: c error-handling

你好,谢谢你停下来。

通过使用专有代码找到了解决方案。有关使用过的代码,请参见 感谢大家的投入和帮助!

我对C编程很新(意思是我编写了一些非常基本的东西)。目前,我正在用C语言编写脚本。我尝试过搜索网站,但似乎没有任何示例适用于我的情况,或者根本不起作用。 它的作用基本上是打开一个文件(或一批多个文件),告诉主程序绘制所选字符串的图形(open_curve()是程序特定的函数)。

现在我的问题是其中一个字符串(比如下面代码中的string2)并不总是存在。当它丢失时,脚本会产生错误并退出。如何阻止这种情况发生? VBA有很多人厌恶的选择,但我认为它在这种情况下非常有用:On Error resume next。我知道它可能会丢失,在这种情况下它并不重要。当它在那里我需要它。当它不是,太糟糕......所以如果没有错误弹出并且值丢失,那就完全没问题了。 问题是,如何在C中获得类似的功能?

#define NMAX 10 // max. Anzahl Dateien
string n[NMAX]; // Global wegen Stack!

void main(void)
{
string *q;
int i,nmax=NMAX;
nmax=GetOpenFileName(n, nmax, "Daten-Dateien (*.DAT)", "*.DAT");



    for (i=0, q=n; i<nmax; i++,q++)
    {


            ql.open_file(.file=*q);
            close_curve();
            open_curve(.name="\"String1\"");
            open_curve(.name="\"String2\"");
            open_curve(.name="\"String3\"");


            printf("File %2d: %s\n",i,*q);

    }   
getch();
}

原型:

int [ql.]open_curve(.name = string[, .no = int,

                     .color = int, .lthick = int,

                     .linetype = int,

                     .marker = int, .drawall = int,

                     .markersize = float,

                     .bars = int, .ynull = float,

                     .ymin = float, .ymax = float,

                     .xmin = float, .xmax = float,

                     .yaxis = int,  .xaxis = int,

                     .axis = int,  .colsrc = int,

                     .xsignal = string, .csignal = string,

                     .index = string, 

                     .xfrom = float, .xuntil = float,

                     .usemarker = int]);

守则,解决了我的问题: 现在,如果找不到,则返回空。

for (i=0, q=n; i<nmax; i++,q++)
        {


                ql.open_file(.file=*q);
                close_curve();
                open_curve(.name="\"String1\"");
Warninglevel = 2;
            Errorlevel3 = 3; // Fehler nicht melden, weitermachen
                err = open_curve(.name="\"String2\"");
            Errorlevel3 = 0;
            Warninglevel = 0;               
                open_curve(.name="\"String3\"");


                printf("File %2d: %s\n",i,*q);

        }   
    getch();
    }

警告和错误级别说明如下:

extern int Warninglevel  - Warnings will...

                            0 - Produce an Error box
                            1 - be ignored
                            2 - be ignored

 extern int Errorlevel1   - Errors will...

                       0 - Produce an Error box (popup) and cancel script
                       1 - Produce an Error box and continue script                       2 - ignored and cancel script.

1 个答案:

答案 0 :(得分:0)

C中没有任何内容与On Error Resume Next对应。

可以使用信号处理来捕获错误,但它不是在C中进行错误检查的首选方法。

相反,最佳做法是进行防御性编码。在使用之前,应检查允许NULL的任何变量。

在您的情况下,代码可能如下所示:

char *name;   // In reality

name = get_graph_name();  // Generate a name somehow, or null.

if (name != NULL) {    // Only open the curve if we have a name.
    open_curve(name);
}