一、针对一般语句换行 使用\结尾作为换行标记 在编译时,\后面的换行符将被忽略,当做一行处理。比如宏定义时使用 #define my_puts(x) printf("%s", \ x); 和写作 #define my_puts(x) printf("%s",x); 是没区别的。 针对宏定义中换行,换行符\必不可少。针对执行语句的换行,我们同样可以使用\作为换行符...
每一行要严格加上换行符(除了最后一行),换行符和前面一个符号至少保持一个空格距离,换行符后不能出现其他字符包括空格 3. 变量定义和赋值 宏定义内如果需要进行的变量初始化,需要避开和其外部的变量名重复的情况,因为宏定义在预编译后直接替换进主文件中,其变量初始化并不是在局部堆栈空间,而是和主文件或者主函数...
在宏定义中可以使用 \ 换行符将多行代码合并为一行。例如:在上述代码中,我们定义了一个宏定义 PRINTXY,它用于输出 x 和 y 的值。在 PRINTXY 宏定义中,我们使用了 \ 换行符将两个 printf 语句合并为一行。在 main 函数中,我们调用 PRINTXY 宏定义输出 x 和 y 的值。宏定义中的递归调用 宏定义也可以...
宏定义的换行连接 标准预处理宏 宏(macro)是基于#define所实现的另一种预处理功能。 与基本的#define定义的是常量相比,宏(macro)允许多个参数化替换,参数中可以是固定的字符串,也被一些变量所替代。这个替换的操作将在预编译的时候完成。 宏(macro)的作用是用比较简单的方式表示复杂的函数调用,以提高程序的可读性...
1、#define的宏 宏定义是以“\”换行,如:#define MAX(a,b) \ ((a) <(b) ? (b) : (a)) 2、关键字的换行 关键字换行支持:(+ - * / % = , | & ^ ~ || && == !=)以及括号等,均能作为换行符号。 3、字符串的换行 换行的字符串最后,添加双引号,下一行开头也加上双引号就可以。 如:...
「#define 定义宏」:告诉 CPP 把所有的 MAX_ARRAY_LENGTH 字符都替换为 20 字符。 #define MAX_ARRAY_LENGTH 20 「#undef 取消已定义宏」:告诉 CPP 取消已定义的 FILE_SIZE,并重新定义它为 42。 #undef FILE_SIZE #define FILE_SIZE 42 「#ifdef 检查宏是否已经定义」:告诉 CPP 如果定义了 DEBUG,则...
define的多行定义 define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心) #define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* ... */ \ } while(0) /* (no trailing ; ) */ 关键是要在每一个换行的时候加上一个 "\ " ...
宏定义以换行结束,不需要分号等符号作分隔符。如有以下定定义: # define PI 3.1415926;原希望用PI求圆的周长的语句 c2*PI*r;经宏展开后,变成 c2*3.1415926*r;这就不能达到希望的要求。 带参数宏定义进一步扩充了无参数宏定义的能力,在字符序列替换同时还能进行参数替换。带参数定定义的一般形式为 # define ...
当宏定义太长,需要换行时,就需要用到\,该符号应该在头文件中很常见。 #define DIO_DBTOC_VALUE (((uint32)DIO_VENDOR_ID) << (uint32)22) | \ (((uint32)DIO_MODULE_ID) << (uint32)14) | \ (((uint32)DIO_SW_MAJOR_VERSION) << (uint32)8) | \ (((uint32)DIO_SW_MINOR_VERSION) ...
1、区分不同情况,有多种方式可以采用。不管是哪种情况,都可以用\结尾作为换行标记,在编译时,\后面的换行符将被忽略,当做一行处理。比如宏定义时使用#define my_puts(x) printf("%s", \ x);和写作#define my_puts(x) printf("%s",x);是没区别的。 这里的\必须存在,不能省略。2、不过...