关于宏的制表功能

告别参差不齐:Word文档中利用“调整宽度”功能实现多行文字精准对齐 本文详细介绍了如何在Word文档中使用“调整宽度”功能实现多行文字的精准对齐,解决中英文混排、全角半角混合等常见排版难题。通过三步操作和进阶技巧,帮助用户高效完成会议名单、产品目录等文档的排版工作,提升办公效率。 阅读详情

宏的制表功能上次用已经是七年前了,最近有段db2的静态SQL操作,刚好能用上,就又写了下,可是总感觉有点突兀,不知道是哪里出了问题了,难道注定苦丁一辈子?


1.数据表映射

  这个宏必须使用紧凑格式,原因是在后面的拼装时,竟然cpp 4.4.7竟然会把空格也莫名奇妙的拼装进去,没有仔细检查原因。

#ifdef FIRSET_ORDER_INFO_ITEMS
FIRSET_ORDER_INFO_ITEMS(order_id,___char,64,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_version,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(encoding,___char,8,"GBK",cb_macro)
ORDER_INFO_ITEMS(mer_cert_id,integer,0,0,cb_macro)
ORDER_INFO_ITEMS(signature,___char,20,"",cb_macro)
ORDER_INFO_ITEMS(acc_type,___char,20,"",cb_macro)
ORDER_INFO_ITEMS(acc_no,___char,20,"",cb_macro)
ORDER_INFO_ITEMS(sign_method,___char,4,"",cb_macro)
ORDER_INFO_ITEMS(trans_tp,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(sub_trans_tp,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(biz_type,___char,20,"",cb_macro)
ORDER_INFO_ITEMS(trans_chnl,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_front_url,varchar,64,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_back_url,varchar,64,"",cb_macro)
ORDER_INFO_ITEMS(access_tp,___char,1,"",cb_macro)
ORDER_INFO_ITEMS(acq_ins_id_cd,___char,11,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_class,___char,4,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_cd,___char,24,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_name,varchar,64,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_nm,varchar,4,"",cb_macro)
ORDER_INFO_ITEMS(sub_mchnt_cd,___char,32,"",cb_macro)
ORDER_INFO_ITEMS(sub_mchnt_name,varchar,64,"",cb_macro)
ORDER_INFO_ITEMS(sub_mchnt_nm,varchar,64,"",cb_macro)
ORDER_INFO_ITEMS(mchnt_order_id,varchar,6,"",cb_macro)
ORDER_INFO_ITEMS(trans_tm,___char,17,"",cb_macro)
ORDER_INFO_ITEMS(trans_at,decimal,12,0,cb_macro)
ORDER_INFO_ITEMS(trans_curr_cd,___char,3,"",cb_macro)
ORDER_INFO_ITEMS(customer_info,___char,5,"",cb_macro)
ORDER_INFO_ITEMS(pay_timeout,___char,5,"",cb_macro)
ORDER_INFO_ITEMS(term_id,___char,8,"",cb_macro)
ORDER_INFO_ITEMS(req_resv,varchar,256,"",cb_macro)
ORDER_INFO_ITEMS(reserved,varchar,512,"",cb_macro)
ORDER_INFO_ITEMS(failed_front_url,varchar,256,"",cb_macro)
ORDER_INFO_ITEMS(number_of_installments,___char,5,"",cb_macro)
ORDER_INFO_ITEMS(pay_method,integer,0,0,cb_macro)
ORDER_INFO_ITEMS(iss_ins_id_cd,___char,11,"",cb_macro)
ORDER_INFO_ITEMS(mac_addr,varchar,32,"",cb_macro)
ORDER_INFO_ITEMS(customer_ip,___char,39,"",cb_macro)
ORDER_INFO_ITEMS(trans_no,___char,27,"",cb_macro)
ORDER_INFO_ITEMS(area_cd,___char,4,"",cb_macro)
ORDER_INFO_ITEMS(phone_no,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(trans_ip,___char,39,"",cb_macro)
ORDER_INFO_ITEMS(product_info,varchar,128,"",cb_macro)
ORDER_INFO_ITEMS(inner_reserved1,varchar,128,"",cb_macro)
ORDER_INFO_ITEMS(inner_reserved2,varchar,128,"",cb_macro)
ORDER_INFO_ITEMS(preferential,___char,3,"",cb_macro)
ORDER_INFO_ITEMS(discount,___char,3,"",cb_macro)
ORDER_INFO_ITEMS(resp_cd,___char,7,"",cb_macro)
ORDER_INFO_ITEMS(exchange_date,___char,9,"",cb_macro)
ORDER_INFO_ITEMS(consume_at,decimal,12,0,cb_macro)
ORDER_INFO_ITEMS(preferential_at,decimal,12,0,cb_macro)
ORDER_INFO_ITEMS(reback_sum,decimal,12,0,cb_macro)
ORDER_INFO_ITEMS(proc_st,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(sys_no,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(bind_id,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(pay_card_type,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(security_type,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(query_id,___char,32,"",cb_macro)
ORDER_INFO_ITEMS(bill_no,varchar,64,"",cb_macro)
ORDER_INFO_ITEMS(additional_district_code,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(bill_month,___char,2,"",cb_macro)
ORDER_INFO_ITEMS(bill_query_info,___char,64,"",cb_macro)
ORDER_INFO_ITEMS(usr_id,varchar,128,"",cb_macro)
ORDER_INFO_ITEMS(card_type,varchar,12,"",cb_macro)
ORDER_INFO_ITEMS(other_payer,varchar,128,"",cb_macro)
ORDER_INFO_ITEMS(pri_acct_no,___char,19,"",cb_macro)
ORDER_INFO_ITEMS(trans_dt,___char,8,"",cb_macro)
ORDER_INFO_ITEMS(refund_at,decimal,12,0,cb_macro)
LASTER_ORDER_INFO_ITEMS(trans_idx,___char,27,"",cb_macro)
#undef FIRSET_ORDER_INFO_ITEMS
#undef ORDER_INFO_ITEMS
#undef LASTER_ORDER_INFO_ITEMS
#undef ___char
#undef varchar
#undef integer
#undef decimal
#undef timestamp
#endif
2.分表操作映射

   本例中分表一共12张

#ifdef TBL_MAPPING_BEGIN
TBL_MAPPING_BEGIN
TBL_MAPPING_ITEM(01)
#define TBL_NAME MK_TBL_NAME(01)
#include "order_op.h"
TBL_MAPPING_ITEM(02)
#define TBL_NAME MK_TBL_NAME(02)
#include "order_op.h"
TBL_MAPPING_ITEM(03)
#define TBL_NAME MK_TBL_NAME(03)
#include "order_op.h"
TBL_MAPPING_ITEM(04)
#define TBL_NAME MK_TBL_NAME(04)
#include "order_op.h"
TBL_MAPPING_ITEM(05)
#define TBL_NAME MK_TBL_NAME(05)
#include "order_op.h"
TBL_MAPPING_ITEM(06)
#define TBL_NAME MK_TBL_NAME(06)
#include "order_op.h"
TBL_MAPPING_ITEM(07)
#define TBL_NAME MK_TBL_NAME(07)
#include "order_op.h"
TBL_MAPPING_ITEM(08)
#define TBL_NAME MK_TBL_NAME(08)
#include "order_op.h"
TBL_MAPPING_ITEM(09)
#define TBL_NAME MK_TBL_NAME(09)
#include "order_op.h"
TBL_MAPPING_ITEM(10)
#define TBL_NAME MK_TBL_NAME(10)
#include "order_op.h"
TBL_MAPPING_ITEM(11)
#define TBL_NAME MK_TBL_NAME(11)
#include "order_op.h"
TBL_MAPPING_ITEM(12)
#define TBL_NAME MK_TBL_NAME(12)
#include "order_op.h"
TBL_MAPPING_END
#undef TBL_MAPPING_BEGIN
#undef TBL_MAPPING_ITEM
#undef TBL_MAPPING_END
#endif

3.数据表更新操作

#ifdef MK_TBL_NAME

	SET_STRING_DATA(values,order_id,%64s);

	EXEC SQL SELECT
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) name,
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) name
#include "order_items.h"
	INTO
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) :var_##name indicator :indic,
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) :var_##name indicator :indic
#include "order_items.h"
	FROM TBL_NAME
	WHERE order_id = :var_order_id;

	if(sqlca.sqlcode != 0 && sqlca.sqlcode != 100){
		SQL_ERROR;
		return sqlca.sqlcode;
	}
	if(-1 == indic || 100 == sqlca.sqlcode){
		set_default_value();
		set_target_value(values);
		EXEC SQL INSERT INTO TBL_NAME(
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) name,
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) name
#include "order_items.h"
		)VALUES(
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) :var_##name,
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) :var_##name
#include "order_items.h",
		);
		if( 0 != sqlca.sqlcode){
			int __ret__ = sqlca.sqlcode;
			SQL_ERROR;
			EXEC SQL ROLLBACK;
			return __ret__;
		}
		EXEC SQL COMMIT;
		return 0;
	}
	set_target_value(values);

	EXEC SQL UPDATE TBL_NAME SET
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) name = :var_##name,
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#include "order_items.h",
	rec_upd_ts = CURRENT TIMESTAMP
		WHERE order_id = :var_order_id;

	if(sqlca.sqlcode != 0) {
		int __ret__ = sqlca.sqlcode;
		SQL_ERROR;
		EXEC SQL ROLLBACK;
		return __ret__;
	}
	EXEC SQL COMMIT;
	return 0;
}
#endif
#undef TBL_NAME

