常用的预处理标识符有很多,以下是几个预定义标识符:
(1)__FILE__ :表示正在编译的文件
(2) __LINE__:表示的是正在编译的文件的行号
(3)__DATE__:表示的是正在编译的日期字符串
(4)__TIME__:表示的是正在编译的时间字符串
(5)__STDC__:当要求程序严格遵循ANSIC标准时该标识符被赋值为1。这个地方如果说编译器程序严格遵循ANSIC标准,会返回1,如果不遵守,则没有这个标识符。
代码如下:
#include <stdio.h>
#include<windows.h>
int main()
{
int m = 1999;//011111001111
int n = 2299;//100011111011
int c = m^n; //111100110100
int count = 0;
while (c)
{
if (c % 2 == 1)
{
count++;
}
c = c / 2;
}
printf("这两个数中有%d个位(bit)不同\n", count);
printf("FILE:%s\nLINE:%d\nDATE:%s\nTIME:%s\n", __FILE__, __LINE__, __DATE__, __TIME__);
system("pause");
return 0;
}
(6)#:使用预处理器将1个宏参数转换为1个字符串。(#VALUE 这种结构被处理器翻译为"VALUE"字符串)
代码如下:
#include<stdio.h>
#include<windows.h>
#define PRINT(FORMAT, VALUE)\
printf("the value of "#VALUE" is "FORMAT"\n", VALUE)
int main()
{
int num = 10;
PRINT("%d", num);
system("pause");
return 0;
}
程序结果:
(7)##:##结构则执行一种不同的任务。它把位于它两边的内容直接换成成1个字符。
代码如下:
#include<stdio.h>
#include<windows.h>
#define CAT(X,Y) X##Y
int main()
{
int num4 = 10;
printf("%d\n", CAT(num, 4));
system("pause");
return 0;
}
程序结果: