2012-03-05 26 views
0

WARNING: While resolving call to function 'help' arguments were dropped!optmizationsでコンパイルすると、なぜこの警告が表示されますか?

gcc -O3 codice -o out/codiceを使用してコンパイルすると、この厄介な警告が表示されます。コンパイルが終わったので、なぜこれが起こっているのだろうかと思っています。

私はxcode 4.3をインストールしたMac上で動作しています。それが使用されるコンパイラが

....次のようにIは-O2/-O1/-Oに -O3を切り替えた場合、それは同じ警告

にコードを付与し続けることi686-apple-darwin11-llvm-gcc-4.2

注あります

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <fcntl.h> 
#include <signal.h> 
#include <string.h> 
#include <math.h> 

void help(); 

char *codice_encrypt(char *in); 
char *codice_decrypt(char *in); 

void sigint_handler(int signal) { 
    exit(2); 
} 

int main (int argc, char **argv) { 

    if (argc != 3) { 
     help(); 
    } 

    signal(SIGINT, sigint_handler); 
    char *ret, *status; 
    int tmpret; 

    if (strcmp(argv[1], "e") == 0 || strcmp(argv[1], "encrypt") == 0) { 
     status = "Encrypting...\n"; 
     tmpret = write(STDOUT_FILENO, status, strlen((const char *)status)); 
     ret = codice_encrypt(argv[2]); 
    } else if (strcmp(argv[1], "d") == 0 || strcmp(argv[1], "decrypt") == 0) { 
     status = "Decrypting...\n"; 
     tmpret = write(STDOUT_FILENO, status, strlen((const char *)status)); 
     ret = codice_decrypt(argv[2]); 
    } else { 
     status = "Could not understand command line arguments O.o\n"; 
     tmpret = write(STDOUT_FILENO, status, strlen((const char *)status)); 
     help(STDOUT_FILENO); 
    } 

    status = "Success!\nRetval:\n\n"; 
    tmpret = write(STDOUT_FILENO, status, strlen((const char *)status)); 
    tmpret = write(STDOUT_FILENO, ret, strlen((const char *)ret)); 
    tmpret = write(STDOUT_FILENO, "\n\n", 2); 

    return 0; 

} 

void help() { 
    int tmpret; 
    const char *logo = "\n\n\t\tooooooo__oo______________________\n" 
       "\t\t_____oo______oo_oo_oo__oo_oo_oo__\n" 
       "\t\t____oo___oo__ooo_oo__o_ooo_oo__o_\n" 
       "\t\t___o_____oo__oo__oo__o_oo__oo__o_\n" 
       "\t\t_oo______oo__oo__oo__o_oo__oo__o_\n" 
       "\t\tooooooo_oooo_oo______o_oo______o_\n" 
       "\t\t_________________________________\n\n\n"; 
    tmpret = write(STDOUT_FILENO, logo, strlen(logo)); 
    const char *help = "Help\n" 
         "Is\n" 
         "Still\n" 
         "Being\n" 
         "Written :)\n\n"; 
    tmpret = write(STDOUT_FILENO, help, strlen(help)); 
    exit(1); 
} 

char *codice_encrypt(char *in) { 
    unsigned int i; 
    char ya = 0x55; 
    write(STDOUT_FILENO, "0x", 2); 
    char itret[50]; 
    sprintf(itret,"%#hhx",ya); 
    write(STDOUT_FILENO, itret, strlen(itret)); 
    write(STDOUT_FILENO, "\n", 1); 
    ya = ya & 0x0F; 
    ya = ya >> 1; 
    sprintf(itret,"%#hhx",ya); 
    write(STDOUT_FILENO, itret, strlen(itret)); 
    write(STDOUT_FILENO, "\n", 1); 
    ya = 0x55; 
    ya = ya & 0xF0; 
    ya = ya << 1; 
    sprintf(itret,"%#hhx",ya); 
    write(STDOUT_FILENO, itret, strlen(itret)); 
    write(STDOUT_FILENO, "\n", 1); 
    return in; 
} 

char *codice_decrypt(char *in) { 
    return in; 
} 

ありがとう!

+0

定義に引数を持たない 'help()'に 'STDOUT_FILENO'を渡していますか? – noMAD

+0

これはちょうどタイプのものでしたが、私はそれを削除しました – DanZimm

答えて

1

ここでhelp()には可変個の引数があります(私たちはCコードについて話しています)。しかし、引数は渡されず、引数も読み取られませんでした。最適化パスの1つがこれを認識し、そのような警告を出しました。 help()をhelp(void)として定義すると、問題が解決されます。

+0

あいまいで残念ですが、良い通訳に感謝しています:D これは私がグーグルでできる理由はありますか?ありがとう! – DanZimm

+1

Cの標準はインスピレーションの良い源です:) –

関連する問題