I don't think you need a warning in this particular case, perhaps a better way would be for the compiler to enforce a rule that forbids access of function pointers of inner functions that referencing local variables of its parent function. For example, both: void *foo(int x) { int a; void foo2(int i) { // I want warning for the below code. if (i == a){} x += i; a += i; } foo2(a); return foo2; } and: void *bar; void foo(int x) { int a; void foo2(int i) { // I want warning for the below code. if (i == a){} x += i; a += i; } foo2(a); bar = foo2; } should return an error. On Sun, Nov 23, 2014 at 7:25 PM, xinglp <xinglp@xxxxxxxxx> wrote: > Such as this code > > void foo(int x) > { > int a; > void foo2(int i) > { > // I want warning for the below code. > if (i == a){} > x += i; > a += i; > } > foo2(a); > } > > Because I use nested function for better code orgnization and callback. Thanks.