C语言-预编译

define:
    替换、宏函数、宏展开
    不管情况,直接替换
    替换字符一般大写
    经常改变的常量可以用define来简化

        #define N 10
        #define NM (2+8)
        #define f(x) x*x
        #define pf(y) printf("%d", y)

    标识连接符:
        1. #
            相当于加了双引号
            #define f(x) printf("%s", #x);
            int num = 0;
            f(num);

            put: num

        2. ##
            #define a(x) a##x

            int a1 = 10;
            int a2 = 20;
            int a2 = 30;
            a(1) = 39;
            int i = 1;
            while (i < 4)
            {
                printf("%d", a(i));
                i++;
            }
            put : 39, 20 , 30


            void runall()
            {
                printf("%d", 1000);
            }

            #define run(x) run##x

            run(all)();

        3. #@

            相当于加单引号
            #define a(x) #@x

            putchar(N(A));

            put : A



undef:
    取消define的作用域

        #undef N



include:

    #include <> 从系统目录开始找
    #include "" 先从当前目录找, 再找系统目录


if else endif:

    选择性编译

    #define NNN 1

    #if NNN == 1
        printf("1");
    #else
        printf("0");
    #endif

    重复包含
    //不存在时
    #ifndef X
    #define X 100
    #endif

    //存在时
    #ifdef N
    #endif

error:
    自写一个错误,编译时提示



pragma:

    #pragma message("编译时提示消息内容");

    #pragma once //当前文件在项目中只包含一次

    #pragma comment(lib, "Urlmon.lib") //加载链接库

    #pragma warning(disable:4996) //屏蔽错误
    #pragma warning(once:错误号) //警告/错误 只显示一次
    #pragma warning(error:错误号) // 把错误号信息当做一个错误
    #pragma warning(default:错误号)

    #pragma warning(push) //让一个 warning生效
    #pragma warning(pop) //弹出坠湖一个警告信息,在入栈和出栈之间所作的

    #pragma pack(1) //设置结构器字节对其  参数只有 1 2 4 8 16

    #pragma date_seg() //检测进程运行次数
        #pragma data_seg("exe_name")
        int current_exe = 0;
        #pragma data_seg()

        #pragma comment(linker, "/SECTION:exe_name,RWS")

        if (current_exe  > 0)
        {
            printf("程序只能运行一个");
            exit(1);
        }

    #pragma deprecated() //限制函数作用域
        #pragma deprecated(run1, run2) //限制函数run1 run2接下来不可使用

    #pragma push_macro("Y") //将Y当前的值吃进
    #pragma pop_macro("Y") //将之前吃入的Y还原

        #define y 10
        #pragma push_macro("Y") //将Y当前的值吃进
        #define y 20
        #pragma pop_macro("Y") //将之前吃入的Y还原

    #pragma setlocale() //设置当前文件编码

        #include <locale.h>
        #pragma setlocale("chs") //经常放在第一行

    #pragma intrinsic() //设置内联还输
    #pragma function() //取消内联函数

    #pragma inline_depth() //设置内联深度
    #pragma inline_recuresion() // 内联开关 on oFF

    #pragma hdrstop() // 设置预编译头
    #pragma auto_inline() // 是否自动内联 on off

    #pragma check_stack() // 自动检查栈 on off     判定会不会发生栈溢出

缓冲区设置:
    缓冲区有三种方式
        满缓冲,满了在写
        行缓冲,一行就写
        无缓冲

    setvbuf(); //设置缓冲区
        #define _IOFBF 0x0000 full 缓冲区满了再干活
        #define _IOLBF 0X0040 line 行缓冲
        #define _IONBF 0X0004 no 无缓冲

        char str[4096] = {0};
        setvbuf(stdout, str, _IOFBF, 4096);
        fprintf(stdout, "hello world");
        fflush(stdout);

__LINE__:
    当前代码所在行

__TIME__:
    代码编译时间

__DATE__:
    代码编译时间

__FILE__:
    当前文件名

__FUNCTION__:
    函数名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值