Tips and Tricks

## 17 Tips and Tricks

This section presents some tips and tricks for using Coccinelle.

### 17.1 How to remove useless parentheses?

If you want to rewrite any access to a pointer value by a function call, you may use the following semantic patch.

1- a = *b 2+ a = readb(b)

However, if for some reason your code looks like `bar = *(foo)`, you will end up with `bar = readb((foo))` as the extra parentheses around foo are captured by the metavariable b.

In order to generate better output code, you can use the following semantic patch instead.

1- a = *(b) 2+ a = readb(b)

And rely on your standard.iso isomorphism file which should contain:

1Expression 2@ paren @ 3expression E; 4@@ 5 6 (E) => E

Coccinelle will then consider `bar = *(foo)` as equivalent to `bar = *foo` (but not the other way around) and capture both. Finally, it will generate `bar = readb(foo)` as expected.