Sqlite   发布时间:2022-05-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SQLite 访问编译生效的宏(ctime.c)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

ctime.c文件,将所有定义的宏,连接成一个字符串数组,可以通过字符串,查询是否该宏生效。

功能

该文件提供了几个函数,其实只有两个,用于访问有哪些宏被编译进sqlite中。

静态的常量字符串azCompiLeopt,保存了编译期间使用的宏,当然不包括@R_449_5607@CORE,并且由于是静态的变量,我们只能够通过如下的两个函数访问,并且没有提供当前有多少个宏定义的函数。

函数以及说明

int sqlite3_compiLeoption_used(const char*zOptName)

该函数判断传递进来的宏字符串,是否被编译进sqlite,如果是返回1,如果不是返回0

const char *sqlite3_compiLeoption_get(intN)

返回常量字符串数组第N个字符串,如果N超出常量字符串的范围,返回0,否则返回对应的字符串。

如何关闭

定义@R_449_5607@OMIT_COMPILeoPTION_DIAGS宏,就无法使用上面的函数

优点:节省了存储宏字符串常量的空间,一般情况下,没有哪种应用需要使用到该字符串常量,但是你不会想到的是,实际上除了一个默认指定的THREAD_SAFE宏,系统自带的宏几乎是没有的,所以如果你没有指定任何的宏,也就只有一个宏会编译进sqlite中,当然由于在编译的过程中,需要添加一些模块,或者屏蔽调用FTS1或者FTS2这些带有设计缺陷的全文搜索模块,不得不使用了@R_449_5607@CORE宏,所以别看sqlite提供了100多个宏定义,但看azCompiLeopt这个常量的定义就有400行,实际上,不会占用多少空间

添加获取编译宏个数的函数

假如我想访问现在到底有多少个宏编译进sqlite数据库中,或者我想输出所有的宏,很明显,我们只能够猜测大概有100个吧,然后,调用sqlite3_compiLeoption_get函数,判断返回值是否为空,不为空,打印看看!!

当然,目前还没有任何的证据表明,有这个必要。但这只是尝试练习。

for(int i = 0 ; i < 100 ; i++)

{

const char* p = sqlite3_compiLeoption_get(i);

if (p)

{

cout<<p<<endl;

}

}

方案一:企图访问azCompiLeopt字符串

ctime.c文件中,取消azCompiLeopt字符串数组的静态属性,然后想通过在main.cpp文件中,通过extern关键字声明azCompiLeopt,来达到使用的目的,结果是失败了!!

出现错误的问题报告如下:

'const char *const []': illegal sizeof operand

方案二:添加访问编译宏个数的函数

函数定义以及实现如下:

intsqlite3_compiLeoption_get_count()

{

returnArraySize(azCompiLeopt);

}

这里如果要让外部访问,就必须将该函数声明在sqlite3.h文件当中,我们可以在sqlite3.h文件中搜索上面两个函数是在什么地方声明的,自然就可以在下面追加即可

#ifndef @R_449_5607@OMIT_COMPILeoPTION_DIAGS

@R_449_5607@API int @R_449_5607@STDCALLsqlite3_compiLeoption_used(const char *zOptName);

@R_449_5607@API const char *sqlITE_STDCALLsqlite3_compiLeoption_get(int n);

@R_449_5607@API int@R_449_5607@STDCALL sqlite3_compiLeoption_get_count();

#endif

大佬总结

以上是大佬教程为你收集整理的SQLite 访问编译生效的宏(ctime.c)全部内容,希望文章能够帮你解决SQLite 访问编译生效的宏(ctime.c)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:ctime.c文件