簡體   English   中英

默認選項GCC

[英]Default options GCC

我正在Linux上使用C對該文件進行操作:

#include "headerFiles.h"

#define TRUE  1
#define FALSE 0
#define BUFSIZE 256
#define SERVER_PORT 8887

int main (int argc, char *argv[])
{
    signal(SIGCHLD, SIG_IGN);

    int ls; // listen socket
    int s;  // descrittore socket
    int n;  // byte letti inviati
    int waitSize; // massimo numero persone in coda

    struct sockaddr_in serverAddr;
    struct sockaddr_in clientAddr;

    int clientAddrLen = sizeof( clientAddr );

    memset(&serverAddr,0,sizeof(serverAddr));

    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serverAddr.sin_port = htons(SERVER_PORT);

    if( (ls = socket(AF_INET,SOCK_STREAM,0)) < 0) {

        perror("Errore: creazione della socket di asolto fallita!");
        exit(1);
    }

    int so_reuseaddr = TRUE;

    if( fork() == 0) {

        //---------------------------------------------------//
        //CODICE
        while (1) {

            char cmd[BUFSIZE];
            char var1[BUFSIZE];
            char var2[BUFSIZE];
            char string[100];

            memset(cmd, 0, sizeof(cmd));
            memset(var1, 0, sizeof(var1));
            memset(var2, 0, sizeof(var2));
            memset(string, 0, sizeof(string));
        }
    }

    close(s);
    exit(0);
}

這段代碼代表C上的微型服務器,但是我有這個問題:如何檢查是否有默認的gcc編譯器選項?

因為例如在Mac上,我會收到一些警告,而在Linux上,則不會。

更新:

為了進行編譯,我使用了這個makefile:

elaborato: *.c *.h
    gcc *.c -o elaborato

當我執行它時,我會做: ./elaborato

我想使用默認的gcc設置來編譯該程序。 這夠了嗎?

需要注意的一件事是您的gcc版本很可能是不同的。 如果運行gcc -v,您將看到系統上已啟用的標志。 例如:

gcc -v -o t9 t9.c

為我顯示了這樣的幾行:

Apple LLVM version 7.0.0 (clang-700.0.72)
Target: x86_64-apple-darwin14.5.0
Thread model: posix
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" \
-cc1 -triple x86_64-apple-macosx10.10.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage \
-emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name t9.c \
-mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose \
-munwind-tables -target-cpu core2 -target-linker-version 253.2 -v -dwarf-column-info \
-resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0 \
-fdebug-compilation-dir /Users/bruce/test -ferror-limit 19 -fmessage-length 193 \
-stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.10.0 \
-fencode-extended-block-signature -fmax-type-align=16 -fdiagnostics-show-option \
-fcolor-diagnostics -o /var/folders/kl/kz62dj0j3zx7zvdgs7w005_w0000gn/T/t9-e101bb.o -x c t9.c
clang -cc1 version 7.0.0 based upon LLVM 3.7.0svn default target x86_64-apple-darwin14.5.0

除了所有選項都排在很長的一行上之外,其他所有選項都沒有如此處所示包裝。

在Mac上, gcc可能是clang的符號鏈接, clang是另一種編譯器。 嘗試使您的代碼與gcc -Wall -Werror一起使用,那么在Mac上也應該沒有問題:)

編輯:包含 Olaf的反對意見,如果默認情況下設置了更高的級別(例如-Wextra ),則傳遞-Wall可能會降低警告級別。 可以使用gcc -v檢查默認情況下將使用的標志,這是您可以驗證的方式。
要注意的另一件事是-Werror當然不會更改警告級別,而是將所有警告視為錯誤。 因此,如果編譯器輸出任何警告,則您的代碼將無法編譯。

對於Linux上的GCC:

> gcc -Q --help=target

將產生帶有啟用|禁用標志的選項列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM