70,022
社区成员




# include <stdio.h>
char c [];
int f (void)
{
c [0] = 'x';
return * c;
}
int main (void)
{
printf ("%d\n", f ());
}
#include "stdio.h"
#define nyaa int
#define nyaanyaa main()
#define wowowo {
#define nyanyanya }
#define ohshit printf
#define cat (
#define dog )
#define wo ;
#define hit return
#define ls 0;
nyaa nyaanyaa
wowowo
ohshit cat "nyaa~" dog wo
hit ls
nyanyanya
static int x;
void f (void)
{
extern int x; //x具有内部链接,而非外部!
}
其次,int a []具有外部链接属性,但它并非是告诉C的实现这个东西在其它转换单元里定义。它在COFF的哪个段里安放并不重要,一点也不重要。重要的是,如果你声明了一个标识符且它具有文件作用域但没有初始化器,C的实现会将它视为一个试探性的定义。如果同一个标识符的所有外部声明都是试探性定义,则它相当于在当前转换单元内存在一个该标识符的外部定义,且具有一个值为0的初始化器,且该标识符的类型是所有试探性定义的所声明类型的复合类型。也就是说,在当前转换单元里,相当于有一个:
char a [] = {0};
[/quote]
不说属性,还真不好描述!但是你下文又整出来个“外部链接属性”,问问你,它属于“There are three kinds of linkage: external, internal, and none.”的哪一种呢?static int x;
void f (void)
{
extern int x; //x具有内部链接,而非外部!
}
其次,int a []具有外部链接属性,但它并非是告诉C的实现这个东西在其它转换单元里定义。它在COFF的哪个段里安放并不重要,一点也不重要。重要的是,如果你声明了一个标识符且它具有文件作用域但没有初始化器,C的实现会将它视为一个试探性的定义。如果同一个标识符的所有外部声明都是试探性定义,则它相当于在当前转换单元内存在一个该标识符的外部定义,且具有一个值为0的初始化器,且该标识符的类型是所有试探性定义的所声明类型的复合类型。也就是说,在当前转换单元里,相当于有一个:
char a [] = {0};
[/quote]
不说属性,还真不好描述!但是你下文又整出来个“外部链接属性”,问问你,它属于“There are three kinds of linkage: external, internal, and none.”的哪一种呢?static int x;
void f (void)
{
extern int x; //x具有内部链接,而非外部!
}
其次,int a []具有外部链接属性,但它并非是告诉C的实现这个东西在其它转换单元里定义。它在COFF的哪个段里安放并不重要,一点也不重要。重要的是,如果你声明了一个标识符且它具有文件作用域但没有初始化器,C的实现会将它视为一个试探性的定义。如果同一个标识符的所有外部声明都是试探性定义,则它相当于在当前转换单元内存在一个该标识符的外部定义,且具有一个值为0的初始化器,且该标识符的类型是所有试探性定义的所声明类型的复合类型。也就是说,在当前转换单元里,相当于有一个:
char a [] = {0};
[/quote]
不说属性,还真不好描述!但是你下文又整出来个“外部链接属性”,问问你,它属于“There are three kinds of linkage: external, internal, and none.”的哪一种呢?static int x;
void f (void)
{
extern int x; //x具有内部链接,而非外部!
}
其次,int a []具有外部链接属性,但它并非是告诉C的实现这个东西在其它转换单元里定义。它在COFF的哪个段里安放并不重要,一点也不重要。重要的是,如果你声明了一个标识符且它具有文件作用域但没有初始化器,C的实现会将它视为一个试探性的定义。如果同一个标识符的所有外部声明都是试探性定义,则它相当于在当前转换单元内存在一个该标识符的外部定义,且具有一个值为0的初始化器,且该标识符的类型是所有试探性定义的所声明类型的复合类型。也就是说,在当前转换单元里,相当于有一个:
char a [] = {0};
[/quote]
不说属性,还真不好描述!但是你下文又整出来个“外部链接属性”,问问你,它属于“There are three kinds of linkage: external, internal, and none.”的哪一种呢?static int x;
void f (void)
{
extern int x; //x具有内部链接,而非外部!
}
其次,int a []具有外部链接属性,但它并非是告诉C的实现这个东西在其它转换单元里定义。它在COFF的哪个段里安放并不重要,一点也不重要。重要的是,如果你声明了一个标识符且它具有文件作用域但没有初始化器,C的实现会将它视为一个试探性的定义。如果同一个标识符的所有外部声明都是试探性定义,则它相当于在当前转换单元内存在一个该标识符的外部定义,且具有一个值为0的初始化器,且该标识符的类型是所有试探性定义的所声明类型的复合类型。也就是说,在当前转换单元里,相当于有一个:
char a [] = {0};