4.最终操作函数映射


#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sqlutil.h>
#include <sqlenv.h>
#include <sqlcli1.h>
#include <sqlcodes.h>
#include <dk_log.h>
#include "static_modify_order.h"

#define ___char(name,size,default_value,suffix) static const char sc_##name[size + 1] = default_value
#define varchar(name,size,default_value,suffix) static const char sc_##name[size + 1] = default_value
#define integer(name,size,default_value,suffix) static const int  sc_##name = default_value
#define decimal(name,size,default_value,suffix) static const double sc_##name = default_value
#define timestamp(name,size,default_value,suffix) static const char sc_##name[26 + 1]
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) type_name(name,size,default_value,comments);
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#include "order_items.h"

EXEC SQL include sqlca;

EXEC SQL BEGIN DECLARE SECTION;
#define ___char(name,size,default_value,suffix) char var_##name[size + 1] = default_value
#define varchar(name,size,default_value,suffix) char var_##name[size + 1] = default_value
#define integer(name,size,default_value,suffix) sqlint32  var_##name = default_value
#define decimal(name,size,default_value,suffix) double var_##name = default_value
#define timestamp(name,size,default_value,suffix) char var_##name[26 + 1]
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) type_name(name,size,default_value,comments);
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#include "order_items.h"
short indic = -1;
EXEC SQL END DECLARE SECTION;


