nda*_*ess 0 c constants compiler-flags
我想知道,C 编译器(即 GCC 或 GHS)是否有一个标志来检查输入参数是否被修改?
我的意思是,如果我有以下功能,x并且y如果我不将const它们添加到它们中,则可能会在该功能内进行修改(就像现在发生的那样)。所以我想知道编译器是否可以检测到这种情况,以及是否存在这样做的标志。
int16_t myFunc(int16_t* x ,int16_t* y, bool* e)
{
int16_t z = 0;
z = *x + *y;
*x = 16; // this is wrong on purpose and I would like to detect it
if ( z < 0)
{
*e = true;
}
return z;
}
Run Code Online (Sandbox Code Playgroud)
你唯一想做的就是const像这样使用:
int16_t myFunc(const int16_t* x ,int16_t* y, bool* e)
{
...
*x = 42; // compiler error here
...
}
Run Code Online (Sandbox Code Playgroud)
在这里,编译器将发出诊断信息,例如assignment of read-only location '*x'.
这就是const关键字的用途,这就是您要查找的“标志”。
您应该const尽可能使用指针参数。如果您知道参数指向的对象不会被修改,请使用const.