真题知识点

发布时间 2023-07-22 19:48:47作者: 智子lock

Pragma知识点

目录

  1. pragma简介
  2. pragma message
  3. pragma once
  4. pragma pack
  5. 小结

pragma简介

  • #pragma用于指示编译器完成一些特定的动作
  • #pragma所定义的很多指示字是编译器特有的
  • #pragma在不同的编译器间是不可移植的
  • 预处理器将忽略它不认识的#pragma指令
  • 不同的编译器可能以不同的方式解释同一条#pragma指令
    一般用法
#pragma parameter

pragma message

  • message参数在大多数的编译器中都有相似的实现
  • message参数在编译时输出消息到编译输出窗口中
  • 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;
}

pragma once

  • #pragma once用于保证头文件只被编译一次
  • #pragma once是编译器相关的,不一定被支持
    global.h
#pragma once
int g_value = 1;

test.c

#include <stdio.h>
#include "global.h"
#include "global.h"
int main(){
	printf("g_value=%d\n",g_value);
	return 0;
}

工程中既想要移植性,又想要保证效率,可以采取以下做法:
global.h

#ifndef _GLOBAL_H
#define _GLOBAL_H
#pragma once
int g_value = 1;
#endif

pragma pack

小结