#define SET_STRING_DATA(values,name,fmt) do{\
	dk_data_unset_t * __data__ = dk_array_find(values,#name);\
	if(NULL == __data__){\
		break;\
	}\
	sscanf(__data__->str_value_->ptr_,#fmt,var_##name);\
}while(0)

#define SET_VALUE_DATA(values,name,fmt) do{\
	dk_data_unset_t * __data__ = dk_array_find(values,#name);\
	if(NULL == __data__){\
		break;\
	}\
	sscanf(__data__->str_value_->ptr_,#fmt,&var_##name);\
}while(0)


static void set_default_value(void){
#define ___char(name)   memcpy(var_##name,sc_##name,sizeof(var_##name))
#define integer(name)   var_##name = sc_##name
#define varchar   ___char
#define timestamp ___char
#define decimal   integer	
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) type_name(name);
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#include "order_items.h"	
}

static void set_target_value(dk_array_t* values){
#define ___char(values,name,size)   SET_STRING_DATA(values,name,%##size##s)
#define integer(values,name,size)   SET_VALUE_DATA(values,name,%d)
#define decimal(values,name,size)   SET_VALUE_DATA(values,name,%lf)
#define varchar   ___char
#define timestamp ___char
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) type_name(values,name,size);
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#include "order_items.h"
}

static void hint_final_value(){	
#define ___char(values,name,size)   DK_LOG_TRACE("sss",#name, " = ",var_##name)
#define integer(values,name,size)   DK_LOG_TRACE("ssd",#name, " = ",var_##name)
#define decimal integer
#define varchar   ___char
#define timestamp ___char
#define ORDER_INFO_ITEMS(name,type_name,size,default_value,comments) type_name(values,name,size);
#define FIRSET_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#define LASTER_ORDER_INFO_ITEMS ORDER_INFO_ITEMS
#include "order_items.h"	
}



