// you’re reading...

C / C++ / Objective-C

C Preprocessor Life Saver(s) – Part 1

More and more when I write code, I’m looking for optimizations, short cuts and less typing. This can mean a careful balance between maintainable code and author convenience. Here’s an example of something I use in every program I write.

I use the preprocessor to define debug modes for myself to produce debug output under certain conditions. Here I define DEBUG_ON to produce a boolean value that can be tested throughout my program.

ANSI C Version

#define DEBUG_ON 1
#define DEBUG_F_L if (DEBUG_ON) printf("%s() \t\tLine: %4d\n", __FUNCTION__, __LINE__);

Objective C Version

#define DEBUG_ON 1
#define DEBUG_F_L if (DEBUG_ON) NSLog(@"%s() \t\tLine: %4d\n", __FUNCTION__, __LINE__);

This can save a lot of redundant typing/pasting and reduces code eyestrain.
e.g. This…

    static NSString *cellIdentifier = @"accessCell";
    DEBUG_F_L
    Accounts *account               = [self.arrAccounts objectAtIndex:indexPath.row];
    LocationCollectionViewCell3 *cell
                                    = (LocationCollectionViewCell3 *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    if (Nil == cell) {
          DEBUG_F_L
          cell = [[LocationCollectionViewCell3 alloc] init];
    }
    
    cell.orgNameLabel.text          = account.org_display_name;
    cell.locationNameLabel.text     = account.location_name;
    cell.locationCityLabel.text     = account.location_city;
    cell.actionQtyLabel.text        = @"";
    [cell.backgroundImage setImageWithURL:[NSURL URLWithString:account.org_login_logo_url]];
    DEBUG_F_L

vs. this…

    static NSString *cellIdentifier = @"accessCell";
    // NSLog(@"%s \t\tline: %d", __FUNCTION__, __LINE__);
    Accounts *account               = [self.arrAccounts objectAtIndex:indexPath.row];
    LocationCollectionViewCell3 *cell
                                    = (LocationCollectionViewCell3 *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    if (Nil == cell) {
          // NSLog(@"%s \t\tline: %d", __FUNCTION__, __LINE__);
          cell = [[LocationCollectionViewCell3 alloc] init];
    }
    
    cell.orgNameLabel.text          = account.org_display_name;
    cell.locationNameLabel.text     = account.location_name;
    cell.locationCityLabel.text     = account.location_city;
    cell.actionQtyLabel.text        = @"";
    [cell.backgroundImage setImageWithURL:[NSURL URLWithString:account.org_login_logo_url]];
    // NSLog(@"%s \t\tline: %d", __FUNCTION__, __LINE__);

Discussion

No comments for “C Preprocessor Life Saver(s) – Part 1”

Post a comment

Help support my site and buy a domain name at http://domainsemailhosting.com/