Значение, сохраненное в 'var name', никогда не читается - PullRequest
2 голосов
/ 08 февраля 2012

Я немного борюсь с предупреждением компилятора.Здесь код:

    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 ]

4 голосов
/ 08 февраля 2012

Вы пропускаете перерывы после каждого случая.Используется только последнее назначение.

2 голосов
/ 08 февраля 2012

Добавить перерыв;заявление после каждого случая.Далее попробуйте добавить регистр по умолчанию.

2 голосов
/ 08 февраля 2012
  1. Это потому, что вы пропускаете break; операторы между вашими делами.
  2. Это потому, что вы пропускаете default:

Компилятор сообщает, что когдаваш fromVersion равен, например, 4, что бы вы ни присвоили ему в case 4:, оно будет немедленно перезаписано на case 5:, потому что break нет.Также сообщается, что когда fromVersion отрицательно или больше 5, ваш sql неинициализирован.

1 голос
/ 08 февраля 2012

Оператор Switch Структура: - Вам не хватает «break» и «default»:

switch (выражение)

{case match1:

      statements

      break;

 case match2:

      statements

      break;

 default:

      statements

      break;

}

0 голосов
/ 08 февраля 2012

Предупреждение, скорее всего, связано с тем, что вы не используете 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;
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...