cc中的cc编译器问题

时间:2014-01-30 11:51:40

标签: c unix cc

我正在尝试编写一个简单的代码来用C语言构造一个树。以下是我的代码段。

#include<stdio.h>

struct node
{
  int data;
  struct node *left;
  struct node *right;
};

int main()
{
  struct node *root = newNode(5);
  //struct node *root = NULL; working piece
  //newNode(&root,5); working piece
  if(root == NULL)
  {
    printf("No root\n");
    return 0;
  }
  //root->left = newNode(4);
  //root->right = newNode(3);
  //root->left->left = newNode(2);
  //root->right->right = newNode(1);

  return 0;
}

struct node* newNode(int data)
{
  struct node *temp;
  temp = (struct node*) malloc(sizeof(struct node));
  temp->data = data;
  temp->left = NULL;
  temp->right = NULL;

  return(temp);
}

当我尝试返回结构节点地址时,编译器会给出错误

"rightNode.c", line 29: identifier redeclared: newNode
        current : function(int) returning pointer to struct node {int data, pointer to struct node {..} left, pointer to struct node {..} right}
        previous: function() returning int : "rightNode.c", line 12

但是当我评论这个struct node* newNode(int data)并试图通过将结构的地址传递给下面的函数来定义一个返回int的函数时,它并没有向我显示任何错误。

int newNode(struct node **root,int data)
{
  printf("Inside New Node\n");
  return 0;
}

据我所知,在C中合法地将结构的地址返回给调用函数。

这与编译器有关。

我在unix环境中使用cc编译器

type cc
cc is a tracked alias for /apps/pcfn/pkgs/studio10/SUNWspro/bin/cc

以下是我用来编译cc rightNode.c

的命令

任何帮助将不胜感激......

5 个答案:

答案 0 :(得分:1)

将此struct node* newNode(int data)放在代码上方并添加stdlib.h

如果要在声明之前使用函数,则需要函数原型。 malloc也在stdlib.h中定义。

答案 1 :(得分:1)

您需要在使用之前声明newNode原型。

// somewhere after struct node definition and before first use
struct node* newNode(int);

您还需要包含stdlib.h才能获得malloc

答案 2 :(得分:1)

当您调用struct node *root = newNode(5);时,没有可见的函数原型,因此编译器会感到困惑。

答案 3 :(得分:0)

当编译器找不到函数声明时,它假定存在这样的函数,但返回int。在struct node* newNode(int data);中致电newNode(...)之前声明main

答案 4 :(得分:0)

在旧版本的C中,您无需在使用之前声明函数。在较旧的C中,假定未声明的函数返回int并接受未指定数量的参数。这是您收到错误的原因,因为编译器假定newNode函数返回int,而不是struct node *

在现代C(C99及更新版本)中,您无法再这样做了。 必须在使用之前声明函数。有些编译器仍允许旧的行为并对其发出警告,但严格符合C99的程序不能在不声明它的情况下使用函数。

在您的情况下,您应该在main函数之前添加以下代码行。这告诉编译器newNode函数及其调用方式:

struct node *newNode(int);