- 论坛徽章:
- 0
|
本帖最后由 x5miao 于 2011-09-08 09:50 编辑
我知道C对struct结构体有两种初始化方法。比如对于以下结构体- typedef struct
- {
- char a;
- int b;
- }A;
复制代码 方法一:A a={'c',4};
方法二:A a={.a='c',.b=4};
其中方法一是所有的C标准都支持的结构体变量初始化方法,方法二是C99新增的初始化方法。
但今天突然看到了一种使用冒号的新的初始化方法
方法三:我用gcc -Wall -o a.out a.c -std=c99
gcc -Wall -o a.out a.c -std=c89
以及g++ -Wall -o a.out a.c编译都能通过,难道是C标准在一开始就支持这种初始化方法吗?为什么这种初始化方法在我看的C语言的书里面都从来没人提过啊?
更让我感到惊讶的是当我把a.c的文件名改成a.cpp时用g++编译器对用方法一和方法三来进行初始化的源文件时也是可以的,这是不是意味着c++也支持方法三的structure初始化方式?(当然c++不支持方法二的初始化方式。)
还有一个问题gcc和g++分别是如何区别源代码文件是C还是C++源文件的啊?是只和文件名后缀有关吗? |
|