C - 预处理命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - 预处理命令相关的知识,希望对你有一定的参考价值。
#define name [string]
宏定义. 在编译预处理时, 对程序中所有出现的宏名, 都将使用宏定义中的字符串来替换
... 变参, 用于传递可变参数列表, 可使用__VA_ARGS__来获取可变参数列表
#define debug(...) printf(__VA_ARGS__) #define debug(format, ...) printf(format, __VA_ARGS__) #define debug(format, args...) printf(format, args)
# 字符串化, 给相应的参数加上双引号
#@ 单字符化, 给相应的参数加上单引号, 并将其视为一个字符(微软特定)
## 连接, 将两个参数连接在一起, 形成一个标记
#define ToString(x) #x #define ToChar(x) #@x #define Conn(x,y) x##y char* str = ToString(1234); /* str = "1234" */ char a = ToChar(1); /* a = ‘1‘ */ int n = Conn(123, 456); /* n = 123456 */ char* str2 = Conn("qwer", "asdf"); /* str2 = "qwerasdf" */
#line number ["filename"]
#line 用于重置由__LINE__和__FILE__宏指定的行号和文件名
#line 1000 "lukas.c" /* 行号设置为1000,文件名设置为lukas.c */
#error token-string
#error 将使编译器停止编译, 并打印出包含该记号序列的诊断信息
#if !defined(__cplusplus) #error C++ compiler required. /* 如果不使用C++的编译器, 那么这一行(除注释外)将会被打印出来 */ #endif
#pragma para
#pragma 用于设定编译器的状态或者是指示编译器完成一些特定的动作
每个编译器对#pragma的实现不同, 编译指示是机器或操作系统专有的
#pragma message("消息文本")
能够在编译信息输出窗口中输出响应的信息
#pragma code_seg(["section-name" [,"sectio-class"]])
能够设置程序中函数代码存放的代码段, 当我们开发驱动程序的时候就会用到它
#pragma once
在头文件的最开始的地方加入这条指令, 就能保证头文件只会被编译一次
与编译器相关, 兼容性差. 如果要实现跨平台, 最好使用#ifndef来替换
#pragma hdrstop
表示预编译头文件到此为止, 后面的头文件不再进行编译
#pragma resource "*.dfm"
表示把*.dfm文件中的资源加入工程. *.dfm中包括窗体外观的定义
#pragma comment(comment-type[,"comment-string"])
将一个注释记录放入一个对象文件或可执行文件中
comment-type 指定注释的类型, 是一个预定义的标识符, 应该是compiler,exestr,lib,linker之一
compiler: 放置编译器的版本或者名字到一个对象文件, 该选项是被linker忽略的
exestr: 在以后的版本中将被取消
lib: 连入一个库文件
linker: 指定一个连接选项, 这样就不用在命令行输入或者在开发环境中设置了
comment-string 是一个提供为comment-type提供附加信息的字符串
#pragma disable
在函数前声明, 只对一个函数有效, 指示该函数的调用过程将不可中断
#pragma data_seg(["shared-data"])
建立一个新的数据段, 并定义共享数据
一般用于在DLL中定义一个共享的有名字的数据段, 这个数据段中的全局变量可以被多个进程共享
#pragma data_seg("shareddata") HWND sharedwnd = NULL; /* 共享数据, 必须被初始化, 否则会共享失败 */ #pragma data_seg()
#pragma region name #pragma endregion comment
Visaul C++ 中特有的预处理指令, 它可以让你折叠特定的代码块
#pragma region Variables HWND hWnd; const size_t Max_Length = 20; //other variables #pragma endregion This region contains global variables.
#pragma pack(n)
指定结构体以n字节对齐
#pragma pack(push) /* 保存对齐状态 */ #pragma pack(4) /* 设定为4字节对齐 */ struct test { char m1; double m4; int m3; }; #pragma pack(pop) /* 恢复对齐状态 */
#pragma warning(...)
#pragma warning(disable:450734;once:4385;error:164) /* 等价于 */ #pragma warning(disable:450734) /* 不显示4507号和34号警告信息 */ #pragma warning(once:4385) /* 对4385号警告信息只报告一次 */ #pragma warning(error:164) /* 把164号警告信息作为一个错误 */ /* 同时, #pragma warning 也支持如下格式: */ #pragma warning(push[,n]) /* 保存所有警告信息的现有警告状态, 并把全局警告等级设定为n(1~4) */ #pragma warning(pop) /* 向栈中弹出最后一个警告信息 */ /* 在入栈和出栈之间所做的一切改动, 将在出栈后重新保存 */ #pragma warning(push) #pragma warning(disable:4705) #pragma warning(disable:4706) #pragma warning(disable:4707) /* ....... */ #pragma warning(pop) /* 重新保存所有的警告信息(包括4705,4706和4707) */
其他预处理命令
#include 文件包含
#if x 条件编译
#elif x else if (x)
#ifdef x 等同于 #if defined(x)
#ifndef x 等同于 #if !defined(x)
#else
#endif
#undef x 终止宏定义(x)的作用域
EOF
以上是关于C - 预处理命令的主要内容,如果未能解决你的问题,请参考以下文章