Next: , Previous: C interface changes from NetCDF 2 to NetCDF 3, Up: C interface changes from NetCDF 2 to NetCDF 3


B.1 The NetCDF-3 C Interface

First, here's an example of C code that uses the netCDF-2 interface:

     void *bufferp;
     NF_TYPE xtype;
     ncvarinq(ncid, varid, ..., &xtype, ...
     ...
     /* allocate bufferp based on dimensions and type */
     ...
     if (ncvarget(ncid, varid, start, count, bufferp) == -1) {
         fprintf(stderr, "Can't get data, error code = %d\n",ncerr);
         /* deal with it */
         ...
     }
     switch(xtype) {
         /* deal with the data, according to type */
     ...
     case  NF_FLOAT:
         fanalyze((float *)bufferp);
         break;
     case NF_DOUBLE:
         danalyze((double *)bufferp);
         break;
     }

Here's how you might handle this with the new netCDF-3 C interface:

     /*
      * I want to use doubles for my analysis.
      */
     double dbuf[NDOUBLES];
     int status;
     
     /* So, I use the function that gets the data as doubles. */
     status = NF_GET_VARA_DOUBLE(NCID, varid, start, count, dbuf)
     if (status != NF_NOERR) {
        fprintf(stderr, "Can't get data: %s\n", NF_STRERROR(STATUS));
         /* deal with it */
         ...
     }
     danalyze(dbuf);

The example above illustrates changes in function names, data type conversion, and error handling, discussed in detail in the sections below.