#define 后面的定义要写在一排。

本文介绍了一个宏定义srelease的具体实现方式,该宏用于在C++中安全地释放COM对象指针,确保对象正确调用Release方法并置空指针。宏定义遵循了一行书写的原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef srelease
#define  srelease(x) if (NULL!=x){x->Release( );x=NULL;}
#endif

#define 后面的定义要写在一排。

输入: 第一行,两个整数 row 和 col,分别为表的行数(除去表头)和表的列数,列数在 100 及以内,行数在 1000 及以内; 第二行,col 个用一个空格分隔的VARCHAR 类型字符串(列名),代表表头,列名之间保证各不相同; 第三行,col 个用一个空格分隔的字符串,只可能是 INT,REAL,VARCHAR 或 DATE,代表每一列中数据的类型;接下来 row 行,每行 col 个用一个空格分隔的数据,每个数据遵循所在列的数据类型的构造规则,每一行代表一个元组。 之后若干行为关键字顺序,每行包括一个列名和一个数字,用一个空格分隔。第 i 行的列名代表第 i 关键字,跟在它后面的数字为 1 或 −1,如果是 1 则该关键字按升序排列,−1 则按降序排列。关键字之间不会重复,此部分行数不会超过列数。 输出:输出排好序的表格,第一行是表头,接下来 row 行是相应的元组。每个数据之间用一个空格分隔。请按原样输出数据。 例如测试集 1 的输入是: 5 5 orderID food num buyDate price INT VARCHAR INT DATE REAL 1 apple 5 2020-1-09 34.55 2 banana 10 2020-01-9 129.98 3 juice 1 2019-12-21 10.209 4 apple 3 2020-01-09 32.2 5 apple 2 2020-1-9 20.1 buyDate 1 food -1 price 1 测试集 1 的运行结果为: orderID food num buyDate price 3 juice 1 2019-12-21 10.209 2 banana 10 2020-01-9 129.98 5 apple 2 2020-1-9 20.1 4 apple 3 2020-01-09 32.2 1 apple 5 2020-1-09 34.55 开始你的任务吧,祝你成功! #include <stdio.h> #include <stdlib.h> #include <string.h> #define ROWNUM 1007 #define COLNUM 107 #define LEN 107 #define INT 0 #define REAL 1 #define VARCHAR 2 #define DATE 3 int type[COLNUM], sp[COLNUM][2], row, col, n; char title[COLNUM][LEN]; typedef struct table { union attr { char varchar[LEN]; double real; int date; int intNum; } A; char rawData[LEN]; } T; T t[ROWNUM][COLNUM]; /**********Begin**********/ void readTable() { } void readSP() { } int cmp(const void *a, const void *b) { } void printTable() { } /**********End**********/ int main() { readTable(); readSP(); qsort(t, row, sizeof(*t), cmp); printTable(); return 0; }
04-03
C语音练习题: 从PC中读取当前时间(年/月/日/时/分/秒),按照不同格式输出当前时间(年/月/日/星期/时/分/秒),格式如下所示: 格式1:2017年9月28日 星期四 14点26分13秒 格式2:2017/9/28 星期四 14:26:13 格式3:2017/9/28 星期四 2:26:13(PM) 格式4:Thursday, September 28, 2017 14:26:13 格式5:2017年9月28日(木) 2:26:13(PM) 完成以上的题目要求,尽可能的少用库函数,接下来我会把代码规范你 2.2.制作C语言头文件的注意事项 1.必须定义用于预防重复包含的 #ifndef … endif。 2.头文件内除以下内容外,都被禁止定义。 #include指示 : #include .., 扩展变量类型定义 : typedef… #define指示 : #define… 函数原型声明 : void vd_g_function_prot(…..); extern 变量声明 : extern U1 u1_g_variable_.....; 2.3.文字编码 文字编码使用shift_jis-dos。 2.4.缩进类型 为排除使用的文本编辑器的差别的影响,禁止使用制表符‘\t’做缩进。 详细的换行、缩进位置等,请参考1.3. 示例代码。 2.5.源文件和头文件内的定义、声明等顺序的规定 遵守#include、#define、变量类型定义、变量声明、函数声明的顺序,参考1.3. 示例代码。 3. 命名规则   以下是电装ICT技术1部职责范围内编的程序源代码、头文件内,使用到的变量、符号的命名规则的规定。 原则: 符号名按英文字母(大加小)、下划线‘_’进行定义。另外,在定义新的符号名称时,为了避免命名冲突,至少要与已经定义的符号名称和有3个以上的不同字符的字符串。但是,使用数字的索引、序列,不按上述的“与已经定义的符号名称和有3个以上的不同字符的字符串”来考虑。 #define SAMPLE_A #define SAMPLE_B -违反原则 #define SAMPLE_0 #define SAMPLE_1 -使用数字做序列定义,所以不违反。 3.1. 标准变量类型 禁止使用C语言的标准变量类型。 请使用共通头文件“aip_common.h”中定义了标准类型。 表 31 标准变量类型 C语言标准类型 类型名 unsigned char U1 unsigned short U2 unsigned long U4 unsigned long long U8 signed char S1 signed short S2 signed long S4 signed long long S8 float 未定义 double 未定义 表 32 字面量标准定义 字面量 定义值 含义 U1_MAX 0xFF U1类型最大值 U1_MIN 0x00 U1类型最小值 S1_MAX 0x7F S1类型最大值 S1_MIN 0x80 S1类型最小值 U2_MAX 0xFFFF U2类型最大值 U2_MIN 0x0000 U2类型最小值 U4_MAX 0xFFFFFFFFU U4类型最大值 U4_MIN 0x00000000U U4类型最小值 U8_MAX 0xFFFFFFFFFFFFFFFFU U8类型最大值 U8_MIN 0x0000000000000000U U8类型最小值 S2_MAX 0x7FFF S2类型最大值 S2_MIN 0x8000 S2类型最小值 S4_MAX 0x7FFFFFFF S4类型最大值 S4_MIN 0x80000000 S4类型最小值 S8_MAX 0x7FFFFFFFFFFFFFFF S8类型最大值 S8_MIN 0x8000000000000000 S8类型最小值 NULL 0 Null TRUE 1 真 FALSE 0 假 3.2. 变量扩展类型 3.2.1.结构体类型 Format typedef struct{ [member] … }ST_[module]_[variable]; Length of Identifier 最多32个字符 [module]模块名 [variable]变量名 只能使用大字母 [member] 成员名称需要按照3.3. 变量的规定。 禁止使用位域类型定义。 不过,Micro Controller Vendor提供的Micro-Controller的控制寄存器定义除外。 3.2.2.共用体类型 禁止使用共用体类型的变量定义。不过,Micro Controller Vendor提供的Micro-Controller的控制寄存器定义除外。 3.2.3.枚举类型 Format typedef enum{ [member] = 0, … }EN_[module]_[variable]; Length of Identifier 最多32个字符 [module]模块名 [variable]变量名 只能使用大字母 [member] 只能使用大字母 最初定义的成员,必须给出定义值。 3.3. #define 指示 3.3.1.Version定义 Format [file name]_MAJOR ([value]) [file name]_MINOR ([value]) [file name]_PATCH ([value]) Length of Identifier 最多32个字符 [file name]文件名 只能使用大字母。扩展名包含在内。 template.c TEMPLATE_C_MAJOR template_cfg.c TEMPLATE_CFG_C_MAJOR template.h TEMPLATE_H_MAJOR [value] MAJOR从1开始,MINOR和PATCH从0开始。 最大:到99 Major Version更新原因: 模块名变更。 品质保证版本发布后,功能的追加、变更和移除。 Major Version在递增更新时,Minor和Patch Version重置为0。 Minor Verison更新原因: 违反需求式样的问题修正。 品质保证版本发布前,功能的追加、变更和移除。 Minor Version在递增更新时,Patch Version重置为0。 Patch Version: 不违反需求式样的问题修正、QAC警告处理、注释修正等。 3.3.2. 字面量定义 Format [module]_[literal] ([value]) ※ Length of Identifier 最多32个字符 [module]模块名 [literal]字面量名 只能使用大字母 [value] 有符号整数 禁止添加“U”后缀 无符号整数 建议添加“U”后缀 浮点数 必须添加“F”后缀 表达式 必须使用括号()来表明计算顺序 ※: 数值的定义的前后,必须添加括号()。 ※: “([value])”的行内注释的位置,需要与其它#define采用空格对齐到相同位置。 ※: 如果变量作为字面量使用,建议定义为const修饰的变量。 3.3.3.#if…#endif 判定宏定义 Format __[module]_[option]__※ ([value]) Length of Identifier 最多32个字符 [module]模块名 [option]选项名 只能使用大字母 [value] 有符号整数 禁止定义 无符号整数 推荐添加“U”后缀 考虑到标签未定义的情况,不允许被定义为数值“0” 浮点数 禁止定义 表达式 必须使用括号()来表明计算顺序 ※: 使用#if...#endif指示的宏,除了用在头文件内防止重复包含的情况,宏名称需要以双下划线“__”开头和结尾。 3.3.4.函数宏定义 函数宏定义名称需要按照3.4.函数的规定。 除了以下两种用法以外,其它对函数宏的使用是被禁止的。 多处使用到的#define字面量的计算值,定义为literal/const 调用函数的代替 Micro controller控制寄存器的Read/Write访问 函数宏只在单一C源代码内使用时,推荐使用inline static函数来代替函数宏。编译器能否定义inline函数,需要在编译器的帮助文档中进行缺人。或者,与编译器的供应商进行商讨。 3.4. 变量 Format type [dt]_[s][a]_[module]_[variable]; Length of Identifier 最多32个字符 [dt]变量类型 标准类型 u1, u2, u4, u8, s1, s2, s4, s8 结构体类型 st 枚举类型 en 共用体类型 MISRA-C中禁止使用 函数指针类型 fp 变量指针类型 u1p, u2p, u4p, s1p, s2p, s4p, s8p, stp 空指针类型 vdp [s]作用域 ※ 函数域内的自动变量 t 函数阈内的参数变量 a 文件阈内的static变量 s 文件域内外的extern变量 g [a]数组 ※ 维数=0 无修饰字符 维数=1 p 维数=n p[n] [module]模块名 [variable]变量名 有const修饰 只能使用大字母 无const修饰 只能使用小字母 ※:结构体内的成员的符号名,省略[s]作用域和[a]数组的修饰符。 3.5. 函数 Format type [dt]_[s]_[module][function]([parameter]….); Length of Identifier 最多32个字节 [dt]返回值类型 标准类型 u1, u2, u4, u8, s1, s2, s4, s8 结构体类型 st 枚举类型 en 共用体类型 MISRA-C中禁止使用 变量指针类型 u1p, u2p, u4p, s1p, s2p, s4p, s8p, stp 空指针类型 vdp [s]作用域 static函数仅在文件内 s extern函数在文件内外 g [module]模块名 [function]函数名 大小字母均可使用 [parameter]形参名 3.3. 命名规则:遵从定义变量的命名格式 ※:函数原型声明时,必须定义形参。 ※函数内不会修改的参数,必须加上“const”修饰符。 ※: 头文件内的函数原型声明,原则上不添加extern前缀。没有禁止在函数原型声明中使用extern前缀。 4. 注释 4.1.必须遵守 1.不要使用ASCII以外的文字。禁止使用日语注释。 2.不要使用“//”注释。 3.不要嵌套注释。 4.不要跨行使用注释。在每一行,分别使用“/*”和“*/”来注释。 5.“/*”后面和“*/”的前面,插入空格。 6.在定义static/global变量声明、结构体时,要在变量和结构体成员声明所在行,以行末注释的形式,追加数值的单位、含义等描述。推荐对函数的参数、函数内的auto变量,追加注释。 7.每个函数定义,都需要加入注释。 8.在源代码的最后,记录变更履历、变更理由等。 template_cfg.c ※:在准备重复利用源代码时,对于重复利用方的可以变更的configuration代码,将行末的变更履历通过Version、Revision进行分割。将源代码提供方的Version,在重复利用方的Revision的变更履历中记录下来。 ※:变更履历Version需要保存3年以内的。3年以前的Version履历可以删除。 ※:变更履历Revision需要保存到重复利用该文件的项目结束为止。派生制品等项目重新启动的情况,可以删除变更履历Revision。 4.2. 推荐遵守 9.添加注释的最低限,是不降低代码的可维护性。 10.对代码的注释不限于在该行的行尾,可以在该行的前面数行进行缩排叙述。 5. #if…#endif 指示 5.1.必须遵守 对于#if 0.. #endif, #if 1.. #endif的使用,仅限于debug・test用的代码。在作为管理对象的范围内的代码、头文件中,禁止使用#if判定宏。 1.#if 的判定表达式使用小括号()。 2.#if 的判定表达式的结果为False时,编#error语句,用于指示不能完成编译。 3.#if 的判定宏的定义的值为“0”时,会与宏未定义的情况无法区分,因而禁止使用。 4.头文件内必须定义用于防止重复包含的#ifndef …. #endif。 5.判定宏名的是否已经定义的情况(微控制器定义和防止重复引入的判定),使用以下记载的形式。 #ifdef 宏名 或者 #if defined(宏名) #ifndef 宏名 或者 #if !defined(宏名) 5.2.推荐遵守 6.在#ifdef,#ifndef, #if 对应的 #else 和#endif 的所在行末,在一个空格后插入注释,明确对应关系。 7.#if 判定表达式为复合条件时,使用反斜线‘\’进行换行。 6. 控制语句 记述了控制语句的样式的规定。 6.1.分支控制、条件判定表达式 1.if, while, do..while控制的判定表达式内,不能含有赋值表达式。 2.在复合判定表达式中,推荐将逻辑运算符放在行末再换行插入新的语句。 按照这个编码规范来编C语言代码
最新发布
08-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值