|
最近看到一些对C语言的不常见的用法, 特与大家分享
若高手觉得太简单, 莫见笑.
1.声明变长数组
在VC中,对于数组的声明,只能是常量,而不能够是变量.而在gcc中如下代码却是可以成功运行的
- #include<stdio.h>
- int main()
- {
- int i, j;
- scanf("%d%d", &i, &j);
- int a[i][j];
- printf("%d\n", sizeof(a));
- return 0;
- }
复制代码
在这里, 可以在运行的时候再决定这个数组的大小为多少, 就避免了使用malloc在堆中分配这种方法.
2.为数组赋值
如果声明了一个100000长度的整形数组,需要将这个数组的最后一位赋为10,而其余位全部赋为0,如果在VC中,则需要使用循环的方式将前99999赋为0,然后再将最后一位赋为10,而使用gcc则可以很好地解决这个问题. 如下:
- #include<stdio.h>
- int main()
- {
- int i;
- int array[100000] = {[99999] = 10};
- for (i = 0; i < 100000; i++)
- printf("%d \n", array[i]);
- return 0;
- }
复制代码
此时,除了最后一位为10,其余位全为0.
3.在C程序中在main()函数之前运行的函数
通过gcc的函数的属性,可以设置某些函数在main()函数之前运行.如:
- #include<stdio.h>
- void first() __attribute__((constructor));
- void first()
- {
- printf("This is function %s\n", __FUNCTION__);
- main();
- return ;
- }
- int main()
- {
- printf("This is function %s\n", __FUNCTION__);
- return 0;
- }
复制代码
通过设置函数属性为constuctor, 可使其在main()之前运行. |
|