#define SQL_ERROR DK_LOG_ERROR("ssdsss", "\n-------------------------------------\n",\
		"SQLCODE          = ",sqlca.sqlcode,\
		"SQLSTATE         = ",sqlca.sqlstate,\
		"\n-------------------------------------\n") 


#define TBL_MAPPING_BEGIN
#define TBL_MAPPING_ITEM(num) static int modify_order_tbl##num(dk_array_t* values) {
#define TBL_MAPPING_END
#define MK_TBL_NAME(num) tbl_order_inf##num
#include "order_list.h"
#undef MK_TBL_NAME

typedef int (*tbl_operator)(dk_array_t*);
typedef struct table_mapping_tag{
	const char* suffix;
	tbl_operator op;
}table_mapping_t;

#define TBL_MAPPING_BEGIN static table_mapping_t tbl_mapping[] = {
#define TBL_MAPPING_ITEM(num) {#num,modify_order_tbl##num},
#define TBL_MAPPING_END   {NULL,NULL}};
#include "order_list.h"
int modify_order_info_tbl(const char* suffix,dk_array_t* vals){
	const table_mapping_t* tmp = tbl_mapping;
	for(; NULL != tmp->suffix; ++tmp){
		if(0 == strcmp(tmp->suffix, suffix)){
			return tmp->op(vals);
		}
	}
	DK_LOG_ERROR("sss","not found the process function at " , suffix);
	return -1;
}


static int sqlcodefilter(int sqlcode){
	DK_LOG_TRACE("sd","sqlcode =  " , sqlcode);
	switch(sqlcode)	{
		case -1024:
		case -900:
		case -30081:
			return -1;
		default :
			return 0;
	}
}

static int getsqlcode( void ){
	EXEC SQL BEGIN DECLARE SECTION;
	char db_timestamp[27];
	EXEC SQL END DECLARE SECTION;
	EXEC SQL SELECT CURRENT TIMESTAMP INTO :db_timestamp FROM SYSIBM.SYSDUMMY1;
	return(sqlca.sqlcode);
}
int connect_db(const char* db,const char* user,const char* pass,const char* schema){
	EXEC SQL BEGIN DECLARE SECTION;
	struct {
		/*
		 数据库名
		 */
		char db[20];
		/*
		 用户名
		 */
		char user[20];
		/*
		 用户密码
		 */
		char pass[20];
		/*
		 SCHEMA
		 */
		char schema[20];
	} cfg;
	EXEC SQL END DECLARE SECTION;
	/*
	 *判断数据库是否已经连接上,
	 *如果没有连接上,
	 *就获取配置文件信息,
	 *重新连接数据库
	 */
	if (0 == sqlcodefilter(getsqlcode())) {
		DK_LOG_TRACE("s","DB2 is connected");
		return 0;
	}
	EXEC SQL CONNECT RESET;
#define SET_CFG_VALUE(name) snprintf(cfg.##name,sizeof(cfg.##name),"%s",name)
	SET_CFG_VALUE(db);
	SET_CFG_VALUE(pass);
	SET_CFG_VALUE(user);

	/*
	 连接数据库
	 */
	EXEC SQL CONNECT TO :cfg.db	USER :cfg.user USING :cfg.pass;
	if (sqlca.sqlcode != 0) {
		SQL_ERROR;
		return -1;
	}
	/*
	 设置SCHEMA
	 */
	if(NULL == schema){
		return 0;
	}
	SET_CFG_VALUE(schema);
#undef SET_CFG_VALUE		
	EXEC SQL SET CURRENT SCHEMA: cfg.schema;
	if (sqlca.sqlcode != 0) {
		SQL_ERROR;
		return -1;
	}
	return 0;
}

int disconnect_db(void){
	/*
	 *判断数据库的连接状态是否是断开状态
	 *如果不是断开状态需要重新断开
	 *
	 */
	EXEC SQL CONNECT RESET;
	SQL_ERROR;
	return (sqlca.sqlcode != 0) ? -1 : 0;
}








