C/C++中常用的pragma指令

pragma指令用于指定特定于计算机或操作系统的编译器功能。其语法为:#pragma token-string
C和C ++编译器可识别的token-string有以下:

pragma

1 标记的仅C++支持。更多指令说明及使用请见:https://docs.microsoft.com/en-us/cpp/preprocessor/pragma-directives-and-the-pragma-keyword?view=vs-2019

常用指令如下:

  1. #pragma once
    作用:指定在编译源代码文件时,编译器仅include头文件一次。所以使用#pragma once可以减少构建时间,并且不会引起符号冲突,移植性较好。
// header.h
#pragma once
// 仅包含一次放置在此处的代码
......

保证一个头文件不会被include多次另一种实现方式为#ifndef:

// header.h
#ifndef HEADER_H_  
#define HEADER_H_
// 仅包含一次放置在此处的代码
......
#endif // HEADER_H_
  1. #pragma auto_inline
    选项on或者off。作用:打开或关闭inline操作,最好将其放在函数定义之前,不要放在内部。

  2. #pragma message( message-string )
    作用:在编译时显示参考消息。消息可以是自定义的宏。

#if _M_IX86 >= 500
#pragma message("_M_IX86 >= 500")
#endif

#pragma message("")

#pragma message( "Compiling " __FILE__ )
#pragma message( "Last modified on " __TIMESTAMP__ )

#pragma message("")

// with line number
#define STRING2(x) #x
#define STRING(x) STRING2(x)

#pragma message (__FILE__ "[" STRING(__LINE__) "]: test")

#pragma message("")
  1. #pragma code_seg
    #pragma code_seg( [ "section-name" [ , "section-class" ] ] )
    #pragma code_seg( { push | pop } [ , identifier ] [ , "section-name" [ , "section-class" ] ] )
    作用:指定目标代码存储的段(segment)。
void func1() {                  // stored in .text
}

#pragma code_seg(".my_data1")
void func2() {                  // stored in my_data1
}

#pragma code_seg(push, r1, ".my_data2")
void func3() {                  // stored in my_data2
}

#pragma code_seg(pop, r1)      // stored in my_data1
void func4() {
}

int main() {
}

References:

  • https://docs.microsoft.com/en-us/cpp/preprocessor/once?view=vs-2019
原创文章 38 获赞 13 访问量 4018

猜你喜欢

转载自blog.csdn.net/qq_36287943/article/details/105313326
今日推荐