所见的GCC和标准C不同的一些语法(长期更新)

弄linux编程用的是gcc,而之前所了解的都是标准,对gcc的扩展不太了解,所以做一些记录,以后后面用得着。

1、

函数参数外定义

main(argc, argv)
int	argc;
char	**argv;
{
return; 
}
//gcc 可以编译通过。

2、 类型的获取

typeof 
int a;
typeof(a) b;
main(argc,argv)
int	argc;
char	**argv;
{
    int a;
    typeof(a) b;
    a =1 ;
    b =1;
    printf("%d %d \n",a,b);
    return;
}

3、零长度数组

#include <stdio.h>
#include <stdlib.h>
main(argc,argv)
int	argc;
char	**argv;
{
    int a[0];
    return;
}


4、switch .. case 的不一样,注意数字和...有 空格,否则会被认为是小数点,编译出错。

#include <stdio.h>
#include <stdlib.h>
main(argc,argv)
int	argc;
char	**argv;
{
    char a =100;
    switch(a){
    case 1 ...  10: printf(" between 0 ... 10 \n");break;
    case 11 ... 20: printf(" between 11 ... 10 \n");break;
    case 21 ... 30: printf(" between 21 ... 30 \n");break;
    case 91 ... 100: printf(" between 91 ... 100 \n");break;
    default: printf(" Not exist \n");break;
    }
    return;
}

5、数组的初始化

int a[100] = {[0 ... (100-1)] = 0};

6、零数组或未定义大小数组在结构体中的使用

typedef struct {
	int a;
	char str[];//或者str[0]
}test;
void main(void){
	test* pTest;
	pTest = (test*) malloc(sizeof(test)+ 100);
	memcpy(pTest->str,"hello world!",sizeof("hello world!"));
	printf("%s \n",pTest->str);
	
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

john_liqinghan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值