从零构建:Simulink与PX4的快速原型开发实战 本文详细介绍了如何利用Simulink与PX4进行四旋翼无人机的快速原型开发,涵盖环境搭建、动力学建模、控制器设计、仿真验证及自动代码生成全流程。通过实战案例展示姿态控制器的实现与调试,帮助开发者高效完成从算法设计到硬件部署,显著提升开发效率并降低试错成本。 阅读详情

相关推荐

高通camera open代码流程(hal到kernel)

内容:简单介绍Camera open代码调用流程,从HAl到kernel。(api1+hal1) 前言 Android camera api和hal对应关系。安卓在版本更新过程中,camera相关代码也经历了几个版本的更新,表现为camera HAL版本更新(HAL1->HAL2->HAL3),camera API版本更新(camera API1->camera API2),接下...

oxoo123的专栏 4276

富友支付 统一下单接口 自创php版本demo

看了文档才发现demo只有java版本的 那可不妙啊 还好在我的坚持与努力下 终于参透了这文档. 代码如下自创php版本demo

黄昏后的救赎的博客 2616

ubuntu22.04 安装部署 openclaw

ubuntu22.04 安装部署 openclaw

nalanxiaoxiao2011的博客 980

宏的录制——制作工资表

以下是用宏制作工资表的代码Sub 宏1()'' 宏1 宏'' 快捷键: Ctrl+p'    ActiveCell.Rows("1:1").EntireRow.Select    Selection.Copy    ActiveCell.Offset(2, 0).Rows("1:1").EntireRow.Select    Selection.Insert Shift:=xlDownEnd Su...

weixin_42127628的博客 771

Linux 之 supervisor安装和使用

运行Supervisor的后台服务,它用来启动和管理那些你需要Supervisor管理的子进程,响应客户端发来的请求,重启意外退出的子进程,将子进程的stdout和stderr写入日志,响应事件等。它是Supervisor最核心的部分。

chang995196962的博客 5545

全志T113 Tina5.0开发:(一)添加自己的板级支持包

3.验证 先执行 source build/envsetup.sh ,然后lunch,下图可见9就是我们自己添加的板子。2. 1)修改 t113-evb1.mk重命名为t113-ws_devboard。我使用的spinand,只需要修改openwrt里面的文件即可。以下内容仅作为自己笔记,如果错误欢迎留言指出。修改t113-ws_devboard。

u014428915的博客 1164

php富友表单提交接口对接

//此处是富友注册接口对接,采用表单的形式,pc和wap调用的是不同的接口 <?php define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); require(ROOT_PATH . 'includes/lib_payment.php'); require(ROOT...

weixin_30471561的博客 601

SolidWorks草图绘制实战:如何用图片参考快速搞定智能小车底板设计

本文详细介绍了在SolidWorks中利用图片参考进行草图绘制的实战方法,以智能小车底板设计为例,帮助设计师快速将概念转化为精准三维模型。通过插入、对齐参考图片并高效描图,结合参数化约束与尺寸驱动,大幅提升设计效率和准确性,尤其适合新手入门与老手优化工作流。

rust6ferris的博客 218

富友支付接口对接不是必填的值如何处理

1.拿注册接口举例子 正常需要的签名明文: back_notify_url+"|"+bank_nm+"|"+capAcntNo+"|"+certif_id+"|"+city_id+"|"+cust_nm+"|"+email+"|"+mchnt_cd+"|"+mchnt_txn_ssn+"|"+mobile_no+"|"+ page_notify_url +"|"+parent_bank_id+...

weixin_30262255的博客 1035

一文读懂GPU通信互联技术:GPUDirect、NVLink与RDMA

GPUDirect是NVIDIA开发的一项技术,旨在实现GPU与其他设备(如网络接口卡NIC和存储设备)之间的直接通信和数据传输,而无需CPU的参与。传统上,数据在GPU和另一个设备之间传输时,必须通过CPU,这导致潜在的性能瓶颈和延迟增加。GPUDirect技术则通过绕过CPU,直接访问和传输数据,显著提高系统性能。NVLink是NVIDIA开发的一种高速、高带宽的互连技术,用于连接多个GPU之间或GPU与其他设备(如CPU、内存等)之间的通信。

