void varfunc() {
int var = 0;
static int static_var = 0;
printf("var=%d, static_var=%d\n", var, static_var);
var++; static_var++;
}
main() { for(int i=0;i<3;i++) varfunc(); }
// 輸出:
// var=0, static_var=0
// var=0, static_var=1
// var=0, static_var=2
static_var 保留值,var 每次重置。
main() {
int num = 2;
for(int i=0;i<3;i++) {
printf("outer num=%d\n", num++);
{ auto int num = 1; printf("inner num=%d\n", num++); }
}
}
// 外層 num 遞增 2,3,4;內層每次重置為 1
main() {
int num = 2;
for(int i=0;i<3;i++) {
printf("outer num=%d\n", num++);
{ static int num = 1; printf("inner num=%d\n", num++); }
}
}
// 內層 static_num 遞增 1,2,3(僅初始化一次)
int a,b,c;
void add() { int a=3; c=a+b; }
main() { a=b=4; add(); printf("c=%d\n", c); }
// 全局 a,b=4;add 內部 a=3 局部遮蔽;c=3+4=7
main() {
register int i;
int tmp=0;
for(i=1;i<=100;i++) tmp+=i;
printf("sum=%d\n", tmp);
}
// 46: 基礎宏與條件循環
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
// 輸入數字,輸出平方,<50 退出
// 47: 多語句宏(反斜槓換行)
#define exchange(a,b) { int t; t=a; a=b; b=t; }
// 48: 符號重定義宏
#define LAG >
#define SMA <
#define EQ ==
// 使用 if(i LAG j) 等
#define MAX
#define MAXIMUM(x,y) ((x>y)?x:y)
#define MINIMUM(x,y) ((x>y)?y:x)
main() {
int a=10,b=20;
#ifdef MAX printf("max=%d\n", MAXIMUM(a,b)); #else printf("min=%d\n", MINIMUM(a,b)); #endif
#ifndef MIN printf("min=%d\n", MINIMUM(a,b)); #else printf("max=%d\n", MAXIMUM(a,b)); #endif
#undef MAX
#ifdef MAX printf("max=%d\n", MAXIMUM(a,b)); #else printf("min=%d\n", MINIMUM(a,b)); #endif
#define MIN
#ifndef MIN printf("min=%d\n", MINIMUM(a,b)); #else printf("max=%d\n", MAXIMUM(a,b)); #endif
}
// 輸出:max=20, min=10, min=10, max=20
// test.h
#define LAG >
#define SMA <
#define EQ ==
// 50.c
#include "test.h"
#include
main() { int i=10,j=20; if(i LAG j) printf("%d>%d\n",i,j); ... }