Элемент, запускающий код сценария, передается в код. Нет необходимости искать его снова.
Sub RunAScript_code(item As Outlook.MailItem)
MsgBox "The item that triggered this code is: " & item.subject
End Sub
У меня нет подходящего компилятора Objective-C под рукой, но до тех пор, пока конструкции C идентичны:
switch { … }
дает вам одну область уровня блока, а не по одному для каждого case
. Объявление переменной в любом месте, кроме начала области, является незаконным, а внутри switch
является особенно опасным, потому что его инициализация может быть перегнута.
Выполните одно из следующих действий решить проблему?
NSString *viewDataKey;
switch (cellNumber) {
case 1:
viewDataKey = @"Name";
…
}
switch (cellNumber) {
case 1: {
NSString *viewDataKey = @"Name";
…
}
…
}
В C вы можете только объявлять переменные в начале блока перед любыми заявлениями, не объявляемыми.
{
/* you can declare variables here */
/* block statements */
/* You can't declare variables here */
}
В C ++ вы можете объявлять переменные где угодно.
switch (1) { case 0: int i = 1; break; default: /* wtf is i? */; }
Даже если вы можете объявлять переменные везде, внутри switch
опасно i>.
– ephemient
12 July 2009 в 05:46
Вы не можете объявить переменную в начале оператора case. Сделайте тестовый пример, который просто состоит из этого, и вы получите ту же ошибку.
Это не связано с объявлением переменных в середине блока - даже при принятии стандарта, который позволяет не заставит GCC принять декларацию в начале описания дела. Похоже, что GCC рассматривает метку case как часть строки и, таким образом, не позволяет там указывать.
Простым обходным решением является просто положить точку с запятой в начале дела, чтобы объявление не было в начале.
case
, а не о switch
. Смущение говорить о "начале" из него - case
- это всего лишь метка i>, и как таковая может только маркировать утверждения. Это действительная точка.
– ephemient
12 July 2009 в 06:24
...: statement
. Короче говоря, нет способа получить от statement
до declaration
. A compound-statement
(т. Е. { ... }
) (слабо) определяет ...
часть как zero or more block-items
, с блочным элементом (свободно), определенным как statement or declaration
. Кроме того, комментарий @Dan Olson ошибочен и не относится к C99, что очень четко определяет семантику смешанных объявлений и выражений wrt / initialization (C99 6.8.6.1 и т. Д.).
– johne
25 July 2009 в 04:41
Вы можете создать переменную в инструкции switch, но вам нужно будет создать ее внутри блока, чтобы определить область этой переменной.
Пример:
switch(number){
case 1:
{
// Create object here
// object is defined only for the scope of this block
}
break;
case 2:
{
// etc.
}
break;
default:
break;
}
Как решить предупреждение:
1.Вставьте одну ;
в первую строку блока вашего дела
2. Коды кода внутри фигурных скобок
Нельзя ли объявить переменную в блоке переключателя?
switch (0) { int i; }
является допустимым C89, а Objective-C является истинным надмножеством C (в отличие от C ++), поэтому все законное в C (по модулю украденные идентификаторы) является законным в Objective-C.
– ephemient
12 July 2009 в 05:41
Declaring a variable anywhere other than the beginning of the scope is illegal
. Это не так на C99. C99 оба допускают это и определяют семантику того, что происходит, когда «управление переходит под объявлением», и значение этой декларации в таких случаях. – johne 25 July 2009 в 04:46