1 内置的宏定义 这些宏在代码中可直接调用。 示例代码 cout << "程序最后编译日期宏 " << __DATE__ << endl; cout << "程序最后编译时间宏 " << __TIME__ << endl; cout << "当前行数宏 " << __LINE__ << endl; cout << "当前运行文件名宏 " << __FILE__ << endl; cout << "...
1 内置的宏定义 这些宏在代码中可直接调用。 示例代码 cout << "程序最后编译日期宏 " << __DATE__ << endl; cout << "程序最后编译时间宏 " << __TIME__ << endl; cout << "当前行数宏 " << __LINE__ << endl; cout << "当前运行文件名宏 " << __FILE__ << endl; cout << "...
C语言中,宏名没有类型,其参数也没有类型。宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任意类型的数据。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换。
仿对象宏(object-like)以”替代文本“替换每次出现的被定义的宏名,也称之为无参数宏。代表值的宏称之为:类对象宏; 无参数宏形如: #define MACRO 1234 // 常见用法 #define LIMIT 1000 // 常见用法 #define GOOD // 空宏 直接宏替换,将宏的简单替换,展现淋漓尽致,也是宏的性质之一; 2.4 带参数的宏 仿...
上面是截取了一段自动生成的头文件代码,左侧是原始的 Swift 代码,右侧是自动生成的 Objective-C 代码,我们可以看到在 Objective-C 的类中,有一个名为SWIFT_CLASS的宏,将 Swift 与 Objective-C 中的两个类进行了关联。 如果你稍加注意,就会发现关联的一段乱码中还绑定了当前的组件名(PetWall),这样做的目的是...
(void);// 测试函数1:交换a,b的值voidtest2(void);// 测试函数2:C语言预定义宏voidtest3(void);// 测试函数3:C89与C99标准的区别voidtest4(void);// 测试函数4:输出当前编译器数据类型范围// 菜单intmenu(void);/*=== 主函数 ===*/intmain(void){...
规则1:实参替换。本条规则描述带参数的宏的替换过程。对于宏定义中的形参,在替换列表中,如果不是作为#或##的操作数,那么将对应实参完全 展开(相当于对实参进行求值),然后将替换列表中的形参替换掉.如果是#或##的操作数,那么不进行替换。规则2:多次扫描。在所有的形参替换为实参后,对结果进行再次...
可以获取当前源码文件的文件名 使用__builtin_FILE()函数 __builtin_FILE()是一个内建函数,不同于__FILE__是一个预定义宏,因此__builtin_FILE()的效率可能更高。 使用__BASE_FILE__宏 与__FILE__宏和__builtin_FILE()函数功能类似,它只包含当前编译单元的文件名,不包含任何路径信息(理论上是这样,实...
1、#define的宏 宏定义是以“\”换行,如:#define MAX(a,b) \ ((a) <(b) ? (b) : (a)) 2、关键字的换行 关键字换行支持:(+ - * / % = , | & ^ ~ || && == !=)以及括号等,均能作为换行符号。 3、字符串的换行 换行的字符串最后,添加双引号,下一行开头也加上双引号就可以。 如:...
平时开发C语言程序时,经常需要调试代码,C语言有一些宏,可以打印出当前的行号、文件名称、日期、时间,对程序的调试起到很大的帮助,可以快速定位问题。特别是开发单片机程序时,使用这些宏打印这些信息或者在LCD上显示程序的编译日期、时间,可以知道这个单片机上的固件是什么时候编译。帮助判断版本。