2017-08-04 129 views
1

我閱讀下列sample code,我發現裏面loop()沒有任何語句中使用大括號:Arduino的大括號沒有聲明

// Start new MQTT connection 
MqttClient::ConnectResult connectResult; 
// Connect 
{ 
    MQTTPacket_connectData options = MQTTPacket_connectData_initializer; 
    options.MQTTVersion = 4; 
    options.clientID.cstring = (char*)MQTT_ID; 
    options.cleansession = true; 
    options.keepAliveInterval = 15; // 15 seconds 
    MqttClient::Error::type rc = mqtt->connect(options, connectResult); 
    if (rc != MqttClient::Error::SUCCESS) { 
    LOG_PRINTFLN("Connection error: %i", rc); 
    return; 
    } 
} 

正下方// Connect有問題的大括號。我知道,花括號用於將代碼封裝在if語句,循環,功能塊等內。示例代碼中使用的花括號的含義是什麼?我嘗試刪除有問題的花括號,草圖將編譯得很好。那麼這些大括號的區別或目的是什麼?

+1

它將任何局部變量(在本例中爲'options')的範圍限制爲塊。這裏的'options'成爲函數內其他'options'的一個完全獨立的變量。它還可以確保'選項'在塊結束時被破壞,而不是在整個函數結束前四處徘徊。 – jasonharper

回答

2

大括號服務器幾個目的在基於C的語言(如持有的if塊,因爲你正在做的),但第一和最後的這裏簡單定義局部範圍。在這種情況下,這些可以毫無問題地被移除,因爲沒有別的東西可以分成不同的範圍。 但是如果您擁有更多的代碼,您可能會這麼做,本地範圍內定義的任何局部變量(例如options)對於本地範圍外定義的東西都是不可見的。