[英]Are default gcc compiler options gcc version specific or OS specific or both?
[英]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.