基本C帮助:函数声明

时间:2011-01-11 17:36:10

标签: c

我刚开始学习C并且不确定这里的问题是什么。

修改

#include <stdio.h>

int main (int argc, const char * argv[]) {

struct student {
    int age;
    char gender;
    char course[30];
};

defineNewStudent("Jarryd", 24, 'M', "Software Engineering");

return 0;
}

void defineNewStudent(char studentName[20], int age, char gender, char course[30])
{
student studentName[30];
studentName.age = age;
studentName.gender = gender;
studentName.course = course[20];

printf("%s is %d.\n Gender: %c.\n Course: %s.\n", studentName, studentName.age,  studentName.gender, studentName.course);
}

我有警告

  

警告:隐式声明函数'defineNewStudent'

我正在尝试使用传入的参数并使用它来命名结构,这是如何完成的?

这是什么警告以及后果是什么?

由于

4 个答案:

答案 0 :(得分:3)

C没有方法。您正在尝试在函数中定义函数。你不能在main()中声明一个函数。

你也可以在defineNewStudent()中声明两次studentName,一次作为第一个参数,并在其中声明一些具有相同名称的内容。

同时指定studentName.course =课程也不起作用。你必须做类似的事情

strncpy(studentName.course,course,sizeof(studentName.course));

您必须在使用之前定义该功能。你可以在main之前移动整个东西,这就是我要做的,或者你可以在main之前包含它的原型,这将是:

void defineNewStudent(char studentName[20], int age, char gender, char course[30]);

答案 1 :(得分:2)

你有一些问题 - 对于一个人来说,嵌套函数可能是一个坏主意。取defineNewStudent()并将其放在main()之外。根据您放置它的位置(在main()之前或之后),您可能还需要在main()中的呼叫站点之前使用函数原型。

此外,您需要将defineNewStudent()的数组参数声明更改为char parameterName[20],而不是您拥有的声明。

你也会遇到一些问题studentName是两个不同变量的名称,尝试使用简单的赋值复制字符串,并且"Software Engineering"太大而不适合你的阵列。

正如@arsenm在他的回答中提到的那样,C没有方法。

答案 2 :(得分:1)

错误似乎是因为结构student仅在函数main内定义。您正试图在defineNewStudent函数中使用它,但那里没有定义该结构。在全局范围内定义结构。

警告是因为你试图在实际声明它之前调用defineNewStudent函数,并且编译器在那时仍然不知道它。您可以在尝试使用它之前声明该函数。

// define the student struct at global scope
struct student
{
    int age;
    char gender;
    char course[20];
};

// declare the function (it can still be defined later)
void defineNewStudent(char studentName[20], int age, char gender, char course[20]);

int main (int argc, const char * argv[])
{
   defineNewStudent("Jarryd", 24, 'M', "Software Engineering");

   return 0;
}

void defineNewStudent(char studentName[20], int age, char gender, char course[20])
{
    // you already have a variable called studentName,
    // you can't have two variables with the same name
    struct student studentData;
    studentData.age = age;
    studentData.gender = gender;
    studentData.course = course;

    printf("%s is %d.\n Gender: %c.\n Course: %s.\n", 
         studentName, 
         studentData.age, 
         studentData.gender,
         studentData.course
    );
}

编辑:

在C中定义结构的实例需要struct关键字,因此在示例中它应该是

struct student studentData;
studentData.age = age;
studentData.gender = gender;
studentData.course = course;

如果是c ++ ,您可以删除struct关键字:

student studentData;
studentData.age = age;
studentData.gender = gender;
studentData.course = course;

可选地在C中,您可以将结构解析为别名,以便更容易定义它的实例:

typedef struct student
{
    int age;
    char gender;
    char course[20];
} StudentStruct;

// define it like this in the function:
StudentStruct studentData;

答案 3 :(得分:0)

我同意卡尔的观点。实际上你必须在使用之前定义函数,并且要么将函数放在main()之上,要么在main之前放置一个函数原型:

void defineNewStudent(char studentName [20],int age,char gender,char course [20]);

main()的 ......代码的其余部分

由于参数和函数的局部变量具有相同的名称会导致编译器错误,因此您还会遇到一个问题。 C中也有函数而不是方法(在JAVA / C ++等中)