C-基本语法在向前声明“警告:数据定义没有类型或存储类”时意外失败]]

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

我在编译一段代码时遇到了一些意外的问题,经过一段时间的努力,我认为我需要帮助。这减少到很小的最小示例。我感到非常迷茫,因为我不是C语言,计算机科学和一般语言的初学者,而且对我来说,这不仅行之有效,而且听起来也很基础。

#include <string.h>
char* tamere;
tamere=strdup("flute");

没什么。 strdup

返回指向char的指针。 tamere被声明为指向[[char的指针。当编译器看到声明时,可以自由地在堆栈上分配tamere的位置。然后,将其设置为后一行定义中的[[strdup的结果。Gcc输出但是此基本代码无法在我的debian机器上编译:

b.c:3:1: warning: data definition has no type or storage class tamere=strdup("flute"); b.c:3:1: warning: type defaults to ‘int’ in declaration of ‘tamere’ [-Wimplicit-int] b.c:3:1: error: conflicting types for ‘tamere’ b.c:2:7: note: previous declaration of ‘tamere’ was here char* tamere; ^~~~~~ b.c:3:8: warning: initialization makes integer from pointer without a cast [-Wint-conversion] tamere=strdup("flute"); ^~~~~~ b.c:3:8: error: initializer element is not constant

所以,问题是为什么?为什么这段C代码无法正常工作。为什么关于编译器看到声明并能够执行的理由是错误的?最简单的方法是什么?

Gcc版本

gcc --version gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

感谢您的帮助:)

我在编译一段代码时遇到了一些意外的问题,经过一段时间的努力,我认为我需要帮助。这减少到很小的最小示例。我真的很迷失,因为...
c declaration forward-declaration statements entry-point
2个回答
1
投票
常量表达式

1
投票
© www.soinside.com 2019 - 2024. All rights reserved.