是否有 C 编译器标志来检查函数修改后的输入参数?

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)

Jab*_*cky 6

你唯一想做的就是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.