柔性数组

#include <stdio.h>
#include <malloc.h>
typedef struct _soft_array
{
    int len;
    int array[];//int array[0];两种形式 
}SoftArray;

int main()
{  
    int i = 0;
    SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);

    sa->len = 10;

    for(i=0; i<sa->len; i++)
    {
        sa->array[i] = i + 1;
    }

    for(i=0; i<sa->len; i++)
    {
        printf("%d\n", sa->array[i]);   
    }

    free(sa);

    return 0;
}

柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。

C经典程序集锦

集锦一:

#include <stdio.h>

int array[]={23,34,12,17,204,99,16};

#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))

int main()

{

int d=-1;

int x;

if(d <= TOTAL_ELEMENTS-2)

printf("Hello World.\n");

system("pause");

return 0;

}

TOTAL_ELEMENTS所定义的值是unsigned int 类型......

Linux下如何编译并运行C程序

GCC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C、C++、Ada、Fortran、Objective、Perl、Python、Ruby以及Java等,甚至Linux的许多内核和许多其他自由软件以及开放源码应用程序都是用C语言编写并经gcc编译而成的.

编译单个源文件

[例如]在屏幕上打印"Hello,Linux."

[源代码]
    #include<stdio.h>

    #include<stdlib.h>

    int main(int argc,char **argv)

    {

        printf("Hello,Linux.\n");

        exit(0);

    }

C语言中宏的用法与技巧

总结一下C语言中宏的一些特殊用法和几个容易出错的地方。由于本文主要参考GCC文档,某些细节在别的编译器可能有细微差别。

宏基础

宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见。基本用法如下:

  1. 标示符别名
#define BUFFER_SIZE 1024

预处理阶段,foo = (char *) malloc (BUFFER_SIZE);会被替换成foo = (char *) malloc (1024);

宏体换行需要在行末加反斜杠\

编程练习

描述
编写这样一个程序:
接收来自标准输入的n条指令,指令有如下三种:

  1. a 后面跟一个整数,表示向集合插入一个数
  2. d 后面跟一个整数,表示从集合删除一个数,集合中有多个指定数时,删除一个即可
  3. p 从小到大打印出集合中的数 输入 每行输入一条指令,注意指令可能不符合规范,整数可能超出C语言长整形范围,可能带符号,但长度不会超过100 输出 当输入指令为p时,从小到大输出集合中的数,当指令不合法时,输出“Invalid Command” 输入样例 a -2 a 31415926535897932 c a 1 a 4 a 4 d 4 p