2016-08-17 14 views
-1

こんにちは、私はusbdrivebyプロジェクトを変更します。 これは楽しいだけのキーボードです。 エラーメッセージapp: 'closeapp'はこのスコープで宣言されていません。 は、ここでは、コードです:'closeapp'はこのスコープで宣言されていません

#if defined(CORE_TEENSY) 
#define LED_PIN 11 
#else 
#define LED_PIN 13 
#endif 
void setup() { 
delay(800); 

    openapp("Terminal"); 
    typeln("screen -S SYSTEMUpdater"); 
    typeln("say dont use unknown usb sticks because its not safe."); 
    closeapp; 
} 
void openapp(String app) 
{ 
    cmd(KEY_SPACE); 
    typeln(app); 
} 
void typeln(String chars) 
{ 
    Keyboard.print(chars); 
    delay(ds); 
    Keyboard.println(""); 
    delay(ds * 4); 
} 
void closeapp 
{ 
    cmd(KEY_Q); 
} 
void k(int key) 
{ 
    Keyboard.set_key1(key); 
    Keyboard.send_now(); 
    delay(ds/2); 

    Keyboard.set_key1(0); 
    Keyboard.send_now(); 
    delay(ds/2); 
} 

void mod(int mod, int key) 
{ 
    Keyboard.set_modifier(mod); 
    Keyboard.send_now(); 
    Keyboard.set_key1(key); 
    Keyboard.send_now(); 
    delay(ds); 

    Keyboard.set_modifier(0); 
    Keyboard.set_key1(0); 
    Keyboard.send_now(); 
    delay(ds); 
} 

void ctrl(int key) 
{ 
    mod(MODIFIERKEY_CTRL, key); 
} 

void cmd(int key) 
{ 
    mod(MODIFIERKEY_GUI, key); 
} 

void shift(int key) 
{ 
    mod(MODIFIERKEY_SHIFT, key); 
} 

void loop() 
{ 
    digitalWrite(LED_PIN, HIGH); 
    delay(ds/2); 
    digitalWrite(LED_PIN, LOW); 
    delay(ds/2); 
} 

私は同じエラーを探しますが、私は書面でエラーをしたことをかなり確信しています。

+1

'void closeapp(' void closeapp(void){'と' closeapp; 'closeapp();' VTCはマイナーです。 –

答えて

1

機能closeappは、C言語では構文上有効ではありません。 それはのようなものでなければなりません:構文的に有効であることを

closeapp(); 

void closeapp() 
{ 
    cmd(KEY_Q); 
} 

また、関数呼び出しのようなものでなければなりません。

最後の点は、実装する前に関数を呼び出さないことです。これは、プロトタイプを提供するか、実際に呼び出される前にその定義を置くかのいずれかを意味します。

EDIT FYI:文closeapp;は構文的には有効ですが、42;のような空の命令です。文字通りそれはcloseappのアドレスなので、基本的には数字だけです。

+0

それでも、コンパイラは 'setup()'から呼び出された時点で 'closeapp()'の可視宣言をしていないと不平を言っているでしょう。 –

+0

編集前のバージョンが優れていました。 'closeapp;'を書いた結果は、構文的には有効ですが、**意味的には有効ではありません。つまり、OPが望むものではありません。この関数のアドレスのノーオペレーション評価にマップされます。また、可視宣言に関する私のところでは、コンパイラがエラーを出したり、**または**警告が出る可能性があります(警告が出ている場合は、すべてこれを行います)。別の仮定された署名 - 不一致の場合は未定義の動作につながります。 –

+0

うん、私は当時編集していた。まあ、私はまた、コンパイラは、closeappを削除し、最適化すると仮定します。あなたはそれが何もしていないと言ったので、デフォルトではステートメントです。 ちょうど正確に言えば、私はそれが構文的に有効な**関数呼び出し**ではないことを意味しましたが、構文的に有効なステートメントであることは事実です。 –

関連する問題