永远不会读取存储到'var name'的值

时间:2012-02-08 13:56:18

标签: iphone objective-c memory-management

我在编译器警告方面有点挣扎。代码如下:

    const char *sql;
switch (fromVersion) {
    case 0:
    {
        sql = "ALTER TABLE abiliator_options ADD COLUMN new_column00 TEXT NOT NULL DEFAULT 'migrated from version 0'";
    }
    case 1:
    {
        sql = "ALTER TABLE abiliator_options ADD COLUMN new_column01 TEXT NOT NULL DEFAULT 'migrated from version 1'";
    }
    case 2:
    {
        sql = "ALTER TABLE abiliator_options ADD COLUMN new_column02 TEXT NOT NULL DEFAULT 'migrated from version 2'";
    }
    case 3:
    {                       
        sql = "ALTER TABLE abiliator_options ADD COLUMN new_column03 TEXT NOT NULL DEFAULT 'migrated from version 3'";
    }
    case 4:
    {                       
        sql = "ALTER TABLE abiliator_options ADD COLUMN new_column04 TEXT NOT NULL DEFAULT 'migrated from version 4'";
    }
    case 5:
    {                       
        sql = "ALTER TABLE abiliator_options ADD COLUMN new_column05 TEXT NOT NULL DEFAULT 'migrated from version 5'";
    }
}


sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
{
    if (sqlite3_step(selectstmt) == SQLITE_DONE) 
    {           
        NSLog(@"Alter statement successful");
        [self setDatabaseSchemaVersion];
    }
    else {

        NSLog(@"Failed to alter the table with message '%s'.", sqlite3_errmsg(database));
    }
}
else {
    NSLog(@"Failed to prepare the statement with message '%s'.", sqlite3_errmsg(database));

}
sqlite3_finalize(selectstmt);

第一个警告是存储到'sql'的值永远不会被读取所有sql var赋值,除了交换机中的最后一个(案例5)。案例5不会导致警告。

第二个警告是函数调用参数是未初始化的值。这是为了 if(sqlite3_prepare_v2(database,sql,-1,& selectstmt,NULL)== SQLITE_OK) 言。

提前感谢您的提示。

5 个答案:

答案 0 :(得分:4)

每个案件后你都错过了休息时间。只使用了最后一个作业。

答案 1 :(得分:2)

  1. 这是因为您的案例中缺少break;个陈述。
  2. 这是因为您错过了default:
  3. 编译器会告诉您,当您的fromVersion为4时,case 4:中分配给它的任何内容都会被case 5:立即覆盖,因为没有break 1}}。它还告诉您,当fromVersion为负数或超过5时,您的sql未初始化。

答案 2 :(得分:2)

添加休息时间;每个案件后的陈述。 进一步尝试添加默认案例。

答案 3 :(得分:1)

切换语句结构: - 您缺少“break”和“default:”

  

切换(表达式)

     

{        case match1:

      statements

      break;

 case match2:

      statements

      break;

 default:

      statements

      break;
     

}

答案 4 :(得分:0)

警告很可能是因为您没有在交换机中使用break;(您正在设置旧值而不使用它们)。

switch (fromVersion) {
case 0:
{
    sql = "ALTER TABLE abiliator_options ADD COLUMN new_column00 TEXT NOT NULL DEFAULT 'migrated from version 0'";
    break;
}
case 1:
{
    sql = "ALTER TABLE abiliator_options ADD COLUMN new_column01 TEXT NOT NULL DEFAULT 'migrated from version 1'";
    break;
}
...