命令"pragma table_info('tablename')"列出列信息,"pragma foreign_key_list('tablename')"列出外键.如何显示表的其他约束(检查,唯一)?只解析表"sqlite_master"的字段"sql"?
我在Visual Studio 2015 sp3中使用C++.通过
#pragma init_seg(compiler)
Run Code Online (Sandbox Code Playgroud)
,我首先初始化一些静态变量(到内存管理). https://msdn.microsoft.com/en-us/library/7977wcck.aspx
但是还有
Run Code Online (Sandbox Code Playgroud)#pragma init_seg(compiler)
在wcerr.cpp(Microsoft Visual Studio 14.0\VC\crt\src\stl\wcerr.cpp)中,所以这些对象在我的对象之前初始化.
我可以wcerr.cpp通过任何编译/链接选项强制我的对象在对象之前被初始化吗?
c++ pragma static-variables visual-studio visual-studio-2015
Xcode中是否支持pragma列表?我只知道#pragma mark.我想在哪里学习其他人?
在最近的两周内,在没有发布我的应用程序更新的情况下,我开始收到一堆包含损坏数据库的报告.下面是堆栈跟踪.Android无法打开数据库,我的计算机上的sqlite-manager程序也无法打开.但是,fireite的SQLite manager-addon可以打开它.运行命令"compact database"后,数据库已修复,我可以在android中打开它.有什么方法可以在我的应用程序中做这样的事情吗?最大的问题是我甚至无法尝试打开数据库,因为较新版本的Android会立即删除并替换数据库,如下面的堆栈跟踪中所示.可以在不打开数据库的情况下以某种方式执行PRAGMA语句吗?
问候,
02-22 09:55:20.245: ERROR/Database(5382): CREATE TABLE android_metadata failed
02-22 09:55:20.245: ERROR/Database(5382): Failed to setLocale() when constructing, closing the database
02-22 09:55:20.245: ERROR/Database(5382): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-22 09:55:20.245: ERROR/Database(5382): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-22 09:55:20.245: ERROR/Database(5382): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-22 09:55:20.245: ERROR/Database(5382): Deleting and re-creating corrupt database …Run Code Online (Sandbox Code Playgroud) C++ 17引入了属性[[maybe_unused]].
我假设这是GCC和Clang的标准化版本: __ attribute __((unused)).
对于我不希望看到警告的未使用的函数,我
应该指定属性 吗?
功能声明?
void maybe_used_function() [[maybe_unused]];
Run Code Online (Sandbox Code Playgroud)
或函数定义?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
Run Code Online (Sandbox Code Playgroud)
任意一个?都?
标准化和编译器特定属性的效果是否相同?
我找不到任何有关放置行为的明确文档,以及常见的做法.
当我将属性放在函数体之前的定义中时,GCC和clang会给出错误:
void function();
int main(){}
void function() __attribute__((unused)) {}
Run Code Online (Sandbox Code Playgroud)
警告:GCC不允许在函数定义的此位置使用'unused'属性[-Wgcc-compat] void function()__ attribute __((unused)){
但是,该属性可以放在其他两个地方而不会出错:
__attribute__((unused)) void __attribute__((unused)) function() {}
Run Code Online (Sandbox Code Playgroud)
也许其中一种方法是我应该如何在函数定义中使用该属性?
编译器通常会提供一个开关,以便在代码无法访问时发出警告.我还看到了一些库的宏,它们为无法访问的代码提供断言.
是否存在提示,例如通过编译指示或内置,我可以传递给GCC(或任何其他编译器),如果确定实际可以达到预期无法访问的行,则会在编译期间发出警告或错误?
这是一个例子:
if (!conf->devpath) {
conf->devpath = arg;
return 0;
} // pass other opts into fuse
else {
return 1;
}
UNREACHABLE_LINE();
Run Code Online (Sandbox Code Playgroud)
这个值的作用是在预期的不可达行之上的条件发生变化之后检测到该行实际上是可达的.
我#pragma mark - Description经常使用Xcode来组织我的方法.但是,我发现有时我需要为我的方法分类和子类别,如下所示:
公共方法
- 助手方法
- 一个方法
- 其他类型的方法
- anotherMethod
私人方法
- 某种方法
- aPrivateMethod
这可能吗?
我正在创建一个GCC插件.
我正在尝试为特定的循环转换创建一个插件 - 完全展开N(给定参数)次.我已经正确安装了插件,我可以在编译过程中成功注册我的pragma.当我用函数注册pragma时c_register_pragma,我可以在词法分析(带函数handle_my_pragma)中处理它,但是我怎么能找到呢?
我也可以定义自己的传递并遍历GIMPLE,但是没有任何编译指示的痕迹.所以我的问题是:我的pragma在哪里?我如何用它来影响我的代码?或者你建议达到我的目标是什么?它不一定是pragma,但它似乎是一个好主意.另外,我知道MELT,但在GCC的研究中,我更喜欢C中的纯插件.
我的代码
static bool looplugin_gate(void)
{
return true;
}
static unsigned looplugin_exec(void)
{
printf( "===looplugin_exec===\n" );
basic_block bb;
gimple stmt;
gimple_stmt_iterator gsi;
FOR_EACH_BB(bb)
{
for (gsi=gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi), j++)
{
stmt = gsi_stmt(gsi);
print_gimple_stmt (stdout, stmt, 0, TDF_SLIM);
}
}
return 0;
}
void handle_my_pragma(cpp_reader *ARG_UNUSED(dummy))
{
printf ("=======Handling loopragma=======\n" );
enum cpp_ttype token;
tree x;
int num = -1;
token = pragma_lex (&x);
if (TREE_CODE (x) != INTEGER_CST)
warning (0, "invalid …Run Code Online (Sandbox Code Playgroud) 我正在使用OpenMP来提高循环上的程序效率.
但最近我发现在小循环上使用这个库降低了性能,并且使用正常方式更好.
事实上,我只想在满足条件的情况下使用openMP,我的代码是
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
Run Code Online (Sandbox Code Playgroud)
但我想要做的是在大小足够小的情况下禁用#pragma ,即:
if (size > OMP_MIN_VALUE)
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
Run Code Online (Sandbox Code Playgroud)
但是不起作用,更好的方法是编写循环两次,但我不想那样做...
if (size > OMP_MIN_VALUE)
{
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
}
else
{
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
}
Run Code Online (Sandbox Code Playgroud)
有什么更好的方法呢?
这与使用-O3时确定段错误的原因有关?在这个问题中,当-O3使用特定版本的GCC 编译时,我正在捕获特定函数中的段错误.在-O3,使用矢量化指令(at -O2,不使用它们).
我想在较低的优化级别中包装单个函数.根据GCC 4.2.2中特定功能的关闭优化,我可以做到.但是,按照问题和答案中的各种链接,我找不到"如何,确切地说,这样做"的答案.
如何将单个函数标记为使用不同的优化级别?
相关,我不想将此函数移动到单独的文件,然后为它提供不同的makefile配方.这样做可以打开另一种蠕虫病毒,比如仅在某些平台上将其应用于GCC 4.9.
pragma ×10
gcc ×5
c++ ×4
c ×3
sqlite ×2
xcode ×2
android ×1
built-in ×1
c++17 ×1
categories ×1
clang ×1
constraints ×1
corruption ×1
database ×1
gcc-plugins ×1
list ×1
objective-c ×1
openmp ×1
optimization ×1