清除标头中的字符串数组

问题描述 投票:0回答:1

代码有效:

#include <stdio.h>

char *arr[1] = {"Hello"};
int main()
{
    printf("%s", arr[0]);
    return 0;
}

但是,代码不起作用:

#include <stdio.h>

char *arr[1];
arr[0] = "Hello";
int main()
{
    printf("%s", arr[0]);
    return 0;
}

给出错误

警告:“arr”声明中的类型默认为“int”[-Wimplicit-int] main.c:4:1: 错误:‘arr’的类型冲突;有‘int[0]’

如何在函数之外进行赋值(即在头文件中)?

‘arr’声明中的类型默认为‘int’[-Wimplicit-int]

c compiler-errors compiler-construction clang clang-format
1个回答
0
投票

如何在函数之外进行赋值(即在头文件中)?

他们没有。可执行语句必须位于函数内部。

当编译器分析函数外部的代码时,它期望找到声明。所以它正在分析

arr[0] = "Hello";
,就好像它是一个声明一样。声明以某些说明符或限定符开头,例如
extern
表示存储类说明符,
int
表示类型说明符,或
const
表示类型限定符。

在 C 的古代历史中,

int
被视为默认类型,因此,当编译器找不到它期望的说明符或限定符之一时,它会假定
int
作为默认类型。这不再是现代 C 标准的一部分,因此编译器会警告您。

© www.soinside.com 2019 - 2024. All rights reserved.