Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Rule 11.1 and NULL defined as ((void*) 0)
Please consider the following test program:

#define NULL ((void*) 0)

struct super_block;
struct inode;

typedef int (*find_inode_t)(struct inode *, unsigned long, void *);

extern struct inode * iget4_locked(struct super_block *, unsigned long,
                   find_inode_t, void *);

static inline struct inode *iget(struct super_block *sb, unsigned long ino)
    struct inode *inode = iget4_locked(sb, ino, NULL, NULL);
    return inode;

My reading of rule 11.1 is that NULL (so defined, which is quite common) cannot be passed that way to iget4_locked(). However, since I see zillions of violations of this kind, I am caught by the doubt.
Many thanks,

A NULL pointer constant (however defined) can be converted to, assigned to, or compared for equality to a function pointer. Note that this exception to the rule is discussed in the normative text above Rule 11.1.

Rule 11.1 will be amended in future to clarify this point.

Tracking ID: 18
Posted by and on behalf of the MISRA C Working Group

Forum Jump:

Users browsing this thread: 1 Guest(s)