异构算力老群群(在读985计算机博士生)的技术博客 7774

2026年AI视频生成大模型全景指南:国内外主流工具深度对比与选型建议

AI视频生成技术在2025年至2026年间取得了突破性进展,从"能用"进化到"好用",商业化应用加速落地。中美双轨竞争格局基本成型,国内模型在技术追赶和本土化体验方面展现出强劲竞争力。对于用户而言,选择合适的AI视频生成工具需要综合考虑技术性能、使用门槛、成本预算和具体需求。零基础新手推荐海艺AI、通义万相等低门槛工具;进阶创作者可根据需求选择可灵AI、即梦AI、海艺AI等;专业开发者和企业用户可考虑智谱清影的开源能力或可灵AI的商业化服务。

nmdbbzcl的博客 2841

解决Rust多行字符串痛点:indoc宏常见问题与解决方案终极指南

在Rust开发中,处理多行字符串总是让开发者头疼不已 😅。传统的多行字符串字面量需要手动处理缩进和换行,代码看起来既不美观又容易出错。今天,我将为大家介绍一个解决这个问题的终极工具——indoc宏,并分享常见问题的完整解决方案。 ## 什么是indoc宏?为什么你需要它? indoc(Indented Documents)是一个Rust过程宏,专门用于处理带缩进的多行字符串。它能在编译时自动

gitblog_00456的博客 925

【模型实战】MiMo-VL-7B讲解与实战

维度成绩MMMU70.6(图像理解最难测试之一)VideoMME70.8(视频理解标杆)59.4(超越78B参数模型)56.1(超过专用GUI模型)Elo评分开源VLM排名第一(7B~72B)社区热度过去一个月下载超1,600次(RL+SFT)📌一句话概括MiMo-VL 是目前性能最强、推理最稳、体验最佳、生态最全的7B级开源视觉语言模型。

m0_47867638的博客 1198

vs code 不能选中行_错误信息:VS2010断点不能命中

在一次代码调试过程中,发现明明设置了的断点,但是VS始终不能在断点的位置停下来。使用了以下方法:无效1) 网上的说法是重新编译整个工程。我尝试了先删除SDF文件并重新编译,问题依旧。2) 检查了各个资源ID,确认没有重复的ID,文件依旧。3) 还有一种方法可以解决此问题,但是我认为不够好。点击菜单栏“调试”》“选项和设置”》“常规”》去掉“要求源文件与原始版本相同”前面的勾。这种方法没有要求源文件...

weixin_39604276的博客 410

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

excel中宏与VBA的关系

Excel 办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,因此,绝大多数的使用者仅使用了Excel的一般制表功能,很少使用到“VBA”。 用“VBA”语言编制程序,并集成到Excel中,可以定制特定的、功能强大的Excel软件(这正是Excel强大功能的突出所在)。 但是,有极少数的人可能会利用“VBA”语言编制专门破...

weixin_30918633的博客 838

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

我的NotePad++设置

文章目录常用设置显示空格 制表符空格替换 tab背景颜色设置复制当前行 宏录制参考链接 常用设置 显示空格 制表符 空格替换 tab 背景颜色设置 豆沙绿 RGB:199, 237, 204 . 复制当前行 宏录制 说明:点击宏录制后,notepad 会记录键盘操作,操作完之后,保存宏,设置快捷键即可 比如:复制当前行 设置快捷键为: Ctrl + ~ 操作为:Home + Home + Shift + End + Ctrl + C . 参考链接 1、豆沙绿 2、NotePad++设置背景颜

flyaaa123的博客 3713

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vim相关

vim相关 保存和传递宏 1 先建立一个宏。如上 2 在任意一个文件的空白位置normal状态下,命令"ap 即可以把宏的内容显示出来。比如说我的宏是: "ohello th id<80>kb<80>kb<80>kbis is a a<80>kba<80>kbmaco of ...

weixin_30412167的博客 87

excel工具箱_方方格子:你一定得知道的Excel工具箱,从此做表在再不苦手

