0

这里我有两个结构。首先是:

struct complex {
    double real, imaginary;
};

我知道它必须以分号结尾。

但是这个有一个功能

struct complex add_complex(struct complex c1, struct complex c2) {
    struct complex c3;
    c3.real = c1.real + c2.real;
    c3.imaginary = c1.imaginary + c2.imaginary;
    return c3;
}

在这里,如果我在末尾不包含分号,那么编译器将不会产生错误。为什么?

4

2 回答 2

7

结构定义必须始终以分号结尾。因此,如果您;struct complex定义中删除了,您会得到一个编译器错误。

第二个 ( add_complex) 不是结构定义,它是一个返回结构的函数。函数末尾没有分号。

  • 我的意思是,如果我这样写 struct complex add_complex() { }; 那么这个也是真的。为什么?

它是“好的”,实际上取决于编译器。我使用的大多数编译器(例如 gcc 和 Micosoft 的)都允许这样做,但可以使用正确的标志显示警告/错误(添加-pedantic到 gcc 将给出:warning: ISO C does not allow extra ‘;’ outside of a function [-pedantic]并且您可以添加-Werror)将其变成错误。 )

于 2013-04-01T12:17:04.833 回答
-1

您可以使用结构定义来立即声明变量或其他内容。例如,你可以做

struct complex {
    double real, imaginary;
} number;

number用于用 type声明变量struct complex。你也可以像这样声明你的函数

struct complex {
    double real, imaginary;
} add_complex(struct complex c1, struct complex c2) {
    struct complex c3;
    c3.real = c1.real + c2.real;
    c3.imaginary = c1.imaginary + c2.imaginary;
    return c3;
}

您不需要在函数定义后放置分号,因为此定义不能用于其他任何内容。

于 2013-04-01T13:12:06.773 回答