23-07-2015, 03:55 PM
I have an incomplete struct type, as per Directive 4.8. I declare types for pointers to the hidden struct:
typedef struct s_EthBuf *TEthBuf;
typedef struct s_EthBuf const *CTEthBuf;
The actual type, and an instance of the type, are declared in the translation unit that also defines the functions which operate on it.
Some functions need to modify the contents of the object, so they take a parameter of type TEthBuf. Some do not; they take a parameter of type CTEthBuf.
PC-Lint tells me that assigning a TEthBuf pointer to a variable of type CTEthBuf, or const TEthBuf, or passing it to a function which takes CTEthBuf as its parameter type, violates rule 11.2.
So: if I have struct s_EthBuf X then the following get the warning the 11.2 is violated:
CTEthBuf a = X;
const TEthBuf b = X;
foo(x)
- where foo is declared as void foo(CTEthBuf buf);
But it's OK to do
TEthBuf c = X;
But the type is the same, it's just that foo() doesn't change anything in the object.
Is PC-Lint correct here, when it believes that the types are different from the point of view of rule 11.2?
typedef struct s_EthBuf *TEthBuf;
typedef struct s_EthBuf const *CTEthBuf;
The actual type, and an instance of the type, are declared in the translation unit that also defines the functions which operate on it.
Some functions need to modify the contents of the object, so they take a parameter of type TEthBuf. Some do not; they take a parameter of type CTEthBuf.
PC-Lint tells me that assigning a TEthBuf pointer to a variable of type CTEthBuf, or const TEthBuf, or passing it to a function which takes CTEthBuf as its parameter type, violates rule 11.2.
So: if I have struct s_EthBuf X then the following get the warning the 11.2 is violated:
CTEthBuf a = X;
const TEthBuf b = X;
foo(x)
- where foo is declared as void foo(CTEthBuf buf);
But it's OK to do
TEthBuf c = X;
But the type is the same, it's just that foo() doesn't change anything in the object.
Is PC-Lint correct here, when it believes that the types are different from the point of view of rule 11.2?
<t></t>