方方格子是一款大型的Excel工具箱,支持Office 2007及此后发布的(包含Microsoft 365)各版本Excel及、WPS。内含上百个实用功能——聚光灯、宏收纳箱、高级排序……众多在平日看似繁杂的事项都能一键完成,再也不用放下处理一半的表格切出浏览器百度接下来应该怎么做。对于小白用户来说,这无疑是逆袭的利器。日常的制表过程中,配上方方格子可以大大提高工作效率。如果您曾经因繁...

weixin_39559079的博客 2170

GLSL的预处理器都有哪些规定?

当根据上述规则链接(link)符合版本要求的shader时,其他的链接时error将依据(shader所处上下文版本对应的GLSL版本的链接规则)进行处理。粘接结果必须是一个有效的token,这就由宏(macro)的展开情况决定了。在GLSL中定义或取消定义这样的宏(macro)名称,本身不会导致error,但重复定义相同的宏(macro)名称可能导致意料之外的情况。开头的宏(macro)名称也是被保留的,如果在GLSL中定义或取消定义这样的宏(macro)名称,就会导致error。表示GLSL版本号。

weixin_40703450的博客 81

Word双语目录制作全攻略

对于复杂需求,可通过插入域代码实现。按。

weixin_49938552的博客 438

VC项目配置基础(转载)

一.IDE基础配置 1.字体 VC6中“Tools→Options→Format→Font”配置字体;VC2005中“工具→选项→环境→字体和颜色”配置字体。 编写代码一般采用等宽字体,等宽点阵(位图)字体,相对矢量字体而言具有兼容性好和显示清晰的优点。常用的编程等宽字体包括Fixedsys(VC6和notepad御用字体)、Consolas、YaHei Mono。 VC6默认

u011450490的博客 968

全国计算机二级aoa真题题库,计算机AOA试题单选判断及答案.docx

1、Word 2010插入题注时如需加入章节号,如“图1-1”,无需进行的操作是____D_。(A)将章节起始位置套用内置标题样式(B)将章节起始位置应用多级符号(C)将章节起始位置应用自动编号(D)自定义题注样式为“图”2、Word 2010可自动生成参考文献书目列表,在添加参考文献的“源”主列表时,“源”不可能直接来自于 ___A___。(A)网络中各知名网站(B)网上邻居的用户共享(C)电脑...

weixin_35972199的博客 3029

linux中的vsprintf_linux内核分析之vsprintf.c

#include #include 判断给定字符是不是0-9的数字#define is_digit(c)((c) >= '0' && (c) <= '9')将给定数字字符串转换成整型static int skip_atoi(const char **s){int i=0;判断字符是不是数字,如果是数字就累加while (is_digit(**s))i = i*10 +...

weixin_42502060的博客 533

【理解】制表符 \t

制表符 制表符\t是C++的转义符,相当于键盘上按下TAB键之间的距离,一般为8个空格。 出现问题 使用制表符后显示的长度不一致 原因 使用制表符是把输出的切入点移动到下一个能被8整除的位置上。 即当打印小于八格的结果,用空格补足八格再打印下一个结果;当大于等于八格,小于十六格,补足十六格;以此类推。 测试 1.代码 #include<iostream> using...

weixin_43978807的博客 2万+

Word的制表位和txt的制表符-ChatGPT4o作答

尽管制表符和制表位都涉及文本的对齐和布局,但它们在。文件中,制表符通常用来实现文本的对齐和分隔。在纯文本格式中,制表符没有复杂的格式控制选项,其作用主要体现在通过空白字符来调整文本的显示位置。文件中制表符更高级的功能,它是对文本进行精确对齐的工具。制表位可以用来在文档中设置不同的对齐位置,使得文本在页面上更加有序和易于阅读。文档中的作用和实现方式有所不同。接下来,我将详细讲解这两者的区别、作用以及如何在不同环境下使用它们。,你可以在不同的文本编辑环境中更高效地管理和排版文档。在文本编辑和排版中,

qq_46215223的博客 1420

宏

宏(英语:Macro)是一种批量处理的称谓。 计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。 宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。 宏的特点:批量批处理的称谓 宏的用途:自动化频繁使用的序列 介绍 宏就是.

顺其自然~专栏 1万+
上一篇: 一个类似jsonreader的c++实现
下一篇: 一个c++版本的json实现思路
FlyAnyWhere
博客等级 码龄24年 5粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值