集锦一:

#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 类型,因为sizeof()的返回类型是无符号数。if语句在signed int 和unsigned int之间测试相等性,d被升级为unsigned int 类型。

集锦二:

#define SWAP(a,b) (a=a+b,b=a-b,a=a-b)

宏不使用中间变量,交换两个变量的值,在什么情况下此宏存在问题?
答案:
例如我们有如下需求,将数组a[0.....n-1]中值交换a[0]<---> a[n-1],在此种应用下会出现与预期不符的情况。SWAP(a[i],a[j]),恰好i==j成立时,会将该数组对应位置上的值置为0.
集锦三:
分析如下程序的执行结果,并解释原因.

#include <stdio.h>
#include <stdlib.h>
void hello(void)
{
    fprintf(stderr,'hello!\n');
}
void func(void)
{
    void *buf[10];
    static int i;
    for(i=0;i<100;i++)
    {
        buf[i]=hello;
    }
}
int main()
{
    int buf[1000];
    func();
    return 0;
}

集锦四:C语言实现进度条功能

#include <stdio.h>
#include <unistd.h>
int main()
{
    int i;
    for(i=0;i<=100;i+=10)
    {
        printf("Percent completed:%3d%%\r",i);
        sleep(1);
       fflush(stdout);
    }
}