x = 10;不是一个定义。这是一个任务。您可以根据需要分配任意多次。

int x;是一个定义(同时也是一个声明)。同样,extern int x;是一个声明(没有定义)。为了说明您所询问的概念,以下是有效的 C:

// Duplicate declaration: OK

extern int x;

extern int x;

// Definition: OK

int x;

// int x; // Duplicate definition: ERROR

// Definition with initialisation: OK

int y = 42;

// (Re)assignment: OK inside function.

x = 1;

y = 2;

对于函数,语法是不同的。要声明一个函数,请编写它的原型。要定义它,请添加一个函数体:

// Declaration:

int f(void);

// Also possible, but unnecessary:

extern int f(void);

// Definition:

int f(void) { return 42; }