静态存储类型的变量不应该被函数的返回值初始化,因为它们不被认为是常量?根据这个参数,下面的声明在c中是否有效?它编译时没有错误或警告,输出与预期一致。
#include <stdio.h>
#include <string.h>
int main ()
{
int arr[2]={strcmp("a","a"),strcmp("3","5")};
printf("%d,%d",arr[0],arr[1]);
}
Result
0,-1
静态变量不能用函数的返回值初始化的说法是正确的,但在您的示例中,arr不是静态变量,而是存储在堆栈中的变量,因此这段代码是完全有效的。
另一方面,写:
static int arr[2]={strcmp("a","a"),strcmp("3","5")};