【问题标题】:Unexplained errors due to fopen() and FILE由于 fopen() 和 FILE 导致的无法解释的错误
【发布时间】:2013-04-24 14:03:48
【问题描述】:

我无法理解由于以下代码而出现的错误。我正在尝试使用fopen() 打开一个文件,但这些错误对我来说毫无意义。所以请解释一下整个事情。

10 - FILE * THE_FILE_YOU_READ;
11 - THE_FILE_YOU_READ = fopen("num.txt","r");

这两行单独产生几个警告和错误,如下:

11 - warning: data definition has no type or storage class [enabled by default]
11 - error: conflicting types for 'THE_FILE_YOU_READ'
10 - note: previous declaration of 'THE_FILE_YOU_READ' was here
11 - warning: initialization makes integer from pointer without a cast [enabled by default]
11 - error: initializer element is not constant

如果它完全相关,我正在使用 Code::Blocks。我没有在程序的其他任何地方声明这个变量 `THE_FILE_YOU_READ。有什么想法,或者这只是我的愚蠢疏忽?

【问题讨论】:

    标签: c file fopen stdio


    【解决方案1】:

    您已在文件范围内的任何函数之外编写此代码。那是无效的。语句只能出现在函数中。在函数之外,编译器试图将第二行解释为声明/定义,隐式类型为int

    【讨论】:

    • @R 你说的对.我删除了我的答案,因为我的前提是错误的。
    • OP 没有这么说;我是从编译器以这种方式解释第 11 行这一事实推断出来的,这在函数级别不会发生。
    • 第11行是什么意思?Initializer element not constant是什么意思?
    • 如果它将等号的右侧解释为初始化器,这意味着它将左侧解释为对象的声明/定义。在语句上下文中,等号将是一个运算符,而不是初始化构造的一部分。
    • 顺便说一句,我想说这是编译器继续支持(默认情况下)几十年前从语言中删除的已弃用 K&R 结构的有害原因。如果不是因为这个晦涩难懂的implicit-int 声明规则,编译器可能会给出一条信息更丰富的错误消息,表明它遇到了函数之外的语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多