黑马程序员-c语言宏定义以及外部变量

来源:互联网 发布:乐清知临寄宿学校 编辑:程序博客网 时间:2024/06/08 05:39

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

int num;int num2;void test();int main(int argc, const char * argv[]) {    extern int num;    extern int num2;    num = 10;    num2 = 12;    printf("%d %d",num,num2);    test();    return  0;}void test(){    printf("%d %d",num,num2);}
通过两个不同块的方法,说明显式的extern只是为了程序的可读性更好
#include <stdio.h>#include <string.h>#define TWO 2#define FOUR TWO*TWO#define SQUARE(x) x*x#define PR(x) printf("is %d   \n",x)#define PR_2(x) printf("is "#x"   \n")#define XNAME(n) X##n#define PR_CHANGE(...) printf(__VA_ARGS__)#define MAX2(X,Y) (X>Y?X:Y)#define ABS(X) (X<0?-X:X)int main(int argc, const char * argv[]) {       PR(SQUARE(FOUR));        PR_2(8);    PR_2(SQUARE(FOUR));        int XNAME(1) = 100;    printf(" %d\n",X1);        PR_CHANGE("hello Word\n");        #undef MAX2#ifdef MAX2    int i = MAX2(5, 8);    printf(" %d\n",i);    int j = ABS(-10);    printf(" %d\n",j);    int f = MAX2(5, 8);#else    printf("MAX2 not has\n");#endif#if TWO == 2    printf("TWO == 2");#endif    #if defined(FOUR)    printf("FOUR is ok");#endif     return  0;}

is 16   

is 8   

is SQUARE(FOUR)   

 100

hello Word

MAX2 not has

TWO == 2

FOUR is ok


上述代码展示常用宏方法

宏本身是文本替换,所以尽量不要宏中放置分号

在一些简单函数宏中,需要注意由于宏是文本替换,要小心传入奇怪的文本例如输出中的is SUARE,就是由于文本替换导致的错误

# 和##属于宏中的字符转换

其中的__VA_ARGS__是一个预定义宏,在宏参数中使用...可以实现宏中的文本替换


0 0