24_#pragma的使用

24_#pragma的使用

1、#pragma简介

在这里插入图片描述

2、#pragma message用于自定义编译消息

示例分析:

#include <stdio.h>

#if defined(ANDROID20)
    #pragma message("Compile Android SDK 2.0...")
    #define VERSION "Android 2.0"
#elif defined(ANDROID23)
    #pragma message("Compile Android SDK 2.3...")
    #define VERSION "Android 2.3"
#elif defined(ANDROID40)
    #pragma message("Compile Android SDK 4.0...")
    #define VERSION "Android 4.0"
#else
    #error Compile Version is not provided!
#endif

int main()
{
    printf("%s\n", VERSION);

    return 0;
}

输出结果为:
在这里插入图片描述
编译的时候输出信息;

3、#pragma once用于保证头文件只被编译一次

在这里插入图片描述
"#pragma once"效率高,但不一定被编译器支持;
一般将程序写成如下所示:

#ifndef _HEADER_FILE_H_
#define _HEADER_FILE_H_
#pragma once
//source code
#endif
4、#pragma pack用于指定内存对齐方式

Test1和Test2所占内存为多少?
在这里插入图片描述
gcc默认条件下:"#pragma pack(4)"
Test1所占内存为12;Test2所占内存为8;
"#pragma pack()"的使用示例1:

#include <stdio.h>

#pragma pack(2)
struct Test1
{
    char c1;
    short s;
    char c2;
    int i; 
};
#pragma pack()

#pragma pack(4)
struct Test2
{
    char c1;
    char c2;
    short s;
    int i;
};
#pragma pack()

int main()
{
    printf("sizeof(Test1) = %d\n", sizeof(struct Test1));
    printf("sizeof(Test2) = %d\n", sizeof(struct Test2));

    return 0;
}

输出结果为:
在这里插入图片描述
"#pragma pack()"的使用示例2:

#include <stdio.h>

#pragma pack(8)

struct S1
{
    short a;
    long b;
};

struct S2
{
    char c;
    struct S1 d;
    double e;
};

#pragma pack()

int main()
{
    printf("%d\n", sizeof(struct S1));
    printf("%d\n", sizeof(struct S2));

    return 0;
}

输出结果为:
gcc编译器下:8 20
vs编译器下:8 24
原因:gcc编译器不支持8位对齐

文章内容为狄泰软件C语言课程学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值