영어프랑스어스페인어

Ad


온웍스 파비콘

g++-4.7 - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 g++-4.7 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 명령 g++-4.7입니다.

프로그램:

이름


gcc - GNU 프로젝트 C 및 C++ 컴파일러

개요


gcc [-c|-S|-E] [-표준=표준]
[-g] [-페이지] [-O수평]
[-W경고...] [-페단 틱]
[-IDIR...] [-LDIR...]
[-D매크로[=데프]...] [-U매크로]
[-f선택권...] [-m기계 옵션...]
[-o 아웃파일] [@파일] 인파일...

가장 유용한 옵션만 여기에 나열됩니다. 나머지는 아래를 참조하십시오. g ++ 받아 들인다
대부분 동일한 옵션 GCC.

기술


GCC를 호출하면 일반적으로 전처리, 컴파일, 어셈블리 및 연결을 수행합니다.
"전체 옵션"을 사용하면 중간 단계에서 이 프로세스를 중지할 수 있습니다. 을위한
예를 들어 -c 옵션은 링커를 실행하지 말라고 말합니다. 그런 다음 출력은 객체로 구성됩니다.
어셈블러가 출력하는 파일.

다른 옵션은 처리의 한 단계로 전달됩니다. 일부 옵션 제어
전처리기 및 기타 컴파일러 자체. 또 다른 옵션은 어셈블러를 제어하고
링커; 이들 중 대부분은 사용할 필요가 거의 없기 때문에 여기에 문서화되어 있지 않습니다.

GCC와 함께 사용할 수 있는 대부분의 명령줄 옵션은 C 프로그램에 유용합니다. 언제
옵션은 다른 언어(보통 C++)에서만 유용합니다. 설명에 따르면
명시적으로. 특정 옵션에 대한 설명에 출처가 언급되지 않은 경우
언어의 경우 지원되는 모든 언어에서 해당 옵션을 사용할 수 있습니다.

XNUMXD덴탈의 GCC 프로그램은 옵션과 파일 이름을 피연산자로 받아들입니다. 많은 옵션에는 다중
문자 이름; 따라서 여러 단일 문자 옵션은 지원 그룹화: -dv 이 매우
다른 -d -v.

옵션과 기타 인수를 혼합할 수 있습니다. 대부분의 경우 사용하는 순서는
문제. 같은 종류의 여러 옵션을 사용할 때는 순서가 중요합니다. 예를 들어
당신이 지정 -L 두 번 이상 디렉토리는 지정된 순서대로 검색됩니다. 또한,
의 배치 -l 옵션이 중요합니다.

많은 옵션에는 다음으로 시작하는 긴 이름이 있습니다. -f 또는 -W---예를 들어,
-fmove-loop-불변, -W포맷 등등. 이들 대부분은 긍정적인 것과 부정적인
양식; 의 부정적인 형태 - 푸푸-fno-foo. 이 설명서는 다음 중 하나만 문서화합니다.
둘 중 하나가 기본값이 아닌 형식입니다.

옵션


선택권 요약
다음은 유형별로 그룹화된 모든 옵션의 요약입니다. 설명은 다음과 같습니다
섹션을 참조하십시오.

사무용 겉옷 옵션
-c -S -E -o 파일 -표준 접두사 없음 -파이프 -통과 종료 코드 -x 언어 -v
-### --도움[=수업[, ...]] -타겟 홀프 --번역 -싸개 @파일 -f플러그인=파일
-fplugin-인수-name=아르헨티나 -fdump-ada-spec[-날씬한] -fdump-go-spec=파일

C 지원하는 언어 옵션
-안시 -표준=표준 -fgnu89-인라인 -보조 정보 파일 이름
- 휴경 매개변수 없는 가변 함수 -fno-asm -fno 내장 -fno-내장-기능
-호스트 -프리스탠딩 -fopenmp -fms-확장 -fplan9-확장 -삼각형
-통합되지 않은-cpp -전통적인 -전통적인 cpp - 휴경단정밀도
-fcond-불일치 -아마 벡터 변환 -fsigned 비트 필드 -fsigned-char
- funsigned 비트 필드 -funsigned-char

C + + 지원하는 언어 옵션
-fabi 버전=n -fno-액세스 제어 -fcheck-신규 -f보존 공간
-fconstexpr-깊이=n -ffriend 주입 -fno-elide-생성자 -fno-enforce-eh-specs
-ffor 범위 -범위에 대한 fno -fno-gnu-키워드 -fno-암시적 템플릿
-fno-implicit-inline-템플릿 -fno-구현-인라인 -fms-확장
-fno-nonansi-내장 -fnothrow-opt -fno 연산자 이름 -fno-선택 사항-diags
-허용 -fno-pretty-템플릿 -프레포 -fno-rtti -fstats -f템플릿-깊이=n
-fno-threadsafe-정적 -퓨즈 -cxa-atexit -fno-약한 -nostdinc++ -fno-기본-인라인
-fvisibility-inlines-hidden -fvisibility-ms-compat -와비 -wconversion-null.
-Wctor-dtor-프라이버시 -Wdelete-non-virtual-dtor - 축소 -아니요
-W비 가상 dtor - Wreorder -웨프씨++ -Wstrict-null-센티넬
- 템플릿이 아닌 친구 -Wold 스타일 캐스트 -오버로딩된 가상 -Wno-pmf-변환
-Wsign-프로모션

오브젝티브-C 목표-C++ 지원하는 언어 옵션
-f상수-문자열-클래스=클래스 이름 -fgnu-런타임 -fnext-런타임 -fno-nil-수신기
-fobjc-abi-버전=n -fobjc-call-cxx-cdtors -fobjc-직접 발송 -fobjc-예외
-fobjc-gc -fobjc-nilcheck -fobjc-std = OBJC1. -freplace-objc-클래스 -fzero-링크
-gen-decls -Wassign-인터셉트 -Wno 프로토콜 -W선택자 -Wstrict 선택자 일치
-Wunddeclared-선택자

지원하는 언어 독립 옵션
-f메시지 길이=n -fdiagnostics-표시-위치=[일단|모든 라인]
-fno-진단-쇼-옵션

경고 옵션
-fsyntax 전용 -fmax-오류=n -페단 틱 - 현학적 오류 -w -웩스트라 -벽
-워드레스 -Waggregate-리턴 -워레이 경계 -Wno-속성
-Wno 내장 매크로 재정의 -Wc++-호환 -Wc++11-호환 -Wcast 정렬 -Wcast급
-Wchar-첨자 -클로버드 -댓글 -W변환 -Wcoverage-불일치 -Wno-cpp
- 더 이상 사용되지 않음 -Wno-deprecated-선언 -Wdisabled-최적화 -Wno-div-by-XNUMX
-W더블 프로모션 - 멍한 몸 -Wenum-비교 -Wno-endif-레이블 -워러 -오류=*
-Wfatal-오류 -Wfloat-같음 -W포맷 -W형식=2 -Wno-포맷-포함-nul
-Wno-format-extra-args -Wformat-비리터럴 -Wformat 보안 -Wformat-y2k
-Wframe-보다 큼= -Wno-free-nonheap-객체 -Wjump-미스-초기화
-무시 예선 - 암묵적 -암시적 함수 선언 - 암묵적 정수
-윈트셀프 -윈라인 -W아마도 초기화되지 않음 - 포인터 투 포인터 캐스트 없음
-Wno-invalid-offsetof -Winvalid-pch -보다 큼= -Wunsafe 루프 최적화
-W논리적 연산 -롱롱 -W메인 -W아마도 초기화되지 않음 -Wmissing-중괄호
-Wmissing-field-initializers -Wmissing 형식 속성 - 포함 디렉토리 누락
-Wno-머드플랩 -Wno-다중 문자 -Wnonnull -Wno 오버플로 -Woverlength-문자열 -W포장
-Wpacked-bitfield-compat -W패딩 -괄호 -Wpedantic-ms-형식
-Wno-pedantic-ms-형식 -Wpointer-arith - Wno-pointer-to-int-cast - Wredundant-decls
-Wreturn형 -W시퀀스 포인트 -W섀도우 -Wsign-비교 -Wsign 변환
-Wstack 보호기 -Wstack 사용= -Wstrict-앨리어싱 -Wstrict-앨리어싱=n
-Wstrict 오버플로 -Wstrict-오버플로=n -Wsuggest-속성=[순수한|const를|노리턴]
-W스위치 -Wswitch-기본값 -Wswitch 열거 형 -Wsync-낸드 -Wsystem 헤더 - 트램폴린
-저서 -W 유형 제한 -분데프 -초기화되지 않음 -Wunknown-pragma -Wno-pragma
-Wunsuffixed 부동 소수점 상수 - 사용하지 않은 - 사용하지 않는 기능 -사용하지 않은 라벨
-Wunused-local-typedefs -Wunused-매개변수 - 사용하지 않은 결과 없음 - 미사용 가치
- 사용하지 않은 변수 -사용하지 않았지만 설정 매개변수 -사용하지 않았지만 설정 변수
-Wvariadic 매크로 -W벡터 작업 성능 - 블라 -W휘발성 레지스터 변수
-문자열 쓰기 -Wzero-as-null-포인터 상수

C Objective-C 전용 경고 옵션
-Wbad 함수 캐스트 -Wmissing-선언 -Wmissing-매개변수 유형
-Wmissing-프로토타입 -Wnested-externs -Wold 스타일 선언 -Wold 스타일 정의
-Wstrict 프로토타입 -전통적인 -전통 변환
-W선언 후 선언 -Wpointer 기호

디버깅 옵션
-d편지 -덤프 사양 - 덤프 머신 -덤프 버전 -fdbg-cnt-목록 -fdbg-cnt=카운터-
가치 목록 -fdisable-ipa-패스 이름 -fdisable-rtl-패스 이름 -fdisable-rtl-통과하다-
name=범위 목록 -fdisable-트리-패스 이름 -fdisable-트리-비밀번호=범위 목록
-fdump-noaddr -fdump-번호 없음 -fdump-unnumbered-링크 -fdump-번역-단위[-n]
-fdump-클래스-계층 구조[-n] -fdump-ipa-모두 -fdump-ipa-cgraph -fdump-ipa-인라인
-fdump-pass -fdump-통계 -fdump-트리-모두 -fdump-트리-원본[-n]
-fdump-tree 최적화[-n] -fdump-트리-cfg -fdump-트리-vcg -fdump-트리 별칭
-fdump-트리-ch -fdump-트리-ssa[-n] -fdump-트리-pre[-n] -fdump-트리-ccp[-n]
-fdump-트리-dce[-n] -fdump-tree-gimple[-노골적인] -fdump-트리-머드 플랩[-n]
-fdump-트리돔[-n] -fdump-트리-dse[-n] -fdump-트리-phiprop[-n] -fdump-트리-phiopt[-n]
-fdump-트리-forwprop[-n] -fdump-tree-copy이름 바꾸기[-n] -fdump-트리-nrv -fdump-트리-벡터
-fdump-트리 싱크 -fdump-트리-sra[-n] -fdump-트리-forwprop[-n] -fdump-tree-fre[-n]
-fdump-트리-vrp[-n] -ftree-벡터화기-상세=n -fdump-트리-storeccp[-n]
-fdump-최종-insns=파일 -fcompare-디버그[=선택하지 않는] -f비교-디버그-초
-felimate-dwarf2-dups -feliminate-미사용-디버그 유형
-feliminate-unused-debug-기호 -femit-class-debug-항상 -합리적인-종류-패스
-합리적인-종류-패스=범위 목록 -fdebug-types-섹션 -fmem 보고서 -fpre-ipa-mem-보고서
-fpost-ipa-mem-보고서 -fprofile-호 -임의의 시드= -fsched-상세=n
-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-파이프라인-상세 -fstack-사용
-최후 범위 -ftime-보고 -fvar 추적 -fvar-추적 할당
-fvar-추적-할당-전환 -g -g수평 -gttoggle -gcoff -그드워프-버전 -ggdb
-grecord-gcc-스위치 -gno-record-gcc-스위치 -gstabs -gstabs + -gstrict-dwarf
-gno-strict-dwarf -gvms -gxcoff -gxcoff+ -fno-병합-디버그-문자열
-fno-dwarf2-cfi-asm -fdebug-접두사-맵=낡은= -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=사양 목록] -p -페이지
-인쇄 파일 이름=도서관 -print-libgcc-파일 이름 - 인쇄 다중 디렉토리
-print-multi-lib -print-multi-os-디렉토리 -인쇄 프로그램 이름=프로그램
-인쇄-검색-디렉토리 -Q -인쇄-sysroot -인쇄-sysroot-헤더-접미사 - 임시 저장
- 임시 저장 = cwd - 임시 저장 = obj -시각[=파일]

최적화 옵션
-falign-함수[=n] -falign-점프[=n] -falign-레이블[=n] -정렬 루프[=n]
-연관 수학 -fauto-inc-dec -f분기 확률 -fbranch-대상-로드-최적화
-fbranch-대상-로드-최적화2 -fbtr-bb-독점 -fcaller 저장 -fcheck-데이터-deps
-fcombin-stack-adjustments -fconserve-스택 -f비교-제거 -fcprop 레지스터
-크로스점프 -fcse-추종-점프 -fcse-skip-blocks. -fcx-fortran-규칙
-fcx 제한 범위 -fdata 섹션 -fdce -fdelayed-분기 -fdelete-null-포인터 검사
-f비가상화 -fdse -두려운 인라인 -피파-스라 -비싼 최적화
-ffat-lto-객체 -빠른 수학 - 유한 수학 전용 -fffloat-store
-fexcess-정밀도=스타일 -앞으로 전파 -ffp-계약=스타일 -ffunction-섹션
-fgcse -fgcse-재로드 후 -fgcse-las -fgcse-lm -fgraphite-정체성 -fgcse-sm
-fif 변환 -fi-변환2 -findirect 인라인 -finline-함수
-finline-functions-call-once -finline-한계=n -finline-작은 기능 -fipa-cp
-fipa-cp-클론 -fipa-매트릭스-reorg -fipa-pta -fipa 프로필 -fipa-순수-const
-fipa-참조 -피라 알고리즘=연산 -피라 지역=지방 -피라 루프 압력
-fno-ira-공유-저장-슬롯 -fno-ira-share-spill-slots -Fira-장황한=n -fivopts
-fkeep 인라인 함수 -fkeep-static-const -floop-블록 -floop-평평화
- 루프 교환 -floop-스트립-광산 -floop-병렬화-모두 -flto
-flto 압축 수준 -flto-파티션=ALG -flto-보고 -fmerge-all-상수
-fmerge-상수 -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-불변
fmudflap -fmudflapir -fmudflapth -fno-브랜치-카운트-reg -fno-기본-인라인
-fno-지연-팝 -fno-기능-cse -fno-추측-분기-확률 -fno 인라인
-fno-수학-errno -fno 엿보기 -fno-구멍2 -fno-sched-인터블록 -fno-sched-spec
-fno 부호 있는 XNUMX -fno-최상위-재주문 -fno 트래핑 수학
-fno-zero-initialized-in-bss -fomit 프레임 포인터 -f최적화 등록 이동
-foptimize-형제 호출 -f부분 인라인 -필 루프 -f예측-공통
-fprefetch 루프 배열 -fprofile-수정 -f프로필-디렉토리=통로 -fprofile 생성
-fprofile 생성=통로 -fprofile-사용 -f프로필 사용=통로 -fprofile-값
- 분수 수학 -비어 있는 -fregmove -frename 레지스터 -freorder-블록
-freeorder-blocks-and-partition -freorder-함수 -frerun-cse-후-루프
-freschedule-modulo-scheduled-loops - 반올림 수학 -fsched2-use-수퍼블록
-fsched-압력 -fsched-사양-로드 -fsched-spec-load-위험한
-fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] -fsched-group-휴리스틱
-fsched-critical-path-휴리스틱 -fsched-spec-insn-휴리스틱 -fsched-rank-휴리스틱
-fsched-last-insn-휴리스틱 -fsched-dep-count-휴리스틱 -fschedule-insns
-fschedule-insns2 -f섹션 앵커 -f선택적 스케줄링 -f선택적-스케줄링2
-fsel-sched-파이프라이닝 -fsel-sched-파이프라인-외부 루프 -fshrink-wrap
-fsignaling-nans -fsingle-precision-상수 -fsplit-ivs-in-unroller
-fsplit-와이드 유형 -fstack 보호기 -fstack-프로텍터-all -fstrict-앨리어싱
-fstrict-오버플로 -fthread 점프 -추적자 -ftree-bit-ccp -ftree-내장 호출-dce
-fttree-ccp -fttree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree 복사 소품
-ftree-copy이름 바꾸기 -fttree-dce -ftree-지배자-opts -fttree-dse -fttree-forwprop
-fttree-fre -ftree-loop-if-변환 -ftree-loop-if-convert-stores -ftree-루프-im
-fttree-phiprop -ftree-loop-분포 -ftree-루프-배포-패턴
-ftree-루프-ivcanon -ftree 루프 선형 -ftree 루프 최적화 -ftree 병렬화 루프=n
-fttree-pre -ftree-부분 사전 -fttree-pta -fttree-재연결 -ftree-싱크대 -fttree-sra
-ftree 스위치 변환 -fttree-tail-merge -fttree-ter -ftree-vect-loop-버전
-ftree 벡터화 -fttree-vrp -한 번에 단위 -Funroll-All-루프 -펀롤 루프
-펀세이프 루프 최적화 -재미있는 수학 최적화 -펀스위치 루프
-f변수 확장-언롤러 -fvect-비용 모델 -fvpt -fweb -전체 프로그램 -fwpa
-퓨즈-ld=링크 -퓨즈-링커-플러그인 --매개변수 name=가치 -O -O0 -O1 -O2 -O3 - 오스
-오파스트

전 처리기 옵션
-A문제=답변 -에이-문제[=답변] -C -dD -디 -dM -NS -D매크로[=데프] -E -H
-idirafter DIR -포함 파일 -매크로 파일 -ipprefix 파일 -iwith 접두사 DIR
-앞에 접두사가 있는 경우 DIR -아이시스템 DIR -imultilib DIR -isysroot DIR -M -MM -MF -mg
- MP -MQ -산 -Nostdinc -P -fdebug-cpp -ftrack 매크로 확장 -fworking-디렉토리
-다시 매핑 -삼각형 -언데프 -U매크로 -워,선택권 -엑스프리프로세서 선택권

어셈블러 선택권
-와,선택권 -X어셈블러 선택권

링크 옵션
개체 파일 이름 -l도서관 -nostart파일 -nodefaultlibs -nostdlib -파이 -역동적 -s
-공전 -정적-libgcc -정적-libstdc++ -공유 -공유-libgcc - 상징적 -T 스크립트
-NS,선택권 -X링커 선택권 -u 상징

명부 담당 옵션
-B접두사 -IDIR -iplugindir=DIR - 인용DIR -LDIR -사양=파일 -나는- --sysroot=DIR

머신 매달린 옵션
AAArch64 옵션 -mbig-엔디안 -미리틀 엔디안 -mgeneral-regs-only. -mcmodel=작은
-mcmodel=작은 -mcmodel=대형 -mstrict-정렬 -momit-리프 프레임 포인터
-mno-생략-리프-프레임-포인터 -mtls-dialect=desc -mtls-dialect=전통 -행진=name
-mcpu =name -mtune=name

아답테바 출현 옵션 -mhalf-reg-파일 -mprefer-짧은-insn-regs -mbranch 비용=NUM
-mcmmove -mnops=NUM -msoft-cmpsf -msplit-lohi -mpost-inc -mpost 수정
-mstack 오프셋=NUM -mround-가장 가까운 -mlong-통화 -m짧은 통화 -msmall16 -mfp 모드=모드
-mvect-더블 -최대 벡터 정렬=NUM -msplit-vecmove-early -m1reg-등록 번호

ARM 옵션 -mapcs-프레임 -mno-apcs-프레임 -마비=name -mapcs-스택-체크
-mno-apcs-스택-체크 -mapcs-플로트 -mno-apcs-플로트 -mapcs-재진입
-mno-apcs-재진입 -msched-프롤로그 -mno-sched-프롤로그 -미리틀 엔디안 -mbig-엔디안
-mwords-리틀엔디안 -mfloat-abi=name -mfpe -mfp16 형식=name -mthumb-연동
-mno-thumb-연동 -mcpu =name -행진=name -mfpu=name -m구조-크기-경계=n
- mabort-on-noreturn -mlong-통화 -mno-long-통화 -msingle-pic-base
-mno-단일-사진-베이스 -mpic-레지스터=등록 번호 -mnop-재미-dllimport -mcirrus-수정-무효-insns
-mno-cirrus-fix-invalid-insns -mpoke 함수 이름 -엄지손가락 -마름 -mtpcs-프레임
-mtpcs-리프 프레임 -mcaller-슈퍼 인터워킹 -mcallee-슈퍼 인터워킹 -mtp=name
-mtls-방언=방언 -mword-재배치 -mfix-cortex-m3-ldrd -munaligned 액세스
-64비트용 mneon

AVR 옵션 -mmcu=MCU -maccumulate-args -mbranch 비용=비용 -mcall-프롤로그 -민트8
-mno 인터럽트 -mrelax -m짧은 통화 -mstrict-X -mtiny 스택

블랙 핀 옵션 -mcpu =CPU[-후견] -msim -momit-리프 프레임 포인터
-mno-생략-리프-프레임-포인터 -mspecld-이상 -mno-specld-이상 -mcsync-이상
-mno-csync-이상 -mlow-64k -mno-low64k -mstack-check-l1 -중간 공유 라이브러리
-mno-id-공유 라이브러리 -mshared-라이브러리-id=n -mleaf-id-공유 라이브러리
-mno-leaf-id-공유 라이브러리 -msep-데이터 -mno-XNUMX월-데이터 -mlong-통화 -mno-long-통화
-mfast-fp -minline-plt -m멀티코어 -엠코리아 -mcoreb -msdram -micplb

C6X 옵션 -mbig-엔디안 -미리틀 엔디안 -행진=CPU -msim -ms데이터=데이터 유형

CRIS 옵션 -mcpu =CPU -행진=CPU -mtune=CPU -mmax-스택 프레임=n
-melinux-스택크기=n -메트렉스4 -메트렉스100 -mp디버그 -mcc-초기화 -mno 부작용
-mstack 정렬 -mdata 정렬 -mconst-정렬 -m32비트 -m16비트 -m8비트
-mno-프롤로그-에필로그 -mno-gotplt -멜프 -마우트 -미리눅스 -mlinux -심 -sim2
-mmul-bug-해결 방법 -mno-mul-bug-해결 방법

CR16 옵션 -mmac -mcr16cplus -mcr16c -msim -민트32 -mbit-ops -mdata-모델=모델

다윈 옵션 -all_load -allowable_client -아치 -arch_errors_fatal -arch_only
-bind_at_load -묶음 -bundle_loader -고객 이름 -호환성_버전
-현재_버전 -dead_strip -종속성 파일 -dylib_file -dylinker_install_name
-동적 -다이내믹 라이브러리 -내보낸_기호_목록 -파일 목록 -플랫_네임스페이스
-force_cpusubtype_ALL -force_plat_namespace -headerpad_max_install_names -iframework
-이미지_베이스 -초기화 -설치 이름 -keep_private_externs -다중 모듈
-곱하기_정의 -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofix 사전 바인딩 -nomultidefs -노프리바인드
-noseglinkit -pagezero_size -사전 바인딩 -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -분할 정렬 -섹트객체 기호 -왜 로드 -세그1주소 -섹션 생성
-섹트객체 기호 - 부문별 -segaddr -segs_read_only_addr -segs_read_write_addr
-세그_주소_테이블 -seg_addr_table_filename -세그링크드잇 -세그프로트 -segs_read_only_addr
-segs_read_write_addr -단일_모듈 -공전 -하위_라이브러리 -sub_umbrella
-twolevel_namespace -우산 -찾으시는 주소가 없습니다 -내보내지 않은_기호_목록
-weak_reference_mismatches -무엇을 로드 -F -거스 -gfull -mmacosx-버전-최소=버전
-mkernel -mon-byte-bool

12월 알파 옵션 -mno-fp-regs -msoft-float -말파-as - 가스 -이따
- 부정확한 -mieee-준수 -mfp-트랩 모드=모드 -mfp-반올림 모드=모드
-mtrap-정밀도=모드 -mbuild-상수 -mcpu =CPU 유형 -mtune=CPU 유형 -mbwx -mmax
-mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-데이터 -mlarge-데이터
-m작은 텍스트 -mlarge-텍스트 -메모리 대기 시간=시간

12월 알파/VMS 옵션 -mvms-반환 코드 -mdebug-메인=접두사 -mmalloc64

FR30 옵션 -m작은 모델 -mno-lsim

FRV 옵션 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -m더블 -mno-더블 -미디어 -mno-미디어
-mmuladd -mno-물라드 -mfdpic -minline-plt -mgprel-로 -multilib-라이브러리-pic
-Mlinked-FP -mlong-통화 -악성 레이블 - 라이브러리 사진 -맥-4 -맥-8 -mpack
-mno-팩 -mno 플래그 -mcond-이동 -mno-cond-이동 -moptimize-멤바
-mno-optimize-멤바 -mscc -mno-scc -mcond-exec -mno-조건-exec -mvliw-분기
-mno-vliw-분기 -m다중 조건 실행 -mno-다중 조건-exec -mnested-cond-exec
-mno-중첩-조건-exec -mtomcat-통계 -mTLS -mtls -mcpu =CPU

GNU / 리눅스 옵션 -mglibc -뮤클립 -엠비오닉 -맨드로이드 -tno-안드로이드-cc -tno-안드로이드-ld

H8 / 300 옵션 -mrelax -mh -ms -mn -민트32 -악성-300

HPPA 옵션 -행진=건축형 -mbig 스위치 -mdisable-fpregs
-mdisable-인덱싱 -mfast-간접 호출 - 가스 -mgnu-ld -mhp-ld
-m고정 범위=레지스터 범위 -m점프-인-지연 -mlinker-opt -mlong-통화
-mlong-로드-스토어 -mno-큰 스위치 -mno-disable-fpregs -mno-disable-인덱싱
-mno-빠른 간접 호출 -mno-가스 -mno-점프-인-지연 -mno-long-load-store
-mno-휴대용-런타임 -mno-소프트-플로트 -mno-공간-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -가동 가능한 런타임 -ms스케줄=CPU 유형 -mspace-regs
-msio -mwsio -뮤닉스=유닉스 표준 -nolibdld -공전 - 스레드

i386 x86-64 옵션 -mtune=CPU 유형 -행진=CPU 유형 -mfpmath=단위 -매즘=방언
-mno-팬시-수학-387 -mno-fp-ret-in-387 -msoft-float -mno-와이드-곱하기 -mrtd
-악성-더블 -mpreferred-스택-경계=NUM -최소화 스택 경계=NUM -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=고르다 -mvzeroupper -mprefer-avx128 -mmmx.
-msse -msse2. -msse3. -mssse3 -msse4.1. -msse4.2. -msse4. -mavx -mavx2 -메스 -mpclmul
-mfsgsbase -mrdrnd -mf16c. -mfma -msse4a -m3dnow -mpopcnt -맘마 -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -m스레드 -mno-align-stringops -minline-all-stringops
-minline-stringops-동적으로 -mstringop-전략=ALG -mpush-인수
-maccumulate-outgoing-args -m128bit-롱-더블 -m96bit-롱-더블 -mregparm=NUM
-msseregparm -mveclibabi=유형 -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstack재정렬
-momit-리프 프레임 포인터 -mno-레드-존 -mno-tls-direct-seg-refs -mc모델=코드 모델
-마비=name -maddress 모드=모드 -m32 -m64 -mx32 -mlarge-데이터-임계값=NUM -msse2avx
-엠펜트리 -m8bit-idiv -mavx256-분할-정렬되지 않은-로드 -mavx256-분할-정렬되지 않은-저장

i386 x86-64 Windows 옵션 -mconsole -mcygwin -mno-cygwin -mdll
-mnop-재미-dllimport --mthread. -뮤니코드 -mwin32 -mwindows -fno-set-stack-실행 가능

IA-64 옵션 -mbig-엔디안 -미리틀 엔디안 -mgnu-as -mgnu-ld -mno-그림
-mvolatile-asm-중지 -m 레지스터 이름 -msdata -mno-sdata -m상수-gp -자동 사진
-머퓨즈드-매드 -minline-float-divide-min-latency -minline-float-divide-max-처리량
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-처리량 -mno-인라인-int-나누기 -minline-sqrt-최소 대기 시간
-minline-sqrt-max-처리량 -mno-인라인-sqrt -mdwarf2-asm -거의 스톱 비트
-m고정 범위=레지스터 범위 -mtls-크기=tls 크기 -mtune=CPU 유형 -milp32. -mlp64
-msched-br-데이터-사양 -msched-ar-데이터-사양 -msched-제어-사양 -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-비-데이터-사양-insns
-msched-prefer-non-control-spec-insns -매 주기 후 msched-stop-bits
-msched-count-spec-in-중요-경로 -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-제로 비용 -msched-최대-메모리-insns-하드 제한
-msched-최대-메모리-insns=최대-인스

IA-64/VMS 옵션 -mvms-반환 코드 -mdebug-메인=접두사 -mmalloc64

LM32 옵션 -mbarrel-shift 사용 가능 -mdivide 사용 -m곱하기 가능
-msign 확장 가능 -muser 사용 가능

M32R/D 옵션 -m32r2 -m32rx -m32r -m디버그 -악성 루프 -mno-align 루프
-오류율=번호 -mbranch 비용=번호 -모델=코드 크기 모델 유형 -ms데이터=사다
유형 -mno-플러시-펑크 -mflush-func=name -mno-플러시-트랩 -mflush-트랩=번호 -G NUM

M32C 옵션 -mcpu =CPU -msim -memregs=번호

M680x0 옵션 -행진=아치 -mcpu =CPU -mtune=곡조 -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbit필드 -mno 비트 필드 -mc68000 -mc68020 -mnobit필드 -mrtd -mno-rtd
-mdiv -mno-div -m짧은 -mno-짧은 -mhard-float -m68881 -msoft-float -mprel
-악성-int -mstrict-정렬 -msep-데이터 -mno-XNUMX월-데이터 -mshared-library-id=n
-중간 공유 라이브러리 -mno-id-공유 라이브러리 -mxgot -mno-xgot

엠코어 옵션 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-즉시
-mno-relax-immediate -mwide-비트 필드 -mno 와이드 비트 필드 -m4byte-함수
-mno-4byte-함수 -mcallgraph-데이터 -mno-callgraph-데이터 -mslow-바이트
-mno-느린 바이트 -mno-lsim -미리틀 엔디안 -mbig-엔디안 -m210 -m340
-mstack 증가

MeP 옵션 -맙스디프 -몰 옵션 -평균 -m 기반=n -엠비탑스 -MC=n -mclip
-mconfig=name -엠캅 -mcop32 -mcop64 -mivc2 -MDC -mdiv -메브 -멜 -mio-휘발성 -ml
-mleadz -mm -mminmax -멀티 -mno 옵션 -mrepeat -ms -msatur -msdram -msim -msimnovec
-MTF -최소 =n

마이크로블레이즈 옵션 -msoft-float -mhard-float -m작은 나누기 -mcpu =CPU -mmemcpy
-mxl-소프트-뮬 -mxl-소프트-div -mxl-배럴 시프트 -mxl-패턴-비교 -mxl-스택 검사
-mxl-gp-opt -mno-clearbss -mxl-곱하기-높음 -mxl-플로트 변환 -mxl-플로트-sqrt
-mxl-모드-앱 모델

MIPS 옵션 -엘자 -EB -행진=아치 -mtune=아치 -밉스1 -밉스2 -밉스3 -밉스4
-밉스32 -mips32r2 -밉스64 -mips64r2 -밉스16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -마비=ABI -마비콜 -mno-abicals
-m공유 -mno 공유 -MPLT -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-float -m더블 플로트 -mdsp -mno-dsp
-MDSPR2 -mno-dspr2 -mfpu=fpu 유형 -msmartmips -mno-smartmips -mpaired-단일
-mno 쌍 단일 -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNUM -mlocal-sdata
-mno-로컬-sdata -mextern-sdata -mno-외부-sdata -mgpopt -mno-gopt -포함된 데이터
-mno-embedded-데이터 -muninit-const-in-rodata -mno-unit-const-in-rodata
-mcode 판독 가능=설정 -msplit 주소 -mno-분할 주소 -mexplicit-relocs
-mno-명시적-relocs -mcheck-XNUMX 나눗셈 -mno-check-zero-division -mdivide-트랩
-mdivide-break -mmemcpy -mno-memcpy -mlong-통화 -mno-long-통화 -mmad -mno-mad
-머퓨즈드-매드 -mno-융합-매드 -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=펑크 -mno-플러시-펑크 -mbranch 비용=NUM -mbranch 가능성이 있는
-mno-branch-like -mfp-예외 -mno-fp-예외 -mvr4130-정렬 -mno-vr4130-정렬
-msynci -mno-synci -mrelax-픽-콜 -mno-relax-pic-calls -mmcount-ra-주소

엠믹스 옵션 -mlibfuncs -mno-libfuncs -멤실론 -mno-엡실론 -마비=누
-마비=mmixware -mzero 확장 -mknuthdiv -mtoplevel-심볼 -멜프 -mbranch 예측
-mno-분기-예측 -mbase 주소 -mno-base-주소 -ms단일 종료
-mno-단일 종료

MN10300 옵션 - 복합 버그 -mno-multi-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=CPU-
유형 -mreturn-포인터-on-d0 -mno-crt0 -mrelax -밀리 -msetlb

PDP-11 옵션 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy 내장 -민트32 -mno-int16 -민트16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -맛시 -mno-abshi -mbranch-비싼 -mbranch-저렴한
-munix-asm -mdec-asm

피코칩 옵션 -매=ae_type -mvliw-예측=N -msymbol-주소
-mno-inefficiency-warnings

PowerPC 옵션 RS/6000 및 PowerPC 옵션을 참조하십시오.

RL78 옵션 -msim -mmul=없음 -mmul=g13 -mmul=rl78

RS/6000 PowerPC 옵션 -mcpu =CPU 유형 -mtune=CPU 유형 -mc모델=코드 모델 -mpower
-mno-파워 -mpower2 -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -말티벡
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd
-mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-하드-dfp
-mnew-니모닉 -금형 니모닉 -mfull-toc -최소-toc -mno-fp-in-toc
-mno-합계-목차 -m64 -m32 -mxl-호환 -mno-xl-컴패트 -mp -악의력
-악성 - 자연 -msoft-float -mhard-float -m다중 -mno-다중 -msingle-float
-m더블 플로트 -ms단순-fpu -mstring -mno-문자열 -업데이트 -mno-업데이트
-mavoid-색인 주소 -mno-avoid-색인 주소 -머퓨즈드-매드 -mno-융합-매드
-mbit 정렬 -mno 비트 정렬 -mstrict-정렬 -mno-엄격한 정렬 -m 재배치 가능
-mno 재배치 가능 -mrelocateable-lib -mno-relocateable-lib -mtoc -mno-toc -조금
-미리틀 엔디안 -mbig -mbig-엔디안 -mdynamic-no-pic -말티벡 -mswdiv
-msingle-pic-base - 우선 순위 제한 - inns =우선
-msched-비용이 많이 드는-dep=의존 유형 -minsert-sched-nops=계획 -mcall-sysv
-mcall-netbsd -maix-구조체-반환 -msvr4-구조체 반환 -마비=아비형 -msecure-plt
-mbss-plt -mblock-이동-인라인-제한=NUM -미젤 -mno-isel -misel=예 -misel=아니요 -mspe
-mno-sp -mspe=예 -mspe=아니요 -짝이 된 -mgen-cell-마이크로코드 -mwarn-cell-마이크로코드
-mvrsave -mno-vrsave -mmulhw -mno-물흐 -mdlmzb -mno-dlmzb -mfloat-gprs=예
-mfloat-gprs=아니요 -mfloat-gprs=단일 -mfloat-gprs=더블 -m프로토타입 -mno 프로토타입
-msim -mmvme - 미친 -골수칼 -멤버 -msdata -ms데이터=고르다 -mvxworks -G NUM
-pthread -mrecip -mrecip=고르다 -mno-recipe -mrecip-정밀도 -mno-precision.
-mveclibabi=유형 -mfriz -mno-friz -중첩 함수에 대한 mpointers
-중첩 함수에 대한 mno 포인터 -msave-toc-간접 -mno-save-toc-간접

RX 옵션 -m64bit-더블 -m32bit-더블 -fpu -노푸 -mcpu = -mbig-endian-데이터
-mlittle-endian-데이터 -msmall-데이터 -msim -mno-sim -mas100-구문 -mno-as100-구문
-mrelax -mmax-일정 크기= -민트 레지스터= -mpid -msave-ACC -에 - 인터럽트

S / 390 z 시리즈 옵션 -mtune=CPU 유형 -행진=CPU 유형 -mhard-float -msoft-float
-mhard-dfp -mno-하드-dfp -mlong-더블-64 -mlong-더블-128 -mbackchain
-mno-백체인 -mpacked-스택 -mno-packed-스택 -msmall-exec -mno-소형-exec
-mmvcle -mno-mvcle -m64 -m31 -m디버그 -mno 디버그 -메사 -mzarch -mtpf 추적
-mno-tpf-추적 -머퓨즈드-매드 -mno-융합-매드 -mwarn-프레임 크기 -mwarn-동적 스택
-mstack 크기 -mstack-가드

점수 옵션 -메브 -멜 -mnhwloop -물 -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH 옵션 -m1 -m2 -m2e -m2a-노푸 -m2a-단일 전용 -m2a-단일 -m2a -m3 -m3e
-m4-노푸 -m4-단일 전용 -m4-단일 -m4 -m4a-노푸 -m4a-단일 전용 -m4a-단일
-m4a -m4al -m5-64미디어 -m5-64미디어-노푸 -m5-32미디어 -m5-32미디어-노푸 -m5-컴팩트
-m5-컴팩트-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd -미타치 -므레네사스
-mno-르네사스 -mnomac저장 -이따 -mno-ieee -엠비탑스 -사이즈를 잘못 맞추다 -minline-ic_invalidate
-mpadstruct -mspace -mpfergot -muser 모드 -다중 비용=번호 -mdiv=전략
-mdivsi3_libfunc=name -m고정 범위=레지스터 범위 -조정 해제
-mindexed 주소 지정 -mgettr비용=번호 -mpt 고정 -maccumulate-outgoing-args
-최소 유효 기호 -msoft-원자 -mbranch 비용=NUM -mcbranchdi -mcmpeqdi -머퓨즈드-매드
-척-cmove

솔라리스 2 옵션 -불순한 텍스트 -mno-순수 텍스트 -pthread -pthread

SPARC 옵션 -mcpu =CPU 유형 -mtune=CPU 유형 -mc모델=코드 모델 -메모리 모델=메모리
모델 -m32 -m64 -map-regs -mno-app-regs -mfaster-구조체 -mno-빠른 구조
-m플랫 -mno-플랫 -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-쿼드-플로트 -mstack 바이어스 -mno-스택-바이어스 -munaligned-더블
-mno-unaligned-double -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpoc -mno-popc -mfix-at697f

SPU 옵션 -Mwarn-Reloc -mererror-reloc -msafe-dma -munsafe-dma -mbranch 힌트
-msmall-mem -mlarge-mem -mstdmain -m고정 범위=레지스터 범위 -mea32 -mea64
-maddress 공간 변환 -mno 주소 공간 변환 -mcache 크기=캐시 크기
-마토믹 업데이트 -mno-원자 업데이트

V 옵션 -Qy -Qn - 응,경로 -음,DIR

타일-Gx 옵션 -mcpu =CPU -m32 -m64

타일프로 옵션 -mcpu =CPU -m32

V850 옵션 -mlong-통화 -mno-long-통화 -mep -mno-ep -mprolog-함수
-mno-prolog-함수 -mspace -mtda =n -msda=n -mzda=n -map-regs -mno-app-regs
-mdisable-callt -mno-비활성화-콜트 -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mbig 스위치

백스 옵션 -mg -mgnu -뮤닉스

VxWorks 옵션 -mrtp -비정적 -비정적 -비다이나믹 -Xbind-게으른 -X바인드-지금

x86-64 옵션 i386 및 x86-64 옵션을 참조하십시오.

Xstormy16 옵션 -msim

엑스텐사 옵션 -mconst16 -mno-const16 -머퓨즈드-매드 -mno-융합-매드 -mforce-no-pic
- 직렬화 - 휘발성 -mno 직렬화 휘발성 -mtext-섹션-리터럴
-mno-텍스트-섹션-리터럴 -mtarget-정렬 -mno-타겟-정렬 -긴 통화
-mno-longcalls

z 시리즈 옵션 S/390 및 zSeries 옵션을 참조하십시오.

암호 세대 옵션
-fcall 저장-등록 번호 -fcall 사용-등록 번호 -고정-등록 번호 -예외 -fnon-call-exception
-펀윈드 테이블 -fasynchronous-unwind-tables -finhibit-size-지시어
- 기구 기능 -finstrument-기능-제외-기능-목록=SYM,SYM, ...
-finstrument-기능-제외-파일-목록=파일,파일, ... -fno-공통 -fno-ident
-fpcc-구조체-반환 -fpic -fPIC -파이 -fPIE -fno-점프 테이블 -frecord-gcc-스위치
-freg-구조체-반환 -fshort 열거형 -fshort-더블 -fshort-wchar -fverbose-asm
-fpack-구조체[=n] -fstack-체크 -fstack 제한 레지스터=등록 번호 -fstack-제한-심볼=SYM
-fno-스택 제한 -fsplit 스택 - 밑줄을 긋다 -ftls-모델=모델 -ftrapv.
-fwrapv -fbounds-체크 -가시성 -fstrict-휘발성 비트 필드

옵션 제어 전에, 종류 of 산출
컴파일에는 사전 처리, 적절한 컴파일, 어셈블리 및
항상 그 순서대로 연결합니다. GCC는 여러 가지를 사전 처리하고 컴파일할 수 있습니다.
여러 어셈블러 입력 파일 또는 하나의 어셈블러 입력 파일로 파일; 그 다음에
각 어셈블러 입력 파일은 개체 파일을 생성하고 링크는 모든 개체를 결합합니다.
파일(새로 컴파일된 파일 및 입력으로 지정된 파일)을 실행 파일로 변환합니다.

주어진 입력 파일에 대해 파일 이름 접미사는 컴파일의 종류를 결정합니다.
끝난:

파일.c
전처리해야 하는 C 소스 코드.

파일.i
전처리하면 안되는 C 소스 코드.

파일.ii
전처리하면 안되는 C++ 소스 코드.

파일.m
오브젝티브-C 소스 코드. 와 연결해야 합니다. libobjc 만드는 도서관
오브젝티브-C 프로그램 작업.

파일.미
전처리해서는 안되는 Objective-C 소스 코드.

파일.mm
파일.M
Objective-C++ 소스 코드. 와 연결해야 합니다. libobjc 만드는 라이브러리
Objective-C++ 프로그램이 작동합니다. 참고 .M 문자 그대로 대문자 M을 나타냅니다.

파일.mii
전처리해서는 안되는 Objective-C++ 소스 코드.

파일.h
C, C++, Objective-C 또는 Objective-C++ 헤더 파일을 미리 컴파일된 파일로 변환
헤더(기본값) 또는 C, C++ 헤더 파일을 Ada 사양으로 변환합니다(
-fdump-ada-spec 스위치).

파일.CC
파일.cp
파일.cxx
파일.cpp
파일.CPP
파일.C++
파일.C
전처리해야 하는 C++ 소스 코드. 참고로 .cxx, 마지막 두 글자
둘 다 말 그대로 x. 마찬가지로, .C 문자 그대로 대문자 C를 나타냅니다.

파일.mm
파일.M
전처리해야 하는 Objective-C++ 소스 코드입니다.

파일.mii
전처리해서는 안되는 Objective-C++ 소스 코드.

파일.hh
파일.H
파일.hp
파일.hxx
파일.hpp
파일.HPP
파일.h++
파일.tcc
C++ 헤더 파일을 미리 컴파일된 헤더 또는 Ada 사양으로 변환합니다.

파일.f
파일.을위한
파일.ftn
사전 처리되지 않아야 하는 고정된 형식의 Fortran 소스 코드입니다.

파일.F
파일.을위한
파일.fpp
파일.FPP
파일.FTN
전처리해야 하는 고정 형식 Fortran 소스 코드(기존
전처리기).

파일.f90
파일.f95
파일.f03
파일.f08
사전 처리되지 않아야 하는 자유 형식 Fortran 소스 코드입니다.

파일.F90
파일.F95
파일.F03
파일.F08
사전 처리해야 하는 자유 형식 Fortran 소스 코드(기존
전처리기).

파일.가다
소스 코드로 이동합니다.

파일.ads
라이브러리 단위 선언(a의 선언)을 포함하는 Ada 소스 코드 파일
패키지, 하위 프로그램 또는 일반 또는 일반 인스턴스화) 또는 라이브러리 단위
이름 바꾸기 선언(패키지, 일반 또는 하위 프로그램 이름 바꾸기 선언). 그런
파일이라고도 함 명세서.

파일.adb
라이브러리 단위 본문(서브 프로그램 또는 패키지 본문)을 포함하는 Ada 소스 코드 파일.
이러한 파일은 기관.

파일.s
어셈블러 코드.

파일.S
파일.sx
전처리해야 하는 어셈블러 코드입니다.

other
링크에 직접 공급할 개체 파일입니다. 인식되지 않는 모든 파일 이름
접미사는 이런 식으로 처리됩니다.

다음을 사용하여 입력 언어를 명시적으로 지정할 수 있습니다. -x 옵션 :

-x 언어
명시적으로 지정 언어 다음 입력 파일에 대해 (대신
컴파일러는 파일 이름 접미사를 기반으로 기본값을 선택합니다. 이 옵션은 모든
다음 입력 파일까지 -x 옵션. 가능한 값 언어 위치 :

c c-헤더 cpp-출력
C++ C++-헤더 C++-cpp-출력
목적-c 목적-c-헤더 목적-c-cpp-출력
목적-c++ 목적-c++-헤더 목적-c++-cpp-출력
어셈블러 어셈블러-with-cpp
ADA
f77 f77-cpp-입력 f95 f95-cpp-입력
go
자바

-x 없음
후속 파일이 처리되도록 언어의 모든 사양을 끕니다.
파일 이름 접미사에 따라 -x 전혀 사용되지 않았습니다).

-통과 종료 코드
일반적으로 GCC 컴파일러의 단계 중 하나라도 있으면 프로그램이 1의 코드로 종료됩니다.
성공하지 못한 반환 코드를 반환합니다. 지정하는 경우 -통과 종료 코드Walk Through California 프로그램, GCC 프로그램
대신 반환된 단계에서 생성된 수치상 가장 높은 오류와 함께 반환됩니다.
오류 표시. C, C++ 및 Fortran 프론트엔드는 내부 경우 4를 반환합니다.
컴파일러 오류가 발생했습니다.

컴파일 단계 중 일부만 원하는 경우 다음을 사용할 수 있습니다. -x (또는 파일 이름 접미사)
말하다 GCC 시작 위치 및 옵션 중 하나 -c, -S-E 어디를 말하다 GCC 하는 것입니다
멈추다. 일부 조합(예: -x cpp 출력 -E) 지시하다 GCC
전혀.

-c 소스 파일을 컴파일하거나 어셈블하되 링크하지 마십시오. 연결 단계는 단순히
완료되지 않았습니다. 최종 출력은 각 소스 파일에 대한 목적 파일 형식입니다.

기본적으로 소스 파일의 개체 파일 이름은 접미사를 대체하여 만들어집니다. .c,
.i, .s, 등 .o.

컴파일이나 어셈블리가 필요하지 않은 인식되지 않는 입력 파일은 무시됩니다.

-S 적절한 컴파일 단계 후에 중지하십시오. 조립하지 마십시오. 출력은
지정된 각 비 어셈블러 입력 파일에 대한 어셈블러 코드 파일 형식입니다.

기본적으로 소스 파일의 어셈블러 파일 이름은 접미사를 대체하여 만들어집니다.
.c, .i, 등 .s.

컴파일이 필요하지 않은 입력 파일은 무시됩니다.

-E 전처리 단계 후에 중지하십시오. 컴파일러를 적절하게 실행하지 마십시오. 출력은
표준 출력으로 전송되는 사전 처리된 소스 코드의 형식입니다.

전처리가 필요하지 않은 입력 파일은 무시됩니다.

-o 파일
파일에 출력 배치 파일. 이것은 출력의 종류에 관계없이 적용됩니다.
실행 파일, 개체 파일, 어셈블러 파일 또는
전처리된 C 코드.

If -o 지정되지 않은 경우 기본값은 실행 파일을 저장하는 것입니다. 아웃, 그 물체
~을위한 파일 소스.접미사 in 소스.오, 해당 어셈블러 파일 소스, 미리 컴파일된
헤더 파일 소스.접미사.gch, 그리고 표준 출력의 모든 전처리된 C 소스.

-v 다음 단계를 실행하기 위해 실행된 명령을 인쇄합니다(표준 오류 출력에서).
편집. 또한 컴파일러 드라이버 프로그램의 버전 번호와
전처리기와 컴파일러가 적절합니다.

-###
처럼 -v 명령이 실행되지 않고 인수가 인용되지 않는 한
영숫자 또는 "./-_"만 포함합니다. 이것은 쉘 스크립트가 다음을 수행하는 데 유용합니다.
드라이버 생성 명령줄을 캡처합니다.

-파이프
다양한 단계의 통신을 위해 임시 파일 대신 파이프를 사용합니다.
편집. 이것은 어셈블러가 읽을 수 없는 일부 시스템에서 작동하지 않습니다.
파이프에서; 그러나 GNU 어셈블러에는 문제가 없습니다.

--도움
다음에서 이해하는 명령줄 옵션에 대한 설명을 표준 출력에 인쇄합니다.
GCC. 경우 -v 옵션도 지정됩니다. --도움 에게도 전달됩니다.
에 의해 호출되는 다양한 프로세스 GCC, 명령줄 옵션을 표시할 수 있도록
그들은 받아들입니다. 만약 -웩스트라 옵션도 지정되었습니다(이전에 --도움
옵션), 관련 문서가 없는 명령줄 옵션
도 표시됩니다.

-타겟 홀프
대상별 명령줄 옵션에 대한 설명 인쇄(표준 출력에서)
각 도구에 대해. 일부 대상의 경우 추가 대상별 정보도 있을 수 있습니다.
인쇄.

--도움={수업|[^]자격}[, ...]
다음에서 이해하는 명령줄 옵션에 대한 설명을 표준 출력에 인쇄합니다.
지정된 모든 클래스 및 한정자에 맞는 컴파일러. 이들은
지원되는 클래스:

옵티 마이저
그러면 컴파일러에서 지원하는 모든 최적화 옵션이 표시됩니다.

경고
이렇게 하면 생성된 경고 메시지를 제어하는 ​​모든 옵션이 표시됩니다.
컴파일러.

목표
그러면 대상별 옵션이 표시됩니다. 달리 -타겟 홀프 선택권
그러나 링커 및 어셈블러의 대상별 옵션은
표시됩니다. 이는 해당 도구가 현재 확장을 지원하지 않기 때문입니다.
--도움말= 통사론.

매개 변수
이렇게 하면 에서 인식한 값이 표시됩니다. --매개변수 옵션을 선택합니다.

언어
지원되는 옵션이 표시됩니다. 언어어디로 언어 이름입니다
이 버전의 GCC에서 지원되는 언어 중 하나입니다.

공통의
그러면 모든 언어에 공통적인 옵션이 표시됩니다.

지원되는 한정자는 다음과 같습니다.

서류 미비 자
문서화되지 않은 옵션만 표시합니다.

합류 한
동일한 기호 뒤에 나타나는 인수를 사용하는 표시 옵션
다음과 같은 연속적인 텍스트 조각: --help=대상.

별도의
뒤에 오는 별도의 단어로 나타나는 인수를 취하는 표시 옵션
다음과 같은 원래 옵션: -o 결과물 파일.

따라서 예를 들어 에서 지원하는 문서화되지 않은 모든 대상별 스위치를 표시하려면
컴파일러는 다음을 사용할 수 있습니다.

--help=대상, 문서화되지 않음

한정자의 의미는 접두사를 사용하여 반전될 수 있습니다. ^ 캐릭터, 그래서
모든 이진 경고 옵션을 표시하는 예(즉, 켜져 있거나 꺼져 있는 옵션
그리고 인수를 취하지 않음) 설명이 있는 경우 다음을 사용합니다.

--help=경고,^가입됨,^문서화되지 않음

인수 --도움말= 역 한정자로만 구성되어서는 안 됩니다.

일반적으로 다음으로 출력을 제한하지만 여러 클래스를 결합하는 것이 가능합니다.
표시할 것이 없을 정도로. 그러나 작동하는 한 가지 경우는 다음과 같습니다.
수업 중 하나는 목표. 예를 들어 모든 대상별
다음과 같은 최적화 옵션을 사용할 수 있습니다.

--help=타겟, 옵티마이저

XNUMXD덴탈의 --도움말= 옵션은 명령줄에서 반복될 수 있습니다. 각 연속 사용은
요청된 옵션 클래스를 표시하고 이미 있는 옵션은 건너뜁니다.
표시됩니다.

경우 -Q 옵션이 명령줄에 표시되기 전에 --도움말= 옵션을 선택한 다음
에 의해 표시되는 설명 텍스트 --도움말= 변경됩니다. 표시된 것을 설명하는 대신
옵션, 옵션 활성화, 비활성화 또는 설정 여부에 대한 표시가 제공됩니다.
특정 값으로 (컴파일러가 이것을 알고 있다고 가정하면
--도움말= 옵션이 사용됨).

다음은 ARM 포트의 잘린 예입니다. GCC:

% gcc -Q -mabi=2 --help=대상 -c
다음 옵션은 대상에 따라 다릅니다.
-마비= 2
-mabort-on-noreturn [비활성화됨]
-mapcs [비활성화됨]

출력은 이전 명령줄 옵션의 영향에 민감하므로
예를 들어 어떤 최적화가 활성화되어 있는지 확인할 수 있습니다. -O2 사용하여:

-Q -O2 --help=최적화기

또는 다음을 통해 활성화된 바이너리 최적화를 찾을 수 있습니다. -O3 사용하여:

gcc -c -Q -O3 --help=최적화기 > /tmp/O3-opts
gcc -c -Q -O2 --help=최적화기 > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | 그렙 활성화

-표준 접두사 없음
심볼릭 링크를 확장하지 마십시오. 참조를 해결하십시오. /../ or //./, 또는 경로를 만드십시오
상대 접두사를 생성할 때 절대.

--번역
호출된 GCC의 버전 번호와 저작권을 표시합니다.

-싸개
래퍼 프로그램에서 모든 하위 명령을 호출합니다. 래퍼 프로그램의 이름과
매개변수는 쉼표로 구분된 목록으로 전달됩니다.

gcc -c tc -wrapper gdb,--args

이것은 모든 하위 프로그램을 호출합니다. GCC 아래에 gdb --인수, 따라서 호출 cc1
될거야 gdb --인수 cc1 ....

-f플러그인=name.그래서
파일에 플러그인 코드 로드 name.so, dlopen'd할 공유 객체로 가정
컴파일러. 공유 객체 파일의 기본 이름은 플러그인을 식별하는 데 사용됩니다.
인수 구문 분석을 위해(참조 -fplugin-인수-name-=가치 아래에). 각
플러그인은 플러그인 API에 지정된 콜백 함수를 정의해야 합니다.

-fplugin-인수-name-=가치
라는 인수를 정의합니다. 가치가있는 가치 라는 플러그인의 경우 name.

-fdump-ada-spec[-날씬한]
C 및 C++ 소스 및 포함 파일의 경우 해당 Ada 사양을 생성합니다.

-fdump-go-spec=파일
모든 언어의 입력 파일에 대해 해당 Go 선언을 다음에서 생성합니다. 파일. 이
유용한 방법일 수 있는 Go "const", "type", "var" 및 "func" 선언을 생성합니다.
다른 언어로 작성된 코드에 Go 인터페이스를 작성하기 시작합니다.

@파일
다음에서 명령줄 옵션 읽기 파일. 읽은 옵션은 다음 위치에 삽입됩니다.
원래의 @파일 옵션. 만약에 파일 존재하지 않거나 읽을 수 없는 경우 옵션
문자 그대로 처리되며 제거되지 않습니다.

옵션 파일 공백으로 구분됩니다. 공백 문자가 포함될 수 있습니다.
옵션에서 전체 옵션을 작은따옴표나 큰따옴표로 묶습니다. 어느
문자(백슬래시 포함)는
백슬래시와 함께 포함됩니다. NS 파일 자체에 추가 @가 포함될 수 있습니다.파일 옵션; 어느
이러한 옵션은 재귀적으로 처리됩니다.

컴파일 C + + 프로그램
C++ 소스 파일은 일반적으로 접미사 중 하나를 사용합니다. .C, .CC, .cpp, .CPP, .C++, .cp
.cxx; C++ 헤더 파일은 자주 사용합니다. .hh, .hpp, .H, 또는 (공유 템플릿 코드의 경우) .tcc
전처리된 C++ 파일은 접미사를 사용합니다. .ii. GCC는 이러한 이름을 가진 파일을 인식하고
컴파일할 때와 같은 방식으로 컴파일러를 호출하더라도 C++ 프로그램으로 컴파일합니다.
C 프로그램(보통 이름 GCC).

그러나 사용 GCC C++ 라이브러리를 추가하지 않습니다. g ++ GCC를 호출하는 프로그램이며
취급 .c, .h.i 파일을 C 소스 파일 대신 C++ 소스 파일로 -x is
사용되며 C++ 라이브러리에 대한 링크를 자동으로 지정합니다. 이 프로그램은 또한
C 헤더 파일을 미리 컴파일할 때 유용합니다. .h C++ 컴파일에 사용하기 위한 확장입니다.
많은 시스템에서 g ++ 이름과 함께 설치됩니다. C ++.

C++ 프로그램을 컴파일할 때 동일한 명령줄 옵션을 여러 개 지정할 수 있습니다.
모든 언어로 프로그램을 컴파일하는 데 사용합니다. 또는 C에 의미 있는 명령줄 옵션
및 관련 언어; 또는 C++ 프로그램에만 의미가 있는 옵션.

옵션 제어 C 방언
다음 옵션은 C의 방언(또는 C++과 같은 C에서 파생된 언어,
컴파일러가 허용하는 Objective-C 및 Objective-C++):

-안시
C 모드에서는 다음과 같습니다. -표준=c90. C++ 모드에서는 다음과 같습니다.
-std = c ++ 98.

이것은 ISO C90과 호환되지 않는 GCC의 특정 기능을 끕니다.
C 코드 컴파일) 또는 "asm" 및 같은 표준 C++(C++ 코드를 컴파일할 때)
"typeof" 키워드 및 "unix" 및 "vax"와 같은 미리 정의된 매크로
사용 중인 시스템 유형. 또한 바람직하지 않고 거의 사용되지 않는 ISO를 가능하게 합니다.
삼국지 기능. C 컴파일러의 경우 C++ 스타일 인식을 비활성화합니다. //
주석 및 "인라인" 키워드.

대체 키워드 "__asm__", "__extension__", "__inline__" 및 "__typeof__"
에도 불구하고 계속 일하다 -안시. ISO C 프로그램에서 사용하고 싶지 않습니다.
물론 포함할 수 있는 헤더 파일에 넣는 것이 유용합니다.
컴파일 완료 -안시. "__unix__"와 같은 사전 정의된 대체 매크로 및
"__vax__"도 사용 가능 여부에 관계없이 사용할 수 있습니다. -안시.

XNUMXD덴탈의 -안시 옵션으로 인해 비 ISO 프로그램이 무료로 거부되지 않습니다. 을위한
즉, -페단 틱 에 추가로 필요합니다 -안시.

매크로 "__STRICT_ANSI__"는 -안시 옵션이 사용됩니다. 일부 헤더
파일은 이 매크로를 인지하고 특정 기능을 선언하거나 정의하지 않을 수 있습니다.
ISO 표준이 요구하지 않는 특정 매크로; 이것은 방해를 피하기 위한 것입니다
다른 용도로 이러한 이름을 사용할 수 있는 모든 프로그램에서.

일반적으로 내장되지만 ISO C에서 정의한 의미 체계가 없는 기능
(예: "alloca" 및 "ffs")는 다음과 같은 경우 내장 함수가 아닙니다. -안시 사용.

-표준=
언어 표준을 결정합니다. 이 옵션은 현재 다음 경우에만 지원됩니다.
C 또는 C++ 컴파일.

컴파일러는 다음과 같은 몇 가지 기본 표준을 수용할 수 있습니다. c90 or C ++ 98, GNU 방언
다음과 같은 표준의 gnu90 or 누++98. 기본 표준을 지정하여
컴파일러는 해당 표준을 따르는 모든 프로그램과 GNU를 사용하는 프로그램을 허용합니다.
모순되지 않는 확장. 예를 들어, -표준=c90 특정 끄기
"asm" 및 "typeof"와 같은 ISO C90과 호환되지 않는 GCC의 기능
키워드, 그러나 ISO C90에서 의미가 없는 다른 GNU 확장자(예:
"?:" 표현의 중간 용어 생략. 반면에 GNU를 지정하여
표준의 방언, 컴파일러가 지원하는 모든 기능은 다음과 같은 경우에도 활성화됩니다.
기능은 기본 표준 및 일부 엄격한 준수 프로그램의 의미를 변경합니다.
거부될 수 있습니다. 특정 표준은 다음에서 사용됩니다. -페단 틱 식별하기 위해
기능은 해당 버전의 표준이 제공된 GNU 확장입니다. 예를 들어 -std=gnu90
-페단 틱 C++ 스타일에 대해 경고합니다. // 댓글, 동안 -std=gnu99 -페단 틱 겠지
아니.

이 옵션에 대한 값을 제공해야 합니다. 가능한 값은

c90
c89
ISO9899:1990
모든 ISO C90 프로그램 지원(ISO C90과 충돌하는 특정 GNU 확장
비활성화됨). 와 동일 -안시 C 코드의 경우.

ISO9899:199409
개정 90에서 수정된 ISO C1.

c99
의 C9x
ISO9899:1999
ISO9899:199x
ISO C99. 이 표준은 아직 완전히 지원되지 않습니다. 보다
<http://gcc.gnu.org/gcc-4.7/c99status.html> 자세한 내용은. 이름 의 C9x
ISO9899:199x 더 이상 사용되지 않습니다.

c11
의 C1x
ISO9899:2011
ISO C11은 ISO C 표준의 2011년 개정판입니다. 지원이 불완전하고
실험적. 이름 의 C1x 더 이상 사용되지 않습니다.

gnu90
gnu89
ISO C90의 GNU 방언(일부 C99 기능 포함). 이것은 C의 기본값입니다.
암호.

gnu99
gnu9x
ISO C99의 GNU 방언. ISO C99가 GCC에서 완전히 구현되면 이는
기본값이 됩니다. 이름 gnu9x 더 이상 사용되지 않습니다.

gnu11
gnu1x
ISO C11의 GNU 방언. 지원이 불완전하고 실험적입니다. 이름 gnu1x
더 이상 사용되지 않습니다.

C ++ 98
1998 ISO C++ 표준 및 수정 사항. 와 동일 -안시 C++ 코드용.

누++98
GNU 방언 -std = c ++ 98. 이것은 C++ 코드의 기본값입니다.

C ++ 11
2011 ISO C++ 표준 및 수정 사항. C++11에 대한 지원은 여전히
실험적이며 향후 릴리스에서 호환되지 않는 방식으로 변경될 수 있습니다.

누++11
GNU 방언 -std = c ++ 11. C++11에 대한 지원은 아직 실험적이며 변경될 수 있습니다.
향후 릴리스에서 호환되지 않는 방식으로.

-fgnu89-인라인
옵션 -fgnu89-인라인 GCC에 "인라인"에 대해 전통적인 GNU 의미 체계를 사용하도록 지시합니다.
C99 모드에서 작동합니다.
이 옵션은 GCC 버전 4.1.3 이하에서 허용되고 무시됩니다.
4.3. GCC 버전 4.3 이상에서는 C99 모드에서 GCC의 동작을 변경합니다. 사용
이 옵션은 "gnu_inline" 함수 속성을 모든
인라인 함수.

옵션 -fno-gnu89-인라인 명시적으로 GCC에 C99 의미 체계를 사용하도록 지시합니다.
C99 또는 gnu99 모드에 있을 때 "인라인"입니다(즉, 기본 동작을 지정함). 이것
옵션은 GCC 4.3에서 처음 지원되었습니다. 이 옵션은 다음에서 지원되지 않습니다. -표준=c90 or
-std=gnu90 방법.

전처리기 매크로 "__GNUC_GNU_INLINE__" 및 "__GNUC_STDC_INLINE__"을 사용할 수 있습니다.
"인라인" 기능에 대해 어떤 의미 체계가 적용되는지 확인합니다.

-보조 정보 파일 이름
선언된 모든 함수에 대해 주어진 파일 이름 프로토타입 선언으로 출력 및/또는
헤더 파일을 포함하여 번역 단위에 정의됩니다. 이 옵션은
C 이외의 언어에서는 조용히 무시됩니다.

선언 외에도 파일은 주석에서 각 선언의 출처를 나타냅니다.
(소스 파일 및 라인), 선언이 암시적, 프로토타입 또는
프로토타입되지 않은(I, N 새로운 또는 O old의 경우 각각 다음 첫 번째 문자에서
행 번호 및 콜론), 선언 또는 정의에서 왔는지 여부
(C or F, 각각 다음 문자). 기능의 경우
정의에서 선언이 뒤따르는 K&R 스타일의 인수 목록도
선언 후 주석 내부에 제공됩니다.

- 휴경 매개변수 없는 가변 함수
명명된 매개변수 없이 가변 함수를 허용합니다.

이러한 기능을 정의하는 것은 가능하지만, 이것은 매우 유용하지 않습니다.
인수를 읽을 수 없습니다. 이 구성은 C에 대해서만 지원됩니다.
C++에서 허용합니다.

-fno-asm
코드에서 사용할 수 있도록 "asm", "inline" 또는 "typeof"를 키워드로 인식하지 마십시오.
단어를 식별자로 사용합니다. "__asm__", "__inline__" 및
대신 "__typeof__". -안시 의미하다 -fno-asm.

C++에서 이 스위치는 "typeof" 키워드에만 영향을 줍니다. "asm"과 "inline"은
표준 키워드. 다음을 사용하고 싶을 수도 있습니다. -fno-gnu-키워드 대신 플래그가 있습니다.
같은 효과. C99 모드에서(-표준=c99 or -std=gnu99), 이 스위치는
"inline"은 ISO C99의 표준 키워드이기 때문에 "asm" 및 "typeof" 키워드입니다.

-fno 내장
-fno-내장-기능
로 시작하지 않는 내장 함수를 인식하지 마십시오. __내장_ 접두사로.

GCC는 일반적으로 특정 내장 기능을 더 많이 처리하기 위해 특수 코드를 생성합니다.
효율적으로; 예를 들어, "alloca"에 대한 호출은 단일 명령이 될 수 있습니다.
스택을 직접 조정하고 "memcpy"에 대한 호출이 인라인 복사 루프가 될 수 있습니다. NS
결과 코드는 종종 더 작고 빠르지만 함수가 no를 호출하기 때문에
더 이상 표시되지 않으면 해당 호출에 중단점을 설정할 수 없으며 변경할 수도 없습니다.
다른 라이브러리와 연결하여 함수의 동작. 또한, 언제
함수가 내장 함수로 인식되면 GCC는 이에 대한 정보를 사용할 수 있습니다.
해당 함수에 대한 호출 문제에 대해 경고하거나 더 많은 것을 생성하는 함수
결과 코드에 여전히 해당 함수에 대한 호출이 포함되어 있어도 효율적인 코드입니다. 을위한
예를 들어 경고가 표시됩니다. -W포맷 "printf"가 잘못된 호출인 경우 "printf"가
내장되어 있으며 "strlen"은 전역 메모리를 수정하지 않는 것으로 알려져 있습니다.

와 더불어 -fno-내장-기능 옵션 내장 기능만 기능 사용할 수 없습니다.
기능 로 시작해서는 안 됩니다. __내장_. 내장되지 않은 함수의 이름이 지정된 경우
이 버전의 GCC에서는 이 옵션이 무시됩니다. 해당하는 내용이 없습니다
-f내장-기능 옵션; 내장 기능을 선택적으로 활성화하려면
사용 -fno 내장 or -프리스탠딩, 다음과 같은 매크로를 정의할 수 있습니다.

#define abs(n) __builtin_abs((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))

-호스트
컴파일이 호스팅된 환경에서 발생한다고 주장합니다. 이것은 의미합니다 -f내장.
호스팅 환경은 전체 표준 라이브러리를 사용할 수 있는 환경입니다.
"main"의 반환 유형은 "int"입니다. 예는 다음을 제외하고 거의 모든 것입니다.
핵심. 이것은 동등하다 -fno 독립형.

-프리스탠딩
컴파일이 독립 환경에서 발생한다고 주장합니다. 이것은 의미합니다
-fno 내장. 독립 환경은 표준 라이브러리가 제공하지 않을 수 있는 환경입니다.
존재하며 프로그램 시작이 반드시 "main"에 있지 않을 수 있습니다. 가장 확실한 예
OS 커널입니다. 이것은 동등하다 -fno 호스팅.

-fopenmp
C/C++에서 OpenMP 지시문 "#pragma omp" 및 Fortran에서 "!$omp" 처리를 활성화합니다.
인셀덤 공식 판매점인 -fopenmp 가 지정되면 컴파일러는 다음에 따라 병렬 코드를 생성합니다.
OpenMP 응용 프로그램 인터페이스 v3.0http://www.openmp.org/>. 이 옵션
의미하다 -pthread, 따라서 다음을 지원하는 대상에서만 지원됩니다.
-pthread.

-fgnu-tm
옵션이 -fgnu-tm 가 지정되면 컴파일러는 Linux용 코드를 생성합니다.
인텔의 현재 트랜잭션 메모리 ABI 사양 문서의 변형(개정
1.1, 6년 2009월 XNUMX일). 인터페이스가 변경될 수 있는 실험적인 기능입니다.
공식 사양이 변경됨에 따라 GCC의 향후 버전. 아니니 참고하세요
이 기능에 대해 모든 아키텍처가 지원됩니다.

GCC의 트랜잭션 메모리 지원에 대한 자세한 내용은

비호출 예외에서는 트랜잭션 메모리 기능이 지원되지 않습니다.
(-fnon-call-exception).

-fms-확장
Microsoft 헤더 파일에 사용되는 일부 비표준 구성을 허용합니다.

C++ 코드에서 이것은 구조의 멤버 이름이 이전 유형과 유사하도록 허용합니다.
선언.

typedef 정수 UOW;
구조체 ABC {
우우우우우우우;
};

구조체와 공용체에서 이름이 없는 필드의 일부 경우는 이 경우에만 허용됩니다.
옵션을 선택합니다.

-fplan9-확장
Plan 9 코드에 사용된 일부 비표준 구성을 수락합니다.

이를 통해 -fms-확장, 익명의 구조체에 대한 포인터 전달을 허용합니다.
필드 유형의 요소에 대한 포인터를 기대하는 함수에 대한 필드, 및
typedef를 사용하여 선언된 익명 필드 참조를 허용합니다. 이것은 단지
C++가 아닌 C에서 지원됩니다.

-삼각형
ISO C trigraph를 지원합니다. NS -안시 옵션(및 -표준 엄격한 ISO C를 위한 옵션
적합성) 의미 -삼각형.

-통합되지 않은-cpp
전처리와 컴파일의 두 단계로 컴파일을 수행합니다. 이 옵션은
사용자가 "cc1", "cc1plus" 또는 "cc1obj"를 통해 -B 옵션. 사용자가 제공한
컴파일 단계는 정상 후에 추가 전처리 단계를 추가할 수 있습니다.
전처리하지만 컴파일하기 전에. 기본값은 통합 cpp를 사용하는 것입니다.
(내부 cpp)

이 옵션의 의미는 "cc1", "cc1plus" 및 "cc1obj"가 병합되면 변경됩니다.

-전통적인
-전통적인 cpp
이전에는 이러한 옵션으로 인해 GCC가 사전 표준 C 컴파일러를 에뮬레이트하려고 했습니다.
이제 만 지원됩니다. -E 스위치. 전처리기는 계속 지원
사전 표준 모드. 자세한 내용은 GNU CPP 설명서를 참조하십시오.

-fcond-불일치
두 번째 및 세 번째 인수에서 유형이 일치하지 않는 조건식을 허용합니다.
그러한 표현식의 값은 무효입니다. 이 옵션은 C++에서 지원되지 않습니다.

-아마 벡터 변환
요소 수가 다른 벡터 간의 암시적 변환 허용 및/또는
호환되지 않는 요소 유형 이 옵션은 새 코드에 사용하면 안 됩니다.

-funsigned-char
"unsigned char"처럼 "char" 유형을 unsigned로 둡니다.

각 종류의 기계에는 "char"가 무엇인지에 대한 기본값이 있습니다. 그것은
기본적으로 "unsigned char" 또는 기본적으로 "signed char"와 같습니다.

이상적으로 이식 가능한 프로그램은 항상 "signed char" 또는 "unsigned char"를 사용해야 합니다.
객체의 부호에 따라 다릅니다. 그러나 많은 프로그램이 사용하도록 작성되었습니다.
일반 "char"에 따라 서명되거나 서명되지 않을 것으로 예상합니다.
그들이 쓰여진 기계. 이 옵션과 그 역을 사용하면 다음과 같이 만들 수 있습니다.
프로그램은 반대 기본값으로 작동합니다.

"char" 유형은 항상 "signed char" 또는 "unsigned" 각각과 구별되는 유형입니다.
char", 그 동작이 항상 그 둘 중 하나와 같더라도.

-fsigned-char
"signed char"와 같이 "char" 유형을 서명하도록 합니다.

이것은 다음과 같습니다. -fno-unsigned-char, 의 부정형이다.
-funsigned-char. 마찬가지로 옵션 -fno-서명-문자 에 해당하는
-funsigned-char.

-fsigned 비트 필드
- funsigned 비트 필드
-fno-signed-bitfields
-fno-부호 없는 비트 필드
이 옵션은 선언 시 비트 필드가 서명되었는지 여부를 제어합니다.
"signed" 또는 "unsigned"를 사용하지 않습니다. 기본적으로 이러한 비트 필드는 서명되어 있습니다.
일관성이 있기 때문입니다. "int"와 같은 기본 정수 유형은 부호 있는 유형입니다.

옵션 제어 C + + 방언
이 섹션에서는 C++ 프로그램에만 의미가 있는 명령줄 옵션에 대해 설명합니다.
그러나 어떤 언어를 사용하든 대부분의 GNU 컴파일러 옵션을 사용할 수도 있습니다.
예를 들어 다음과 같이 "firstClass.C" 파일을 컴파일할 수 있습니다.

g++ -g -frepo -O -c firstClass.C

이 예에서는 -프레포 C++ 프로그램 전용 옵션입니다. 당신은 사용할 수 있습니다
GCC에서 지원하는 모든 언어의 기타 옵션.

다음은 다음과 같은 옵션 목록입니다. C++ 프로그램 컴파일:

-fabi 버전=n
버전 사용 n C++ ABI. 버전 2는 가장 먼저 실행되는 C++ ABI의 버전입니다.
G++ 3.4에 등장. 버전 1은 에 처음 등장한 C++ ABI의 버전입니다.
G++ 3.2. 버전 0은 항상 C++에 가장 근접한 버전입니다.
ABI 사양. 따라서 버전 0을 사용하여 얻은 ABI는 ABI로 변경됩니다.
버그가 수정되었습니다.

기본값은 버전 2입니다.

버전 3은 상수 주소를 템플릿 인수로 맹글링하는 오류를 수정합니다.

G++ 4에서 처음 등장한 버전 4.5는 벡터에 대한 표준 맹글링을 구현합니다.
유형.

G++ 5에서 처음 등장한 버전 4.6는 속성의 맹글링을 수정합니다.
함수 포인터 유형에 대한 const/volatile, 일반 decl의 decltype 및 사용
다른 매개변수의 선언에서 함수 매개변수.

G++ 6에 처음 등장한 버전 4.7은 C++11의 승격 동작을 수정합니다.
범위가 지정된 열거형 및 템플릿 인수 팩의 맹글링, const/static_cast, 접두사 ++
및 --, 템플릿 인수로 사용되는 클래스 범위 함수.

참조 -와비.

-fno-액세스 제어
모든 액세스 확인을 끕니다. 이 스위치는 주로 다음의 버그를 해결하는 데 유용합니다.
액세스 제어 코드.

-fcheck-신규
시도하기 전에 "operator new"가 반환한 포인터가 null이 아닌지 확인하십시오.
할당된 스토리지를 수정합니다. 이 검사는 일반적으로 C++
standard는 "operator new"가 선언된 경우에만 0을 반환하도록 지정합니다. 던지다(),
이 경우 컴파일러는 이것이 없어도 항상 반환 값을 확인합니다.
옵션. 다른 모든 경우에 "operator new"에 비어 있지 않은 예외가 있는 경우
사양에서 메모리 소진은 "std::bad_alloc"을 throw하여 신호를 보냅니다. 또한보십시오
(아무도).

-f보존 공간
초기화되지 않았거나 런타임에 초기화된 전역 변수를 다음과 같이 공통 세그먼트에 넣습니다.
C는 한다. 이렇게 하면 중복을 진단하지 않는 대신 실행 파일의 공간이 절약됩니다.
정의. 이 플래그로 컴파일하고 프로그램이 이상하게 충돌하는 경우
"main()"이 완료된 후 두 번 파괴되는 객체가 있을 수 있습니다.
두 정의가 병합되었기 때문입니다.

이 옵션은 더 이상 대부분의 대상에서 유용하지 않습니다. 이제 지원이 추가되었습니다.
변수를 공통으로 만들지 않고 BSS에 넣습니다.

-fconstexpr-깊이=n
C++11 constexpr 함수에 대한 최대 중첩 평가 깊이를 다음으로 설정합니다. n. 한도
상수 표현식 평가 중에 무한 재귀를 감지하는 데 필요합니다. NS
표준에서 지정한 최소값은 512입니다.

-fdeduce-init-list
중괄호에서 템플릿 유형 매개변수를 std::initializer_list로 추론 활성화
동봉된 초기화 목록, 즉

주형 자동 전달(T t) -> decltype(realfn(t))
{
반환 realfn (t);
}

무효 f()
{
앞으로({1,2}); // 콜포워드 >
}

이 공제는 원래 제안된 것의 가능한 확장으로 구현되었습니다.
C++11 표준에 대한 의미 체계이지만 최종 표준의 일부가 아니므로 다음과 같습니다.
기본적으로 비활성화되어 있습니다. 이 옵션은 더 이상 사용되지 않으며 향후 제거될 수 있습니다.
G++ 버전.

-ffriend 주입
친구 함수를 둘러싸는 네임스페이스에 주입하여 외부에서 볼 수 있도록 합니다.
선언된 클래스의 범위입니다. 친구 기능이 문서화되었습니다.
이전 Annotated C++ Reference Manual 및 이전 버전의 G++에서 이 방식으로 작동하려면
4.1은 항상 그런 식으로 작동했습니다. 그러나 ISO C++에서는 그렇지 않은 friend 함수
둘러싸는 범위에서 선언된 것은 인수 종속 조회를 통해서만 찾을 수 있습니다.
이 옵션을 사용하면 이전 릴리스에서와 같이 친구가 주입됩니다.

이 옵션은 호환성을 위한 것으로 향후 G++ 릴리스에서 제거될 수 있습니다.

-fno-elide-생성자
C++ 표준은 구현이 임시 생성을 생략하도록 허용합니다.
같은 유형의 다른 개체를 초기화하는 데 사용됩니다. 이 옵션을 지정하면
최적화하고 모든 경우에 G++에서 복사 생성자를 호출하도록 합니다.

-fno-enforce-eh-specs
런타임에 예외 사양 위반을 확인하는 코드를 생성하지 마십시오.
이 옵션은 C++ 표준을 위반하지만 코드 크기를 줄이는 데 유용할 수 있습니다.
정의와 매우 유사한 프로덕션 빌드 엔데버그. 이것은 사용자 코드에 권한을 부여하지 않습니다
예외 사양을 위반하여 예외를 던지기 위해; 컴파일러는
여전히 사양에 따라 최적화하므로 예기치 않은 예외가 발생하면
정의되지 않은 동작이 발생합니다.

-ffor 범위
-범위에 대한 fno
If -ffor 범위 가 지정되면 선언된 변수의 범위 for-init-문
제한됩니다 for C++ 표준에서 지정한 대로 루프 자체. 만약에
-범위에 대한 fno 가 지정되면 선언된 변수의 범위 for-init-문
이전 버전의 G++에서와 같이 둘러싸는 범위의 끝까지 확장되며,
C++의 다른 (전통적인) 구현.

어느 플래그도 표준을 따르지 않고 허용하고 제공하는 경우 기본값
그렇지 않으면 유효하지 않거나 다른 코드를 가질 수 있는 구식 코드에 대한 경고
행동.

-fno-gnu-키워드
코드에서 이 단어를 키워드로 사용할 수 있도록 "typeof"를 키워드로 인식하지 마십시오.
식별자. 대신 "__typeof__" 키워드를 사용할 수 있습니다. -안시 의미하다
-fno-gnu-키워드.

-fno-암시적 템플릿
암시적으로(즉,
사용하다); 명시적 인스턴스화에 대해서만 코드를 내보냅니다.

-fno-implicit-inline-템플릿
인라인 템플릿의 암시적 인스턴스화를 위한 코드도 내보내지 마십시오. 기본값
최적화가 있거나 없는 컴파일이 수행되도록 인라인을 다르게 처리하는 것입니다.
동일한 명시적 인스턴스화 세트가 필요합니다.

-fno-구현-인라인
공간을 절약하려면 에 의해 제어되는 인라인 함수의 외부 복사본을 내보내지 마십시오.
#프라그마 이행. 이러한 기능이 없으면 링커 오류가 발생합니다.
호출되는 모든 곳에서 인라인됩니다.

-fms-확장
암시적 int 및 MFC와 같이 MFC에서 사용되는 구문에 대한 현학적 경고를 비활성화합니다.
비표준 구문을 통해 멤버 함수에 대한 포인터를 가져옵니다.

-fno-nonansi-내장
ANSI/ISO C에서 요구하지 않는 내장 함수 선언을 비활성화합니다.
"ffs", "alloca", "_exit", "index", "bzero", "conjf" 및 기타 관련 항목 포함
기능.

-fnothrow-opt
"noexcept" 사양인 것처럼 "throw()" 예외 사양을 처리합니다.
예외 없이 함수에 대한 텍스트 크기 오버헤드를 줄이거나 제거하기 위해
사양. 함수에 중요하지 않은 유형의 지역 변수가 있는 경우
소멸자, 예외 사양은 실제로 함수를 더 작게 만듭니다.
이러한 변수에 대한 EH 정리가 최적화될 수 있기 때문입니다. 의미론적
효과는 그러한 예외가 있는 함수에서 예외가 발생한다는 것입니다.
사양은 "예기치 않은" 대신 "종료"를 호출합니다.

-fno 연산자 이름
연산자 이름 키워드 "and", "bitand", "bitor", "compl", "not", "or"를 처리하지 마십시오.
키워드로 동의어로 "xor".

-fno-선택 사항-diags
표준에서 컴파일러가 발행할 필요가 없는 진단을 비활성화합니다.
현재, G++에서 발행한 유일한 진단은 다음을 가진 이름에 대한 진단입니다.
클래스 내의 여러 의미.

-허용
비준수 코드에 대한 일부 진단을 오류에서 경고로 다운그레이드합니다. 따라서,
사용 -허용 일부 부적합 코드를 컴파일할 수 있습니다.

-fno-pretty-템플릿
오류 메시지가 함수 템플릿의 특수화를 참조할 때 컴파일러는
일반적으로 템플릿의 서명과 템플릿 인수를 인쇄합니다.
및 서명의 모든 typedef 또는 typename(예: "void f(T) [with T = int]")
어떤 템플릿이 관련되어 있는지 명확하도록 "void f(int)")보다. 오류가 발생했을 때
메시지가 클래스 템플릿의 특수화를 참조하는 경우 컴파일러는
해당 템플릿의 기본 템플릿 인수와 일치하는 템플릿 인수. 만약에
이러한 동작 중 하나는 오류 메시지를 이해하는 것보다 더 어렵게 만듭니다.
더 쉽게, 사용 -fno-pretty-템플릿 비활성화됩니다.

-프레포
링크 시간에 자동 템플릿 인스턴스화를 활성화합니다. 이 옵션은 또한 다음을 의미합니다.
-fno-암시적 템플릿.

-fno-rtti
에서 사용할 가상 기능이 있는 모든 클래스에 대한 정보 생성을 비활성화합니다.
C++ 런타임 유형 식별 기능(동적_캐스트Typeid). 당신이하지 않으면
언어의 해당 부분을 사용하면 이 플래그를 사용하여 공간을 절약할 수 있습니다. 메모
예외 처리는 동일한 정보를 사용하지만 필요에 따라 생성합니다.
XNUMXD덴탈의 동적_캐스트 연산자는 런타임이 필요하지 않은 캐스트에 계속 사용할 수 있습니다.
유형 정보, 즉 "void *" 또는 명확한 기본 클래스로의 캐스트.

-fstats
컴파일이 끝날 때 프런트 엔드 처리에 대한 통계를 내보냅니다. 이것
정보는 일반적으로 G++ 개발 팀에만 유용합니다.

-fstrict 열거형
열거형의 값을 가정하여 컴파일러가 최적화할 수 있도록 합니다.
열거형 값 중 하나일 수 있습니다(C++ 표준에 정의됨).
기본적으로 필요한 최소 비트 수로 표현할 수 있는 값
모든 열거자를 나타냄). 이 가정은 프로그램이 다음을 사용하는 경우 유효하지 않을 수 있습니다.
임의의 정수 값을 열거형으로 변환하는 캐스트.

-f템플릿-깊이=n
템플릿 클래스의 최대 인스턴스화 깊이를 다음으로 설정합니다. n. 한도
템플릿 중 무한 재귀를 감지하려면 템플릿 인스턴스화 깊이가 필요합니다.
클래스 인스턴스화. ANSI/ISO C++ 준수 프로그램은 최대값에 의존해서는 안 됩니다.
깊이가 17보다 큽니다(C++1024에서 11로 변경됨). 기본값은 900입니다.
컴파일러는 일부 상황에서 1024에 도달하기 전에 스택 공간이 부족할 수 있습니다.

-fno-threadsafe-정적
스레드용 C++ ABI에 지정된 루틴을 사용하기 위해 추가 코드를 내보내지 마십시오.
로컬 정적의 안전한 초기화. 이 옵션을 사용하여 코드 크기를 줄일 수 있습니다.
스레드로부터 안전할 필요가 없는 코드에서 약간.

-퓨즈 -cxa-atexit
"__cxa_atexit"를 사용하여 정적 저장 기간이 있는 객체의 소멸자를 등록합니다.
"atexit" 기능이 아닌 기능. 이 옵션은 완전히
정적 소멸자의 표준 준수 처리, 그러나 C
라이브러리는 "__cxa_atexit"를 지원합니다.

-fno-use-cxa-get-예외-ptr
"__cxa_get_exception_ptr" 런타임 루틴을 사용하지 마십시오. 이로 인해
"std::uncaught_exception"은 올바르지 않지만 런타임 루틴이 다음과 같은 경우 필요합니다.
사용 불가.

-fvisibility-inlines-hidden
이 스위치는 사용자가 포인터를 인라인으로 비교하려고 시도하지 않음을 선언합니다.
두 함수의 주소가 서로 다른 함수 또는 메서드
공유 객체.

이것의 효과는 GCC가 인라인 메소드를 다음과 같이 효과적으로 표시할 수 있다는 것입니다.
내보내기에 나타나지 않도록 "__attribute__ ((가시성("hidden")))"
DSO의 테이블이며 DSO 내에서 사용될 때 PLT 간접 참조가 필요하지 않습니다.
이 옵션을 활성화하면 DSO의 로드 및 링크 시간에 극적인 영향을 미칠 수 있습니다.
라이브러리가 무거워지면 동적 내보내기 테이블의 크기를 크게 줄입니다.
템플릿 사용.

이 스위치의 동작은 메서드를 숨김으로 표시하는 것과 완전히 동일하지 않습니다.
함수에 국한된 정적 변수에 영향을 미치지 않거나 원인
컴파일러는 함수가 하나의 공유 객체에만 정의되어 있다고 추론합니다.

메소드의 효과를 무효화하기 위해 명시적으로 가시성이 있는 것으로 메소드를 표시할 수 있습니다.
해당 방법으로 전환합니다. 예를 들어 포인터를 비교하려는 경우
특정 인라인 메서드의 경우 기본 가시성이 있는 것으로 표시할 수 있습니다. 표시
명시적 가시성이 있는 둘러싸는 클래스는 효과가 없습니다.

명시적으로 인스턴스화된 인라인 메서드는 링크로 이 옵션의 영향을 받지 않습니다.
그렇지 않으면 공유 라이브러리 경계를 넘을 수 있습니다.

-fvisibility-ms-compat
이 플래그는 가시성 설정을 사용하여 GCC의 C++ 연결 모델을 만들려고 시도합니다.
Microsoft Visual Studio와 호환됩니다.

플래그는 GCC의 연결 모델을 다음과 같이 변경합니다.

1. 다음과 같이 기본 가시성을 "숨김"으로 설정합니다. -fvisibility=숨김.

2. 멤버가 아닌 유형은 기본적으로 숨겨져 있지 않습니다.

3. 명시적 가시성이 없는 유형에 대해 단일 정의 규칙이 완화됩니다.
둘 이상의 다른 공유 객체에 정의된 사양:
이 옵션이 있을 때 허용되었을 경우 선언이 허용됩니다.
사용되지 않습니다.

새 코드에서는 다음을 사용하는 것이 좋습니다. -fvisibility=숨김 해당 클래스를 내보냅니다.
외부에서 볼 수 있도록 설계되었습니다. 불행히도 코드가 의존하는 것은 가능합니다.
아마도 실수로 Visual Studio 동작에서.

이러한 변경의 결과 중에는 동일한 유형의 정적 데이터 멤버가
같은 이름을 가지지만 다른 공유 객체에 정의된 것은 다를 것입니다.
하나를 변경해도 다른 하나는 변경되지 않습니다. 정의된 함수 멤버에 대한 포인터
다른 공유 개체에서 동등하게 비교할 수 없습니다. 이 플래그가 주어졌을 때,
동일한 이름을 가진 유형을 다르게 정의하는 ODR 위반.

-fno-약한
링커에서 제공하는 경우에도 약한 기호 지원을 사용하지 마십시오. 기본적으로 G++
사용 가능한 경우 약한 기호를 사용합니다. 이 옵션은 테스트용으로만 존재하며,
최종 사용자가 사용해서는 안 됩니다. 그것은 열등한 코드를 생성하고 아무런 이점이 없습니다.
이 옵션은 G++의 향후 릴리스에서 제거될 수 있습니다.

-nostdinc++
C++에 특정한 표준 디렉토리에서 헤더 파일을 검색하지 마십시오.
여전히 다른 표준 디렉토리를 검색합니다. (이 옵션은 빌드할 때 사용됩니다.
C++ 라이브러리.)

또한 이러한 최적화, 경고 및 코드 생성 옵션은 의미가 있습니다.
C++ 프로그램의 경우:

-fno-기본-인라인
가정하지 마십시오 인라인 클래스 범위 내에서 정의된 함수의 경우.
이러한 함수에는 인라인 함수와 같은 연결이 있습니다. 그들은 그냥하지 않습니다
기본적으로 인라인됩니다.

-와비 (C, Objective-C, C++ 및 Objective-C++만 해당)
G++에서 공급업체 중립적인 코드와 호환되지 않을 수 있는 코드를 생성할 때 경고
C++ ABI. 이러한 모든 경우에 대해 경고하기 위해 노력했지만,
G ++가 생성하더라도 경고하지 않은 경우가 있습니다.
호환되지 않는 코드입니다. 경우에도 경고가 발생하는 경우가 있습니다.
생성된 코드는 호환됩니다.

다음 사항이 염려되는 경우 이러한 경고를 피하기 위해 코드를 다시 작성해야 합니다.
G++로 생성된 코드는 다음으로 생성된 코드와 바이너리 호환되지 않을 수 있다는 사실
다른 컴파일러.

알려진 비호환성 -fabi 버전=2 (기본값)에는 다음이 포함됩니다.

· 참조 유형의 유형이 아닌 템플릿 매개변수가 있는 템플릿이 맹글링됩니다.
틀리게:

외부 정수 N;
주형 구조체 S {};
공허 n (S ) {2}

이것은 다음에서 수정됩니다. -fabi 버전=3.

· "__attribute((vector_size))"를 사용하여 선언된 SIMD 벡터 유형은
벡터를 사용하는 함수의 오버로드를 허용하지 않는 비표준 방식
다른 크기의.

맹글링은 다음에서 변경됩니다. -fabi 버전=4.

알려진 비호환성 -fabi 버전=1 과 같습니다 :

· 비트 필드에 대한 꼬리 패딩의 잘못된 처리. G++에서 데이터 압축을 시도할 수 있음
기본 클래스와 동일한 바이트로 예를 들어:

구조체 A { 가상 무효 f(); 정수 f1 : 1; };
구조체 B : 공개 A { int f2 : 1; };

이 경우 G++는 "B::f2"를 "A::f1"과 동일한 바이트에 배치합니다. 다른 컴파일러
하지 않을 것이다. "A"를 명시적으로 채워서 크기가
플랫폼의 바이트 크기의 배수입니다. 이는 G++ 및 기타
컴파일러는 "B"를 동일하게 레이아웃합니다.

· 가상 기지에 대한 꼬리 패딩의 잘못된 처리. G++는 꼬리를 사용하지 않습니다
가상 베이스를 배치할 때 패딩. 예를 들어:

구조체 A { 가상 무효 f(); 문자 c1; };
구조체 B { B(); 문자 c2; };
구조체 C: 공개 A, 공개 가상 B {};

이 경우 G++는 "A"의 꼬리 여백에 "B"를 배치하지 않습니다. 다른
컴파일러는 할 것입니다. 명시적으로 "A"를 채워서 이 문제를 피할 수 있습니다.
크기는 정렬의 배수입니다(가상 기본 클래스 무시). 그럴 것이다
G++ 및 기타 컴파일러가 "C"를 동일하게 레이아웃하도록 합니다.

· 선언된 너비보다 큰 비트 필드의 잘못된 처리
비트 필드가 공용체에 나타날 때 기본 유형입니다. 예를 들어:

유니온 U { int i : 4096; };

"int"에 4096비트가 없다고 가정하면 G++는 합집합을 너무 작게 만듭니다.
"int"의 비트 수로.

· 빈 클래스는 잘못된 오프셋에 배치될 수 있습니다. 예를 들어:

구조체 A {};

구조체 B {
에이;
가상 공백 f();
};

구조체 C: 공개 B, 공개 A {};

G++는 "C"의 "A" 기본 클래스를 XNUMX이 아닌 오프셋에 배치합니다. 그것은 배치되어야합니다
오프셋 제로에서. G++는 "B"의 "A" 데이터 멤버가
이미 오프셋 XNUMX에 있습니다.

· 유형이 "typename" 또는 템플릿 템플릿을 포함하는 템플릿 함수의 이름
매개변수가 잘못 변경될 수 있습니다.

주형
무효 f(유형 이름 Q::X) {}

주형 클래스 Q>
무효 f(유형명 Q ::NS) {}

이러한 템플릿의 인스턴스화는 잘못 수정될 수 있습니다.

또한 psABI 관련 변경 사항을 경고합니다. 이 시점에서 알려진 psABI 변경 사항은 다음과 같습니다.

· SYSV/x86-64의 경우 long double로 union을 전달할 때 전달하도록 변경
psABI에 지정된 메모리. 예를 들어:

유니온 유 {
긴 이중 LD;
int i;
};

"union U"는 항상 메모리에 전달됩니다.

-Wctor-dtor-프라이버시 (C++ 및 Objective-C++만 해당)
클래스의 모든 생성자 또는 소멸자로 인해 클래스를 사용할 수 없는 것처럼 보일 때 경고합니다.
클래스는 비공개이며 친구나 공개 정적 멤버 함수가 없습니다.

-Wdelete-non-virtual-dtor (C++ 및 Objective-C++만 해당)
경고 시기 삭제 가상 함수가 있는 클래스의 인스턴스를 파괴하는 데 사용됩니다.
그리고 비가상 소멸자. 파생 클래스의 인스턴스를 삭제하는 것은 안전하지 않습니다.
기본 클래스에 가상이 없는 경우 기본 클래스에 대한 포인터를 통해
폐물 소각로. 이 경고는 다음에 의해 활성화됩니다. -벽.

- 축소 (C++ 및 Objective-C++만 해당)
C++11에서 금지하는 축소 변환이 다음 내에서 발생하면 경고 { }, 예.

정수 i = { 2.2 }; // 오류: double에서 int로 축소

이 플래그는 -벽-Wc++11-호환.

-std=c++11로, - 좁혀지지 않는 표준에서 요구하는 진단을 억제합니다.
이것은 잘 구성된 코드의 의미에 영향을 미치지 않습니다. 축소 전환
SFINAE 컨텍스트에서 여전히 잘못된 형식으로 간주됩니다.

-아니요 (C++ 및 Objective-C++만 해당)
함수 호출로 인해 noexcept-expression이 false로 평가될 때 경고
throw되지 않는 예외 사양(예: 던지다() or 예외는 없다)
그러나 컴파일러는 예외를 throw하지 않는 것으로 알려져 있습니다.

-W비 가상 dtor (C++ 및 Objective-C++만 해당)
클래스에 가상 함수와 액세스 가능한 비가상 소멸자가 있을 때 경고합니다.
파생 클래스의 인스턴스를 삭제하는 것은 가능하지만 안전하지 않은 경우
기본 클래스에 대한 포인터를 통해 이 경고는 다음과 같은 경우에도 활성화됩니다. -웨프씨++ is
지정되었습니다.

- Wreorder (C++ 및 Objective-C++만 해당)
코드에 지정된 멤버 이니셜라이저의 순서가 순서와 일치하지 않을 때 경고합니다.
그들이 실행되어야합니다. 예를 들어:

구조체 A {
int i;
정수 j;
A(): j(0), i(1) { }
};

컴파일러는 멤버 이니셜라이저를 재정렬합니다. ij 일치하는
구성원의 선언 순서에 따라 해당 내용에 대한 경고를 표시합니다. 이 경고는
활성화 된 -벽.

다음 - 와... 옵션은 영향을 받지 않습니다 -벽.

-웨프씨++ (C++ 및 Objective-C++만 해당)
Scott Meyers의 다음 스타일 지침 위반에 대해 경고합니다. 유효한
C++, 둘째 Edition 책:

· 항목 11: 다음을 사용하여 클래스에 대한 복사 생성자와 할당 연산자를 정의하십시오.
동적으로 할당된 메모리

· 항목 12: 생성자 할당보다 초기화를 선호합니다.

· 항목 14: 기본 클래스에서 소멸자를 가상으로 만드십시오.

· 항목 15: "operator="가 *this에 대한 참조를 반환하도록 합니다.

· 항목 23: 객체를 반환해야 할 때 참조를 반환하려고 하지 마십시오.

또한 Scott Meyers의 다음 스타일 지침 위반에 대해 경고합니다. 더 보기
유효한 C + + 책:

· 항목 6: 증가 및 감소의 접두사와 후위 형식을 구별하십시오.
연산자.

· 항목 7: "&&", "||" 또는 ","를 절대 오버로드하지 마십시오.

이 옵션을 선택할 때 표준 라이브러리 헤더가 모든
이 지침의; 사용하다 GREP -v 이러한 경고를 필터링합니다.

-Wstrict-null-센티넬 (C++ 및 Objective-C++만 해당)
캐스트되지 않은 "NULL"을 센티넬로 사용하는 것에 대해서도 경고합니다. 로만 컴파일할 때
GCC "NULL"이 "__null"로 정의되어 있으므로 이것은 유효한 센티넬입니다. 비록 null이지만
포인터 상수는 널 포인터가 아니며, 동일한 크기가 보장됩니다.
바늘. 그러나 이 사용은 다른 컴파일러 간에 이식할 수 없습니다.

- 템플릿이 아닌 친구 (C++ 및 Objective-C++만 해당)
템플릿 내에서 템플릿화되지 않은 친구 함수가 선언되면 경고를 비활성화합니다.
G++에서 명시적 템플릿 사양 지원의 출현 이후,
친구가 비정규 ID입니다(즉, 친구 푸(정수)), C++ 언어 사양
친구가 템플릿이 아닌 일반 함수를 선언하거나 정의하도록 요구합니다. (부분
14.5.3). G++가 명시적 사양을 구현하기 전에, unqualified-ids는
템플릿화된 기능의 특정 전문화로 해석됩니다. 왜냐하면 이건
비준수 동작은 더 이상 G++의 기본 동작이 아닙니다.
- 템플릿이 아닌 친구 컴파일러가 잠재적인 문제에 대해 기존 코드를 확인할 수 있습니다.
반점이며 기본적으로 켜져 있습니다. 이 새로운 컴파일러 동작은 다음을 사용하여 끌 수 있습니다.
- 템플릿이 아닌 친구, 준수 컴파일러 코드를 유지하지만
유용한 경고.

-Wold 스타일 캐스트 (C++ 및 Objective-C++만 해당)
C++ 프로그램 내에서 void가 아닌 유형으로의 이전 스타일(C 스타일) 캐스트가 사용되는 경우 경고합니다.
새로운 스타일의 캐스트(동적_캐스트, static_cast, 재해석_캐스트const_cast)
의도하지 않은 영향에 덜 취약하고 검색하기가 훨씬 쉽습니다.

-오버로딩된 가상 (C++ 및 Objective-C++만 해당)
함수 선언이 기본 클래스에서 가상 함수를 숨길 때 경고합니다. 을위한
예:

구조체 A {
가상 무효 f();
};

구조체 B: 공개 A {
무효 f(int);
};

"f"의 "A" 클래스 버전은 "B"에 숨겨져 있고 다음과 같은 코드가 있습니다.

ㄴ*ㄴ;
b->f();

컴파일에 실패합니다.

-Wno-pmf-변환 (C++ 및 Objective-C++만 해당)
멤버 함수에 대한 바인딩된 포인터를 일반으로 변환하기 위한 진단 비활성화
바늘.

-Wsign-프로모션 (C++ 및 Objective-C++만 해당)
과부하 해결이 unsigned 또는 enumerated 유형에서 다음으로 승격을 선택할 때 경고합니다.
서명된 유형, 동일한 크기의 부호 없는 유형으로의 변환. 이전의
G ++ 버전은 서명되지 않은 상태를 유지하려고 시도하지만 표준은
현재 행동.

구조체 A {
연산자 정수();
A& 연산자 = (int);
};

메인 ()
{
에이, ㄴ;
a = b;
}

이 예에서 G++는 기본값을 합성합니다. A& 연산자 = (상수 NS&);, 프론트
사용자 정의 연산자 =.

옵션 제어 오브젝티브-C 목표-C++ 방언
(참고: 이 매뉴얼은 Objective-C 및 Objective-C++ 언어를 설명하지 않습니다.
그들 자신.

이 섹션에서는 Objective-C에서만 의미 있는 명령줄 옵션에 대해 설명합니다.
및 Objective-C++ 프로그램을 사용하지만 대부분의 언어 독립적인 GNU를 사용할 수도 있습니다.
컴파일러 옵션. 예를 들어 다음과 같이 "some_class.m" 파일을 컴파일할 수 있습니다.

gcc -g -fgnu-런타임 -O -c some_class.m

이 예에서, -fgnu-런타임 Objective-C 및 Objective-C++ 전용 옵션입니다.
프로그램들; GCC에서 지원하는 모든 언어로 다른 옵션을 사용할 수 있습니다.

Objective-C는 C 언어의 확장이므로 Objective-C 컴파일은
C 프론트엔드에 특정한 옵션을 사용할 수도 있습니다(예: -전통적인). 마찬가지로,
Objective-C++ 컴파일은 C++ 특정 옵션을 사용할 수 있습니다(예: -와비).

다음은 다음과 같은 옵션 목록입니다. Objective-C 및 Objective-C++ 컴파일용
프로그램 :

-f상수-문자열-클래스=클래스 이름
클래스 이름 각 리터럴 문자열에 대해 인스턴스화할 클래스 이름으로
"@"..."" 구문으로 지정됩니다. 기본 클래스 이름은 "NXConstantString"입니다.
GNU 런타임이 사용 중이고 NeXT 런타임이 사용 중인 경우 "NSConstantString"
사용(아래 참조). NS -f상수-cfstrings 옵션이 있는 경우 이 옵션을 재정의합니다.
-f상수-문자열-클래스 설정하고 "@"..."" 리터럴이 상수로 배치되도록 합니다.
CoreFoundation 문자열.

-fgnu-런타임
표준 GNU Objective-C 런타임과 호환되는 개체 코드를 생성합니다. 이것은
대부분의 시스템 유형에 대한 기본값입니다.

-fnext-런타임
NeXT 런타임과 호환되는 출력을 생성합니다. 이것은 NeXT 기반의 기본값입니다.
Darwin 및 Mac OS X를 포함한 시스템. 매크로 "__NEXT_RUNTIME__"은 다음과 같은 경우 미리 정의됩니다.
(그리고 경우에만) 이 옵션이 사용됩니다.

-fno-nil-수신기
여기에서 모든 Objective-C 메시지 디스패치("[receiver message:arg]")를 가정합니다.
번역 단위는 수신기가 "nil"이 아닌지 확인합니다. 이것은 더 많은 것을 허용합니다
사용할 런타임의 효율적인 진입점. 이 옵션은 다음에서만 사용할 수 있습니다.
NeXT 런타임 및 ABI 버전 0 또는 1과 함께 사용합니다.

-fobjc-abi-버전=n
버전 사용 n 선택한 런타임에 대한 Objective-C ABI의 이 옵션은
현재 NeXT 런타임에 대해서만 지원됩니다. 이 경우 버전 0은
속성 및 기타 Objective-C 32을 지원하지 않는 기존(2.0비트) ABI
추가. 버전 1은 속성 및
다른 Objective-C 2.0 추가 사항. 버전 2는 최신(64비트) ABI입니다. 아무것도 없다면
지정된 경우 기본값은 0비트 대상 시스템의 경우 버전 32이고 2비트의 경우 버전 64입니다.
대상 기계.

-fobjc-call-cxx-cdtors
각 Objective-C 클래스에 대해 인스턴스 변수가 C++ 객체인지 확인하십시오.
중요하지 않은 기본 생성자를 사용합니다. 그렇다면 특수 "-(id)
.cxx_construct" 인스턴스 메소드는 모든 시스템에서 중요하지 않은 기본 생성자를 실행합니다.
이러한 인스턴스 변수를 순서대로 나열한 다음 "self"를 반환합니다. 마찬가지로
인스턴스 변수는 중요하지 않은 소멸자가 있는 C++ 객체이며, 그렇다면
그러한 모든 기본 소멸자를 실행할 특별한 "- (void) .cxx_destruct" 메서드,
역순으로.

이렇게 생성된 "-(id) .cxx_construct" 및 "-(void) .cxx_destruct" 메서드는
현재 Objective-C 클래스에 선언된 인스턴스 변수에 대해서만 작동하며,
슈퍼클래스에서 상속받은 것들. Objective-C의 책임입니다.
런타임은 개체의 상속 계층 구조에서 이러한 모든 메서드를 호출합니다. "-(아이디)
.cxx_construct" 메서드는 새 개체 직후 런타임에서 호출됩니다.
인스턴스가 할당됩니다. "- (void) .cxx_destruct" 메서드가 호출됩니다.
런타임이 개체 인스턴스를 할당 해제하기 직전입니다.

이 글을 쓰는 시점에서 Mac OS X 10.4 이상의 NeXT 런타임만 다음을 지원합니다.
"-(id) .cxx_construct" 및 "-(void) .cxx_destruct" 메서드를 호출합니다.

-fobjc-직접 발송
메시지 디스패처로 빠른 점프를 허용합니다. 다윈에서 이것은 다음을 통해 수행됩니다.
커뮤 페이지.

-fobjc-예외
Objective-C에서 구조적 예외 처리에 대한 구문 지원을 활성화합니다.
C++ 및 Java에서 제공하는 것. 이 옵션은 Objective-C를 사용하는 데 필요합니다.
키워드 @try, @throw, @catch, @finally 및 @synchronized. 이 옵션을 사용할 수 있습니다
GNU 런타임과 NeXT 런타임 모두 사용 가능(그러나
Mac OS X 10.2 및 이전 버전의 NeXT 런타임).

-fobjc-gc
Objective-C 및 Objective-C++ 프로그램에서 가비지 수집(GC)을 활성화합니다. 이 옵션
NeXT 런타임에서만 사용할 수 있습니다. GNU 런타임에 다른 쓰레기가 있습니다.
특별한 컴파일러 플래그가 필요하지 않은 컬렉션 구현.

-fobjc-nilcheck
ABI 버전 2가 있는 NeXT 런타임의 경우 메서드에서 nil 수신기를 확인합니다.
실제 메서드 호출을 수행하기 전에 호출합니다. 이것은 기본값이며 다음을 수행할 수 있습니다.
사용 중지 -fno-objc-nilcheck. 클래스 메소드 및 수퍼 호출은 절대 확인되지 않습니다.
이 플래그가 무엇으로 설정되든 이런 식으로 nil에 대해. 현재 이 플래그는
GNU 런타임이나 NeXT 런타임 ABI의 이전 버전을 사용할 때는 아무 것도 없습니다.

-fobjc-std = OBJC1.
GCC 1.0에서 인식하는 언어인 Objective-C 4.0의 언어 구문을 따릅니다.
이것은 C/C++ 언어에 대한 Objective-C 추가에만 영향을 미칩니다. 영향을 미치지 않는다
별도의 C/C++ 방언으로 제어되는 C/C++ 표준 준수
옵션 플래그. 이 옵션이 Objective-C 또는 Objective-C++와 함께 사용되는 경우
컴파일러에서 GCC 4.0에서 인식하지 못하는 모든 Objective-C 구문은 거부됩니다. 이것
Objective-C 코드가 다음과 같이 컴파일될 수 있는지 확인해야 하는 경우에 유용합니다.
이전 버전의 GCC.

-freplace-objc-클래스
지시하는 특수 마커를 방출합니다. ld(1) 결과 객체에서 정적으로 링크하지 않도록
파일 및 허용 (1) 대신 런타임에 로드합니다. 이것은에서 사용됩니다
Fix-and-Continue 디버깅 모드와 함께 사용하면 개체 파일이
질문은 프로그램 과정에서 다시 컴파일되고 동적으로 다시 로드될 수 있습니다.
프로그램 자체를 다시 시작할 필요 없이 실행됩니다. 현재, Fix-and-
계속 기능은 Mac에서 NeXT 런타임과 함께 사용할 때만 사용할 수 있습니다.
OS X 10.3 이상.

-fzero-링크
NeXT 런타임용으로 컴파일할 때 컴파일러는 일반적으로 다음 호출을 대체합니다.
"objc_getClass("...")"(컴파일 시간에 클래스 이름을 알고 있는 경우)
런타임을 개선하는 로드 시간에 초기화되는 정적 클래스 참조
성능. 지정 -fzero-링크 플래그는 이 동작을 억제하고
"objc_getClass("...")"에 대한 호출이 유지됩니다. 이것은 Zero-Link에서 유용합니다.
개별 클래스 구현을 수정할 수 있기 때문에 디버깅 모드
프로그램 실행 중. GNU 런타임은 현재 항상 호출을 유지합니다.
"objc_get_class("...")" 명령줄 옵션에 관계없이.

-gen-decls
소스 파일에 있는 모든 클래스에 대한 인터페이스 선언을 다음과 같은 파일에 덤프합니다.
소스 이름.decl.

-Wassign-인터셉트 (Objective-C 및 Objective-C++만 해당)
가비지 수집기가 Objective-C 할당을 가로챌 때마다 경고합니다.

-Wno 프로토콜 (Objective-C 및 Objective-C++만 해당)
클래스가 프로토콜을 구현하도록 선언된 경우 모든 메서드에 대해 경고가 발행됩니다.
클래스에 의해 구현되지 않은 프로토콜에서. 기본 동작은
클래스에서 명시적으로 구현되지 않은 모든 메서드에 대해 경고를 발행합니다.
메서드 구현은 슈퍼클래스에서 상속됩니다. 사용하는 경우 -Wno 프로토콜
옵션을 선택하면 수퍼 클래스에서 상속된 메소드가 구현된 것으로 간주됩니다.
그리고 그들에 대한 경고가 발행되지 않습니다.

-W선택자 (Objective-C 및 Objective-C++만 해당)
동일한 선택기에 대해 유형이 다른 여러 메소드가 발견되는 경우 경고
편집. 검사는 최종 단계의 메소드 목록에서 수행됩니다.
편집. 또한 에 나타나는 각 선택기에 대해 검사가 수행됩니다.
"@selector(...)" 표현식 및 해당 선택기에 대한 해당 메소드는
컴파일 중 발견. 이러한 검사는 마지막에만 메서드 테이블을 스캔하기 때문에
컴파일의 마지막 단계가 다음과 같을 경우 이러한 경고가 생성되지 않습니다.
예를 들어 컴파일 중에 오류가 발견되었거나
-fsyntax 전용 옵션을 사용 중입니다.

-Wstrict 선택자 일치 (Objective-C 및 Objective-C++만 해당)
인수 및/또는 반환 유형이 다른 여러 메서드가 발견되면 경고합니다.
이 선택기를 사용하여 수신자에게 메시지를 보내려고 할 때 주어진 선택기
"ID" 또는 "클래스"를 입력합니다. 이 플래그가 꺼져 있으면(기본 동작),
발견된 차이점이 다음 유형으로 제한되는 경우 컴파일러는 이러한 경고를 생략합니다.
동일한 크기와 정렬을 공유합니다.

-Wunddeclared-선택자 (Objective-C 및 Objective-C++만 해당)
선언되지 않은 선택기를 참조하는 "@selector(...)" 표현식이 발견되면 경고합니다. NS
해당 이름을 가진 메소드가 이전에 선언되지 않은 경우 선택자는 선언되지 않은 것으로 간주됩니다.
@interface 또는 @protocol에서 명시적으로 "@selector(...)" 표현식
선언 또는 암시적으로 @implementation 섹션에서. 이 옵션은 항상
"@selector(...)" 표현식이 발견되는 즉시 검사하지만, -W선택자
컴파일의 마지막 단계에서 검사를 수행합니다. 이것은 또한 코딩을 시행합니다
메소드와 선택자를 사용하기 전에 선언해야 하는 스타일 규칙.

-print-objc-런타임-정보
값으로 전달되는 가장 큰 구조를 설명하는 C 헤더를 생성합니다(있는 경우).

옵션 Control 진단 메시지 서식
전통적으로 진단 메시지는 출력 장치의
측면(예: 너비, ...). 아래에 설명된 옵션을 사용하여 제어할 수 있습니다.
진단 메시지 형식화 알고리즘, 예: 줄당 문자 수, 빈도
소스 위치 정보를 보고해야 합니다. 지금은 C++ 프론트엔드만 할 수 있습니다.
이 옵션을 존중하십시오. 그러나 가까운 장래에 나머지 전선이
끝은 올바르게 소화할 수 있습니다.

-f메시지 길이=n
다음 줄에 맞도록 오류 메시지의 형식을 지정하십시오. n 문자. 그만큼
기본값은 72자입니다. g ++ 에 의해 지원되는 나머지 프런트 엔드에 대해 0
GCC. 만약에 n XNUMX이면 줄 바꿈이 수행되지 않습니다. 각 오류 메시지가 나타납니다
한 줄에.

-fdiagnostics-show-location=한번
줄 바꿈 모드에서만 의미가 있습니다. 진단 메시지 보고자에게 다음을 지시합니다.
방출하다 일단 소스 위치 정보; 즉, 메시지가 너무 길어서 맞지 않는 경우
단일 물리적 라인에 있고 래핑되어야 하는 경우 소스 위치가 내보내지지 않습니다.
(접두사로) 다시, 계속해서, 이어지는 연속 라인에서. 이것이
기본 동작.

-fdiagnostics-show-location=모든 줄
줄 바꿈 모드에서만 의미가 있습니다. 진단 메시지 보고자에게 다음을 지시합니다.
결과적으로 물리적 라인에 대해 동일한 소스 위치 정보(접두사로)를 내보냅니다.
한 줄에 담기에는 너무 긴 메시지를 깨는 과정에서.

-fno-진단-쇼-옵션
기본적으로 내보낸 각 진단에는 명령줄 옵션을 나타내는 텍스트가 포함됩니다.
진단을 직접 제어하는 ​​(이러한 옵션이 진단에 알려진 경우)
기계). 지정 -fno-진단-쇼-옵션 깃발은 그것을 억제한다
행동.

옵션 의뢰 or 억제하다 경고
경고는 본질적으로 그렇지 않은 구성을 보고하는 진단 메시지입니다.
오류가 있지만 위험하거나 오류가 있을 수 있음을 암시합니다.

다음 언어 독립적 옵션은 특정 경고를 활성화하지 않고 제어합니다.
GCC에서 생산하는 진단의 종류.

-fsyntax 전용
코드에서 구문 오류를 확인하되 그 이상은 수행하지 마십시오.

-fmax-오류=n
최대 오류 메시지 수를 다음으로 제한합니다. n, 그 시점에서 GCC는 오히려 구제 금융
소스 코드를 계속 처리하려고 시도하는 것보다 만약에 n 0(기본값)입니다.
생성되는 오류 메시지 수에는 제한이 없습니다. 만약에 -Wfatal-오류 또한
지정된 다음 -Wfatal-오류 이 옵션보다 우선합니다.

-w 모든 경고 메시지를 금지합니다.

-워러
모든 경고를 오류로 만듭니다.

-오류=
지정된 경고를 오류로 만듭니다. 경고에 대한 지정자가 추가됩니다.
예를 들면 -Werror=스위치 에 의해 제어되는 경고를 켭니다. -W스위치 오류로.
이 스위치는 부정하는 데 사용되는 부정 형태를 취합니다. -워러 특정 경고의 경우
예를 들면 -Wno-오류=스위치 브랜드 -W스위치 경고는 오류가 아닙니다. -워러
유효합니다.

제어 가능한 각 경고에 대한 경고 메시지에는 다음을 제어하는 ​​옵션이 포함됩니다.
경고. 그런 다음 해당 옵션을 다음과 함께 사용할 수 있습니다. -오류=- 오류 없음= 설명한대로
위에. (경고 메시지의 옵션 인쇄는 다음을 사용하여 비활성화할 수 있습니다.
-fno-진단-쇼-옵션 깃발.)

지정 -오류= 자동으로 암시 -W. 그러나, - 오류 없음=
아무것도 의미하지 않습니다.

-Wfatal-오류
이 옵션은 컴파일러가 첫 번째 오류가 발생할 때 컴파일을 중단하도록 합니다.
계속해서 추가 오류 메시지를 인쇄하는 대신.

옵션이 시작되는 많은 특정 경고를 요청할 수 있습니다. -W예를 들어, - 암묵적
암시적 선언에 대한 경고를 요청합니다. 이러한 특정 경고 옵션은 각각
음의 형태로 시작 -아니- 경고를 끄려면; 예를 들어, -Wno-암시적.
이 설명서는 두 가지 형식 중 기본값이 아닌 형식 중 하나만 나열합니다. 더 나아가,
언어별 옵션은 다음을 참조합니다. C + + 방언 옵션 오브젝티브-C
목표-C++ 방언 옵션 .

인식할 수 없는 경고 옵션이 요청되는 경우(예: -알 수 없는 경고), GCC가 방출합니다
옵션이 인식되지 않는다는 진단입니다. 그러나 만약 -아니- 형태는
사용하면 동작이 약간 다릅니다. 에 대한 진단이 생성되지 않습니다.
-알 수 없는 경고 다른 진단이 생성되지 않는 한. 이것은 사용을 허용합니다
-아니- 이전 컴파일러의 옵션이지만 문제가 발생하면 컴파일러에서 경고합니다.
인식할 수 없는 옵션이 사용되었습니다.

-페단 틱
엄격한 ISO C 및 ISO C++에서 요구하는 모든 경고를 발행합니다. 모든 프로그램을 거부
금지된 확장 및 ISO C 및 ISO를 따르지 않는 기타 프로그램 사용
C++. ISO C의 경우, 모든 규정에서 지정한 ISO C 표준 버전을 따릅니다. -표준
사용된 옵션입니다.

유효한 ISO C 및 ISO C++ 프로그램은 이 옵션을 사용하거나 사용하지 않고 제대로 컴파일해야 합니다.
(드물게 몇 가지가 필요하지만 -안시 또는 -표준 필요한 버전을 지정하는 옵션
ISO C). 그러나 이 옵션이 없으면 특정 GNU 확장 및 기존 C 및
C++ 기능도 지원됩니다. 이 옵션을 사용하면 거부됩니다.

-페단 틱 대체 키워드 사용에 대한 경고 메시지를 표시하지 않습니다.
로 시작하고 끝나는 이름 __. 식에서 Pedantic 경고도 비활성화됩니다.
"__extension__" 다음에 나옵니다. 그러나 시스템 헤더 파일만 이 파일을 사용해야 합니다.
탈출 경로; 응용 프로그램은 이를 피해야 합니다.

일부 사용자는 사용하려고 -페단 틱 엄격한 ISO C 준수를 위해 프로그램을 확인합니다. 그들
곧 그들이 원하는 대로 하지 않는다는 것을 알게 됩니다. 일부 비 ISO 관행을 찾습니다.
그러나 모두는 아닙니다. ISO C 필요 진단 및 기타
어떤 진단이 추가되었습니다.

ISO C 준수 실패를 보고하는 기능은 경우에 따라 유용할 수 있습니다.
그러나 상당한 추가 작업이 필요하며
-페단 틱. 가까운 시일 내에 이러한 기능을 지원할 계획이 없습니다.

로 지정된 표준 -표준 다음과 같은 C의 GNU 확장 방언을 나타냅니다.
gnu90 or gnu99, 해당하는 기지 표준, ISO C 버전
GNU 확장 방언을 기반으로 합니다. 경고 -페단 틱 그들이 있는 곳에 주어진다
기본 표준에 의해 요구됩니다. (그런 경고를 하는 것은 말이 안 된다.
정의에 의해 GNU이기 때문에 지정된 GNU C 방언에 없는 기능에 대해서만
C의 방언에는 컴파일러가 주어진 옵션으로 지원하는 모든 기능이 포함됩니다.
경고할 사항이 없습니다.)

- 현학적 오류
처럼 -페단 틱, 경고가 아닌 오류가 생성된다는 점을 제외하고.

-벽
이것은 일부 사용자가 고려하는 구성에 대한 모든 경고를 활성화합니다.
의심스러운 경우에도 피하기(또는 경고를 방지하기 위해 수정)하기 쉽습니다.
매크로와 결합. 이것은 또한 설명된 일부 언어별 경고를 활성화합니다.
in C + + 방언 옵션 오브젝티브-C 목표-C++ 방언 옵션 .

-벽 다음 경고 플래그를 켭니다.

-워드레스 -워레이 경계 (만 -O2) -Wc++11-호환 -Wchar-첨자
-Wenum-비교 (C/Objc에서; C++에서는 기본적으로 켜져 있음) - 암묵적 정수 (C와
오브젝티브-C 전용) -암시적 함수 선언 (C 및 Objective-C만 해당) -댓글
-W포맷 -W메인 (C/ObjC에만 해당하며 -프리스탠딩) -W아마도 초기화되지 않음
-Wmissing-중괄호 -Wnonnull -괄호 -Wpointer 기호 - Wreorder -Wreturn형
-W시퀀스 포인트 -Wsign-비교 (C++에서만) -Wstrict-앨리어싱 -Wstrict-overflow=1
-W스위치 -저서 -초기화되지 않음 -Wunknown-pragma - 사용하지 않는 기능
-사용하지 않은 라벨 - 미사용 가치 - 사용하지 않은 변수 -W휘발성 레지스터 변수

일부 경고 플래그는 -벽. 그들 중 일부는 경고합니다.
사용자가 일반적으로 의심스럽다고 생각하지 않는 구성
때때로 확인하고 싶을 수도 있습니다. 다른 사람들은 건설에 대해 경고합니다.
경우에 따라 필요하거나 피하기 어렵고 수정하는 간단한 방법이 없습니다.
경고를 표시하지 않는 코드입니다. 그들 중 일부는 -웩스트라 그러나 그들 중 많은
개별적으로 활성화해야 합니다.

-웩스트라
이렇게 하면 활성화되지 않은 몇 가지 추가 경고 플래그가 활성화됩니다. -벽. (이 옵션은
부름 -W. 이전 이름은 계속 지원되지만 새 이름은 더 많습니다.
설명적인.)

-클로버드 - 멍한 몸 -무시 예선 -Wmissing-field-initializers
-Wmissing-매개변수 유형 (C만) -Wold 스타일 선언 (C만) -Woverride 초기화
-Wsign-비교 -W 유형 제한 -초기화되지 않음 -Wunused-매개변수 (만 - 사용하지 않은 or
-벽) -사용하지 않았지만 설정 매개변수 (만 - 사용하지 않은 or -벽)

옵션 -웩스트라 다음과 같은 경우에도 경고 메시지를 인쇄합니다.

· 포인터는 정수 XNUMX과 비교됩니다. <, <=, >>=.

· (C++만 해당) 열거자와 비 열거자는 모두 조건부로 나타납니다.
표현.

· (C++ 전용) 모호한 가상 기반.

· (C++ 전용) 선언된 배열을 첨자화 회원가입.

· (C++만 해당) 선언된 변수의 주소 가져오기 회원가입.

· (C++만 해당) 기본 클래스는 파생 클래스의 복사 생성자에서 초기화되지 않습니다.

-Wchar-첨자
배열 첨자가 "char" 유형이면 경고합니다. 이것은 오류의 일반적인 원인입니다.
프로그래머는 종종 이 유형이 일부 시스템에서 서명된다는 사실을 잊습니다. 이 경고는
활성화 된 -벽.

-댓글
주석 시작 시퀀스 때마다 경고 /* 에 나타납니다 /* 댓글 또는 언제든지
백슬래시-개행 문자가 // 논평. 이 경고는 다음에 의해 활성화됩니다. -벽.

- Wno-coverage-mismatch
사용 시 피드백 프로필이 일치하지 않으면 경고 -fprofile-사용 옵션. 만약
소스 파일이 다음 사이에 변경되었습니다. -fprofile-gen-fprofile-사용,
프로필 피드백은 소스 파일과 일치하지 않을 수 있으며 GCC는 프로필을 사용할 수 없습니다.
피드백 정보. 기본적으로 이 경고는 활성화되어 있으며 오류로 처리됩니다.
- Wno-coverage-mismatch 경고를 비활성화하거나
-Wno-error=범위 불일치 오류를 비활성화하는 데 사용할 수 있습니다. 오류 비활성화
이 경고의 경우 코드가 제대로 최적화되지 않을 수 있으며 다음과 같은 경우에만 유용합니다.
기존 코드 기반에 대한 버그 수정과 같은 아주 사소한 변경. 완전히 비활성화
경고는 권장되지 않습니다.

-Wno-cpp
(C, Objective-C, C++, Objective-C++ 및 Fortran만 해당)

"#warning" 지시문에서 발생하는 경고 메시지를 억제합니다.

-W더블 프로모션 (C, C++, Objective-C 및 Objective-C++만 해당)
"float" 유형의 값이 암시적으로 "double"로 승격되면 경고를 표시합니다. CPU
32비트 "단정밀도" 부동 소수점 단위로 하드웨어에서 "부동" 구현,
그러나 소프트웨어에서 "이중"을 에뮬레이트하십시오. 그러한 기계에서 다음을 사용하여 계산을 수행합니다.
"이중" 값은 소프트웨어에 필요한 오버헤드 때문에 훨씬 더 비쌉니다.
에뮬레이션.

부동 소수점 때문에 실수로 "double"을 사용하여 계산을 수행하기 쉽습니다.
리터럴은 암시적으로 "double" 유형입니다. 예를 들어:

플로트 면적(플로트 반경)
{
반환 3.14159 * 반지름 * 반지름;
}

부동 소수점 때문에 컴파일러는 "double"로 전체 계산을 수행합니다.
포인트 리터럴은 "더블"입니다.

-W포맷
"printf" 및 "scanf" 등에 대한 호출을 확인하여 제공된 인수가
지정된 형식 문자열에 적합한 유형이 있고 변환이
형식 문자열에 지정된 것은 의미가 있습니다. 여기에는 표준 기능이 포함되며,
"printf", "scanf", "strftime" 및
"strfmon"(C 표준이 아닌 X/Open 확장) 제품군(또는 기타 대상-
특정 가족). 형식 속성 없이 검사되는 기능
지정된 표준 버전 및 이러한 기능 검사에 따라 다릅니다.
속성을 지정하지 않으면 다음으로 비활성화됩니다. -프리스탠딩 or -fno 내장.

형식은 GNU libc 버전 2.2에서 지원하는 형식 기능과 비교하여 확인됩니다.
여기에는 모든 ISO C90 및 C99 기능과 Single Unix의 기능이 포함됩니다.
사양 및 일부 BSD 및 GNU 확장. 다른 라이브러리 구현은
이 모든 기능을 지원합니다. GCC는 그 이상의 기능에 대한 경고를 지원하지 않습니다.
특정 라이브러리의 한계. 그러나 만약 -페단 틱 와 함께 사용됩니다 -W포맷,
선택한 표준 버전에 없는 형식 기능에 대한 경고가 표시됩니다(그러나
"strfmon" 형식에는 해당되지 않습니다. C 표준의 어떤 버전에도 없기 때문입니다.

이후 -W포맷 또한 여러 함수에 대한 null 형식 인수를 확인합니다. -W포맷
또한 의미 -Wnonnull.

-W포맷 에 포함 -벽. 형식 검사의 일부 측면을 더 자세히 제어하려면
옵션들 -Wformat-y2k, -Wno-format-extra-args, -Wno 형식 XNUMX 길이,
-Wformat-비리터럴, -Wformat 보안-W형식=2 사용 가능하지만 그렇지 않습니다
포함 된 -벽.

참고: Ubuntu 8.10 이상 버전에서는 이 옵션이 기본적으로 C, C++,
ObjC, ObjC++. 비활성화하려면 다음을 사용하십시오. -W형식=0.

-Wformat-y2k
If -W포맷 가 지정되고 "strftime" 형식에 대해서만 경고합니다.
두 자리 연도.

-Wno-포맷-포함-nul
If -W포맷 지정된 경우 NUL 바이트를 포함하는 형식 문자열에 대해 경고하지 마십시오.

-Wno-format-extra-args
If -W포맷 "printf" 또는 "scanf"에 대한 초과 인수에 대해 경고하지 않음
포맷 기능. C 표준은 그러한 인수가 무시되도록 지정합니다.

사용되지 않은 인수가 다음으로 지정된 사용된 인수 사이에 있는 경우 $
피연산자 번호 사양, 일반적으로 경고는 여전히 제공됩니다.
구현에서 사용하지 않는 항목을 건너뛰기 위해 "va_arg"에 전달할 유형을 알 수 없습니다.
인수. 그러나 "scanf" 형식의 경우 이 옵션은
단일 유닉스 사양 이후 사용되지 않은 인수가 모두 포인터인 경우 경고
이러한 사용되지 않는 인수가 허용된다고 말합니다.

-Wno 형식 XNUMX 길이
If -W포맷 지정된 경우 길이가 XNUMX인 형식에 대해 경고하지 않습니다. C 표준
길이가 XNUMX인 형식이 허용되도록 지정합니다.

-Wformat-비리터럴
If -W포맷 형식 문자열이 문자열 리터럴이 아닌 경우 경고하고
따라서 형식 함수가 형식 인수를
"va_list".

-Wformat 보안
If -W포맷 가 지정되고 다음을 나타내는 형식 함수의 사용에 대해서도 경고합니다.
가능한 보안 문제. 현재 이것은 "printf" 호출에 대해 경고하고
형식 문자열이 문자열 리터럴이 아니고 형식 문자열이 없는 "scanf" 함수
"printf (foo);"에서와 같이 형식 인수. 형식의 경우 보안 허점이 될 수 있습니다.
문자열은 신뢰할 수 없는 입력에서 왔으며 다음을 포함합니다. %n. (이것은 현재 무엇의 하위 집합입니다.
-Wformat-비리터럴 에 대해 경고하지만 향후 경고가 다음에 추가될 수 있습니다.
-Wformat 보안 에 포함되지 않은 -Wformat-비리터럴.)

참고: Ubuntu 8.10 이상 버전에서는 이 옵션이 기본적으로 C, C++,
ObjC, ObjC++. 비활성화하려면 다음을 사용하십시오. - Wno 형식 보안, 또는 모든 형식 경고 비활성화
-W형식=0. 형식 보안 경고를 치명적으로 만들려면 다음을 지정하십시오.
-Werror=형식 보안.

-W형식=2
사용 -W포맷 플러스 형식 검사가 포함되지 않음 -W포맷. 현재 동등
-W포맷 -Wformat-비리터럴 -Wformat 보안 -Wformat-y2k.

-Wnonnull
null이 아닌 값이 필요한 것으로 표시된 인수에 대해 null 포인터를 전달하는 것에 대해 경고합니다.
"nonnull" 함수 속성에 의해.

-Wnonnull 에 포함 -벽-W포맷. 로 비활성화할 수 있습니다. -Wno-null
옵션을 선택합니다.

-윈트셀프 (C, C++, Objective-C 및 Objective-C++만 해당)
스스로 초기화되는 초기화되지 않은 변수에 대해 경고합니다. 참고하세요
옵션은 다음과 함께만 사용할 수 있습니다. -초기화되지 않음 옵션을 선택합니다.

예를 들어, GCC는 다음 스니펫에서만 "i"가 초기화되지 않은 것에 대해 경고합니다.
언제 -윈트셀프 지정되었습니다:

정수 f()
{
정수 나는 = 나는;
반환 i;
}

- 암묵적 정수 (C 및 Objective-C만 해당)
선언에서 유형을 지정하지 않으면 경고합니다. 이 경고는 다음에 의해 활성화됩니다. -벽.

-암시적 함수 선언 (C 및 Objective-C만 해당)
함수를 선언하기 전에 사용할 때마다 경고를 제공합니다. C99 모드에서
(-표준=c99 or -std=gnu99), 이 경고는 기본적으로 활성화되어 있으며
오류 - 현학적 오류. 이 경고는 다음에 의해서도 활성화됩니다. -벽.

- 암묵적 (C 및 Objective-C만 해당)
과 동일 - 암묵적 정수-암시적 함수 선언. 이 경고가 활성화되었습니다.
by -벽.

-무시 예선 (C 및 C++만 해당)
함수의 반환 유형에 "const"와 같은 유형 한정자가 있으면 경고합니다. ISO C의 경우
이러한 유형 한정자는 영향을 미치지 않습니다. 함수에서 반환된 값이
값 C++의 경우 경고는 스칼라 유형 또는 "void"에 대해서만 발생합니다. ISO C
함수 정의에서 정규화된 "void" 반환 유형을 금지하므로 그러한 반환 유형
이 옵션이 없어도 항상 경고를 받습니다.

이 경고는 다음에 의해서도 활성화됩니다. -웩스트라.

-W메인
다음과 같은 경우 경고 본관 의심스럽다. 본관 외부 함수가 있어야 합니다.
연결, int 반환, XNUMX개의 인수, XNUMX개 또는 XNUMX개의 인수 사용
적절한 유형. 이 경고는 C++에서 기본적으로 활성화되어 있으며 다음 중 하나에 의해 활성화됩니다.
-벽 or -페단 틱.

-Wmissing-중괄호
집계 또는 공용체 이니셜라이저가 완전히 대괄호로 묶이지 않은 경우 경고합니다. 다음에서
예를 들어 이니셜라이저는 a 완전히 대괄호로 묶이지 않았지만 b 완전히
괄호.

정수 a[2][2] = { 0, 1, 2, 3 };
정수 b[2][2] = { { 0, 1 }, { 2, 3 } };

이 경고는 다음에 의해 활성화됩니다. -벽.

- 포함 디렉토리 누락 (C, C++, Objective-C 및 Objective-C++만 해당)
사용자 제공 포함 디렉토리가 없으면 경고합니다.

-괄호
괄호가 있는 경우와 같이 특정 컨텍스트에서 괄호가 생략되면 경고합니다.
진리값이 예상되는 컨텍스트 또는 연산자가 중첩된 경우 할당
사람들이 종종 혼동하는 우선 순위.

또한 다음과 같은 비교가 있는 경우 경고합니다. x<=y<=z 나타납니다; 이것은 동등하다 (x<=y ? 1 : 0)
<= z, 이는 일반적인 수학 표기법과 다른 해석입니다.

또한 "if" 문과 혼동될 수 있는 구성에 대해 경고합니다.
"else" 분기가 속합니다. 다음은 그러한 경우의 예입니다.

{
만약)
만약 (ㄴ)
푸();
그렇지 않으면
술집 ();
}

C/C++에서 모든 "else" 분기는 가장 안쪽에 있는 "if" 문에 속합니다.
이 예에서는 "if (b)"입니다. 이것은 종종 프로그래머가 기대한 것이 아닙니다.
위의 예에서 프로그래머가 선택한 들여쓰기로 설명했습니다. 있을 때
이러한 혼동의 가능성이 있으므로 GCC는 이 플래그가
지정. 경고를 제거하려면 가장 안쪽 "if" 주위에 명시적 중괄호를 추가하십시오.
따라서 "else"가 둘러싸는 "if"에 속할 수 없습니다. NS
결과 코드는 다음과 같습니다.

{
만약)
{
만약 (ㄴ)
푸();
그렇지 않으면
술집 ();
}
}

또한 중간 피연산자 GNU 확장자가 생략된 ?:의 위험한 사용에 대해 경고합니다. 언제
?: 연산자의 조건은 부울 표현식입니다. 생략된 값은
항상 1. 종종 사용자는 조건부 내부에서 계산된 값을 기대합니다.
대신 표현.

이 경고는 다음에 의해 활성화됩니다. -벽.

-W시퀀스 포인트
시퀀스 위반으로 인해 의미가 정의되지 않은 코드에 대해 경고합니다.
C 및 C++ 표준의 포인트 규칙.

C 및 C++ 표준은 C/C++ 프로그램에서 표현식의 순서를 정의합니다.
의 관점에서 평가 순서 전철기, 사이의 부분적 순서를 나타냅니다.
프로그램 부분의 실행: 시퀀스 포인트 이전에 실행된 부분,
이후에 실행됨. 이것은 완전한 표현의 평가 후에 발생합니다(하나는
더 큰 표현식의 일부가 아님)의 첫 번째 피연산자를 평가한 후
"&&", "||", "? :" 또는 ","(쉼표) 연산자, 함수가 호출되기 전(그러나 후에
인수의 평가 및 호출된 함수를 나타내는 표현식),
특정 다른 장소. 시퀀스 포인트 규칙으로 표현된 것 이외의 순서는
표현식의 하위 표현식 평가가 지정되지 않았습니다. 이 모든 규칙
예를 들어,
함수는 사이에 시퀀스 포인트 없이 하나의 표현식 내에서 호출됩니다.
함수가 호출되는 순서는 지정되지 않습니다. 다만, 기준
위원회는 함수 호출이 겹치지 않는다고 결정했습니다.

시퀀스 포인트 사이에서 값이 수정될 때 지정되지 않습니다.
개체가 적용됩니다. 이것에 의존하는 동작을 갖는 프로그램은 정의되지 않은 동작을 가집니다.
C 및 C++ 표준은 "이전 시퀀스 포인트와 다음 시퀀스 포인트 사이
객체는 다음 평가에 의해 최대 한 번 수정된 저장된 값을 갖습니다.
표현. 또한 이전 값은 다음 값을 결정하기 위해서만 읽어야 합니다.
저장됩니다." 프로그램이 이러한 규칙을 위반하면 특정
구현은 완전히 예측할 수 없습니다.

정의되지 않은 동작이 있는 코드의 예는 "a = a++;", "a[n] = b[n++]" 및 "a[i++] =
i;". 좀 더 복잡한 경우는 이 옵션으로 진단되지 않으며 다음을 제공할 수 있습니다.
가끔 위양성 결과가 나오지만 일반적으로 상당히 효과적인 것으로 밝혀졌습니다.
프로그램에서 이러한 종류의 문제를 감지합니다.

이 표준은 혼란스럽게 표현되어 있으므로 정확한
미묘한 경우 시퀀스 포인트 규칙의 의미. 토론에 대한 링크
제안된 형식적 정의를 포함한 문제는 GCC 읽기 페이지에서 찾을 수 있습니다.
...에서http://gcc.gnu.org/readings.html>.

이 경고는 다음에 의해 활성화됩니다. -벽 C 및 C++용.

-Wreturn형
함수가 기본적으로 "int"인 반환 유형으로 정의될 때마다 경고합니다. 또한
반환 유형이 있는 함수에서 반환 값이 없는 "반환" 문에 대해 경고합니다.
"무효"가 아닙니다(함수 본문의 끝에서 떨어지는 것은 반환되는 것으로 간주됩니다.
값 없음) 및 함수의 표현식이 있는 "반환" 문에 대해
반환 유형이 "void"인 경우.

C++의 경우 반환 유형이 없는 함수는 항상 진단 메시지를 생성합니다.
언제 - 노리턴형 지정됩니다. 유일한 예외는 본관 및 기능
시스템 헤더에 정의되어 있습니다.

이 경고는 다음에 의해 활성화됩니다. -벽.

-W스위치
"switch" 문에 열거형 인덱스가 있고 "case"가 부족할 때마다 경고합니다.
해당 열거의 명명된 코드 중 하나 이상에 대해 ("기본값"의 존재
레이블은 이 경고를 방지합니다.) 열거형 범위를 벗어난 "케이스" 레이블도
이 옵션을 사용하면 경고를 유발합니다("기본" 레이블이 있더라도). 이것
경고가 활성화됨 -벽.

-Wswitch-기본값
"switch" 문에 "default" 대소문자가 없을 때마다 경고합니다.

-Wswitch 열거 형
"switch" 문에 열거형 인덱스가 있고 "case"가 부족할 때마다 경고합니다.
해당 열거의 명명된 코드 중 하나 이상에 대해 "케이스" 라벨 외부
열거형 범위는 이 옵션을 사용할 때도 경고를 표시합니다. 유일한 차이점
사이에 -W스위치 이 옵션은 이 옵션이 생략된 것에 대한 경고를 제공한다는 것입니다.
"기본" 레이블이 있더라도 열거 코드.

-Wsync-낸드 (C 및 C++만 해당)
"__sync_fetch_and_nand" 및 "__sync_nand_and_fetch" 내장 함수가 다음과 같을 때 경고합니다.
사용 된. 이러한 함수는 GCC 4.4에서 의미 체계를 변경했습니다.

-저서
프로그램의 의미를 변경할 수 있는 trigraph가 발견되면 경고합니다.
(코멘트 내의 trigraphs는 경고되지 않습니다). 이 경고는 다음에 의해 활성화됩니다. -벽.

-사용하지 않았지만 설정 매개변수
함수 매개변수가 할당되었지만 그렇지 않으면 사용되지 않을 때마다 경고합니다.
선언).

이 경고를 표시하지 않으려면 미사용의 속성을 사용하지 않는 것입니다.

이 경고는 다음에 의해서도 활성화됩니다. - 사용하지 않은 와 함께 -웩스트라.

-사용하지 않았지만 설정 변수
지역 변수가 할당되었지만 그렇지 않으면 사용되지 않을 때마다 경고합니다.
선언). 이 경고는 다음에 의해 활성화됩니다. -벽.

이 경고를 표시하지 않으려면 미사용의 속성을 사용하지 않는 것입니다.

이 경고는 다음에 의해서도 활성화됩니다. - 사용하지 않은에 의해 활성화됩니다. -벽.

- 사용하지 않는 기능
정적 함수가 선언되었지만 정의되지 않았거나 인라인이 아닌 정적 함수가 선언될 때마다 경고합니다.
기능을 사용하지 않습니다. 이 경고는 다음에 의해 활성화됩니다. -벽.

-사용하지 않은 라벨
레이블이 선언되었지만 사용되지 않을 때마다 경고합니다. 이 경고는 다음에 의해 활성화됩니다. -벽.

이 경고를 표시하지 않으려면 미사용의 속성을 사용하지 않는 것입니다.

-Wunused-local-typedefs (C, Objective-C, C++ 및 Objective-C++만 해당)
함수에 로컬로 정의된 typedef가 사용되지 않을 때 경고합니다.

-Wunused-매개변수
함수 매개변수가 선언 외에 사용되지 않을 때마다 경고합니다.

이 경고를 표시하지 않으려면 미사용의 속성을 사용하지 않는 것입니다.

- 사용하지 않은 결과 없음
"warn_unused_result" 속성으로 표시된 함수의 호출자가 다음을 수행하는 경우 경고하지 마십시오.
반환 값을 사용하지 마십시오. 기본값은 -Wunused-결과.

- 사용하지 않은 변수
지역 변수 또는 상수가 아닌 정적 변수가 다음을 제외하고 사용되지 않을 때마다 경고합니다.
그 선언. 이 경고는 다음에 의해 활성화됩니다. -벽.

이 경고를 표시하지 않으려면 미사용의 속성을 사용하지 않는 것입니다.

- 미사용 가치
문이 명시적으로 사용되지 않은 결과를 계산할 때마다 경고합니다. 억제하다
이 경고는 사용되지 않은 표현식을 무효화. 여기에는 표현 문이 포함됩니다.
또는 부작용이 없는 쉼표 표현식의 왼쪽. 을위한
예를 들어, 다음과 같은 표현 x[i,j] 경고가 발생하지만 x[(무효)i,j] 의지
아니.

이 경고는 다음에 의해 활성화됩니다. -벽.

- 사용하지 않은
모든것 위에 - 사용하지 않은 옵션이 결합되었습니다.

사용하지 않는 함수 매개변수에 대한 경고를 받으려면 다음 중 하나를 지정해야 합니다.
-웩스트라 - 사용하지 않은 (참고 -벽 의미하다 - 사용하지 않은) 또는 별도로 지정
-Wunused-매개변수.

-초기화되지 않음
자동 변수가 먼저 초기화되지 않고 사용되거나 변수가
"setjmp" 호출에 의해 방해될 수 있습니다. C++에서 비정적 참조 또는 비정적 참조인 경우 경고
정적 인 const를 멤버는 생성자가 없는 클래스에 나타납니다.

초기화되지 않은 변수 값을 사용하는 코드에 대해 경고하려면
자체 이니셜라이저를 사용하여 -윈트셀프 옵션을 선택합니다.

이러한 경고는 구조의 초기화되지 않았거나 막힌 개별 요소에 대해 발생합니다.
초기화되지 않았거나 클로버된 변수뿐만 아니라 통합 또는 배열 변수
전체적으로. "휘발성"으로 선언된 변수나 요소에는 발생하지 않습니다. 때문에
이러한 경고는 최적화, 정확한 변수 또는 요소에 따라 다릅니다.
경고는 정확한 최적화 옵션과 사용된 GCC 버전에 따라 달라집니다.

계산에만 사용되는 변수에 대한 경고가 없을 수 있습니다.
데이터 흐름에 의해 이러한 계산이 삭제될 수 있으므로 자체적으로 사용되지 않는 값
경고가 인쇄되기 전에 분석합니다.

-W아마도 초기화되지 않음
자동 변수의 경우 함수 항목에서 다음을 사용하는 경로가 있는 경우
초기화된 변수이지만 변수가 아닌 다른 경로가 있습니다.
초기화된 경우 컴파일러는 초기화되지 않은 것을 증명할 수 없는 경우 경고를 내보냅니다.
경로는 런타임에 발생하지 않습니다. 이러한 경고는 GCC가 아니므로 선택 사항입니다.
코드가 올바른 것처럼 보이지만 모든 이유를 볼 수 있을 만큼 똑똑
오류가 있습니다. 이것이 어떻게 일어날 수 있는지에 대한 한 가지 예는 다음과 같습니다.

{
int x;
스위치(y)
{
경우 1: x = 1;
하다;
경우 2: x = 4;
하다;
경우 3: x = 5;
}
푸(x);
}

"y"의 값이 항상 1, 2 또는 3이면 "x"는 항상 초기화되지만 GCC는
이것을 모릅니다. 경고를 표시하지 않으려면 사용자가 기본 케이스를 제공해야 합니다.
단언하다(0) 또는 유사한 코드.

이 옵션은 또한 비휘발성 자동 변수가
"longjmp"를 호출합니다. 이러한 경고는 최적화에서만 가능합니다.
편집.

컴파일러는 "setjmp"에 대한 호출만 봅니다. "longjmp"가 어디에 있는지 알 수 없습니다.
라고 불리는; 실제로 신호 처리기는 코드의 어느 지점에서나 호출할 수 있습니다. 로
결과적으로 "longjmp" 때문에 실제로 문제가 없는 경우에도 경고를 받을 수 있습니다.
실제로 문제를 일으킬 장소에서 호출할 수 없습니다.

사용하는 모든 함수를 선언하면 일부 가짜 경고를 피할 수 있습니다.
"noreturn"으로 반환하지 마십시오.

이 경고는 다음에 의해 활성화됩니다. -벽 or -웩스트라.

-Wunknown-pragma
GCC에서 이해할 수 없는 "#pragma" 지시문을 만나면 경고합니다. 이 경우
명령줄 옵션을 사용하면
시스템 헤더 파일. 경고가
-벽 명령줄 옵션.

-Wno-pragma
잘못된 매개변수, 잘못된 구문 또는
프라그마 간의 충돌. 또한보십시오 -Wunknown-pragma.

-Wstrict-앨리어싱
이 옵션은 다음 경우에만 활성화됩니다. -fstrict-앨리어싱 활성. 코드에 대해 경고합니다.
컴파일러가 최적화를 위해 사용하는 엄격한 앨리어싱 규칙을 위반할 수 있습니다.
경고가 모든 경우를 포착하지는 않지만 더 일반적인 경우를 포착하려고 시도합니다.
함정. 에 포함되어 있습니다. -벽. 다음과 같습니다. -Wstrict-앨리어싱=3

-Wstrict-앨리어싱=n
이 옵션은 다음 경우에만 활성화됩니다. -fstrict-앨리어싱 활성. 코드에 대해 경고합니다.
컴파일러가 최적화를 위해 사용하는 엄격한 앨리어싱 규칙을 위반할 수 있습니다.
수준이 높을수록 정확도가 높아집니다(오탐이 적음). 더 높은 수준
또한 -O가 작동하는 방식과 유사하게 더 많은 노력에 해당합니다. -Wstrict-앨리어싱 is
에 해당 -Wstrict-앨리어싱=n, n=3입니다.

레벨 1: 가장 공격적이고 빠르며 가장 정확하지 않습니다. 레벨이 높을 때 유용할 수 있음
경고하지 않지만 -fstrict-aliasing은 거짓이 거의 없기 때문에 여전히 코드를 깨뜨립니다.
네거티브. 그러나 많은 오탐지가 있습니다. 모든 포인터 변환에 대해 경고합니다.
역참조되지 않더라도 호환되지 않을 수 있는 유형 간에. 앞을 달리다
끝만.

레벨 2: 공격적이고 빠르며 너무 정확하지 않습니다. 여전히 많은 가양성이 있을 수 있습니다(아직
수준 1만큼 많음), 거짓 부정은 거의 없습니다(하지만 수준 1 이상일 수 있음).
레벨 1과 달리 주소를 가져올 때만 경고합니다. 불완전한 유형에 대해 경고합니다.
프런트 엔드에서만 실행됩니다.

레벨 3(기본값 -Wstrict-앨리어싱): 오탐이 거의 없고
거짓 부정. 최적화가 활성화된 경우 레벨 1 또는 2보다 약간 느립니다.
프런트 엔드에서 일반적인 말장난+역참조 패턴을 처리합니다.
"*(int*)&some_float". 최적화가 활성화된 경우 백엔드에서도 실행됩니다.
흐름에 민감한 지점 정보를 사용하여 여러 명령문 사례를 처리합니다.
변환된 포인터가 역참조될 때만 경고합니다. 불완전에 대해 경고하지 않음
유형.

-Wstrict 오버플로
-Wstrict-오버플로=n
이 옵션은 다음 경우에만 활성화됩니다. -fstrict-오버플로 활성. 경우에 대해 경고합니다.
여기서 컴파일러는 부호 있는 오버플로가 실행되지 않는다는 가정을 기반으로 최적화합니다.
발생하다. 코드가 오버플로될 수 있는 모든 경우에 대해 경고하는 것은 아닙니다.
컴파일러가 일부 최적화를 구현하는 경우에만 경고합니다. 따라서 이
경고는 최적화 수준에 따라 다릅니다.

부호 있는 오버플로가 발생하지 않는다고 가정하는 최적화는 다음과 같은 경우 완벽하게 안전합니다.
관련된 변수의 값은 오버플로가 실제로 발생하지 않는 값입니다.
발생하다. 따라서 이 경고는 쉽게 가양성을 줄 수 있습니다. 코드에 대한 경고
그것은 실제로 문제가 아닙니다. 중요한 문제에 집중할 수 있도록 몇 가지 경고
수준이 정의됩니다. 정의되지 않은 서명된 오버플로 사용에 대한 경고가 발행되지 않습니다.
루프에 필요한 반복 횟수를 추정할 때, 특히
루프가 전혀 실행될지 여부를 결정합니다.

-Wstrict-overflow=1
의심스럽고 피하기 쉬운 사례에 대해 경고합니다. 예: "x +
1 > x"; -fstrict-오버플로, 컴파일러는 이것을 1로 단순화합니다. 이 수준
of -Wstrict 오버플로 에 의해 활성화됩니다. -벽; 더 높은 수준은 그렇지 않으며 반드시 있어야 합니다.
명시적으로 요청했습니다.

-Wstrict-overflow=2
또한 비교가 상수로 단순화된 다른 경우에 대해서도 경고합니다. 을위한
예: "abs(x) >= 0". 다음 경우에만 단순화할 수 있습니다. -fstrict-오버플로
"abs (INT_MIN)"가 XNUMX보다 작은 "INT_MIN"으로 오버플로되기 때문입니다.
-Wstrict 오버플로 (레벨 없음)은 다음과 같습니다. -Wstrict-overflow=2.

-Wstrict-overflow=3
또한 비교가 단순화된 다른 경우에 대해서도 경고합니다. 예: "x + 1
> 1"은 "x > 0"으로 단순화됩니다.

-Wstrict-overflow=4
또한 위의 경우에 포함되지 않은 다른 단순화에 대해 경고합니다. 을위한
예: "(x * 10) / 5"는 "x * 2"로 단순화됩니다.

-Wstrict-overflow=5
또한 컴파일러가 상수의 크기를 줄이는 경우에 대해 경고합니다.
비교에 참여했습니다. 예: "x + 2 > y"는 "x + 1"로 단순화됩니다.
>= y". 이것은 가장 높은 경고 수준에서만 보고됩니다.
단순화는 많은 비교에 적용되므로 이 경고 수준은 매우
많은 수의 오탐지.

-Wsuggest-속성=[순수한|const를|노리턴]
속성을 추가하는 것이 도움이 될 수 있는 경우에 대해 경고합니다. 현재 속성
지원되는 목록은 아래에 나와 있습니다.

-Wsuggest-속성=순수
-Wsuggest-속성=const
-Wsuggest-속성=noreturn
"pure", "const" 또는 속성의 후보가 될 수 있는 함수에 대해 경고합니다.
"노턴". 컴파일러는 다른 컴파일에서 볼 수 있는 함수에 대해서만 경고합니다.
단위 또는 ("순수" 및 "상수"의 경우) 기능이 다음을 증명할 수 없는 경우
정상적으로 반환됩니다. 함수가 무한을 포함하지 않으면 정상적으로 반환됩니다.
루프 또는 "abort()" 호출 또는 트래핑에 의해 비정상적으로 반환되지 않습니다. 이것
분석에는 옵션이 필요합니다 -fipa-순수-const, 기본적으로 활성화되어 있습니다. -O
더 높은. 최적화 수준이 높을수록 분석 정확도가 향상됩니다.

-워레이 경계
이 옵션은 다음 경우에만 활성화됩니다. -fttree-vrp 활성(기본값 -O2 이상). 그것
항상 범위를 벗어난 배열의 첨자에 대해 경고합니다. 이 경고는
활성화 된 -벽.

-Wno-div-by-XNUMX
XNUMX으로 컴파일 타임 정수 나누기에 대해 경고하지 마십시오. 부동 소수점 나누기
XNUMX은 무한대를 얻는 합법적인 방법이 될 수 있으므로 경고되지 않습니다.
NaN.

-Wsystem 헤더
시스템 헤더 파일에서 발견된 구성에 대한 경고 메시지를 인쇄합니다. 경고
시스템 헤더는 일반적으로 표시되지 않는다는 가정 하에 표시되지 않습니다.
실제 문제를 나타내며 컴파일러 출력을 읽기 어렵게 만듭니다. 사용
이 명령줄 옵션은 시스템 헤더에서 경고를 내보내도록 GCC에 지시합니다.
사용자 코드에서 발생했습니다. 그러나 -벽 이 옵션과 함께
의지 지원 시스템 헤더의 알 수 없는 pragma에 대해 경고 --- 이를 위해, -Wunknown-pragma
또한 사용해야합니다.

- 트램폴린
중첩 함수에 대한 포인터에 대해 생성된 트램폴린에 대해 경고합니다.

트램펄린은 실행 시 생성되는 작은 데이터 또는 코드 조각입니다.
중첩된 함수의 주소가 취해질 때 스택에 있는 시간, 그리고
중첩된 함수를 간접적으로 호출하는 데 사용됩니다. 일부 대상의 경우
데이터로만 구성되어 특별한 처리가 필요하지 않습니다. 하지만,
대부분의 대상은 코드로 구성되어 있으므로 스택이 필요합니다.
프로그램이 제대로 작동하려면 실행 가능하게 만들어야 합니다.

-Wfloat-같음
부동 소수점 값이 동등 비교에 사용되면 경고합니다.

이 이면의 아이디어는 때때로 (프로그래머에게) 다음을 수행하는 것이 편리하다는 것입니다.
부동 소수점 값을 무한히 정확한 실수에 대한 근사치로 간주합니다.
이 작업을 수행하는 경우 계산해야 합니다(코드를 분석하거나 일부
다른 방법) 계산이 도입하는 최대 또는 가능한 최대 오류, 및
비교를 수행할 때(그리고 출력을 생성할 때 허용하지만 이는
다른 문제). 특히 평등을 테스트하는 대신
두 값에 겹치는 범위가 있는지 확인합니다. 그리고 이것은
관계 연산자이므로 같음 비교가 잘못될 수 있습니다.

-전통적인 (C 및 Objective-C만 해당)
기존 및 ISO C에서 다르게 동작하는 특정 구성에 대해 경고합니다. 또한
기존의 C에 해당하는 항목이 없거나 문제가 있는 ISO C 구성에 대해 경고합니다.
피해야 할 구조.

· 매크로 본문의 문자열 리터럴 내에 나타나는 매크로 매개변수. 에
전통적인 C 매크로 교체는 문자열 리터럴 내에서 발생하지만
ISO C에서

· 전통적인 C에서는 일부 전처리기 지시문이 존재하지 않았습니다. 전통적인
전처리기는 다음 경우에만 라인을 지시문으로 간주합니다. # 에 나타났다
행의 1열. 그러므로 -전통적인 지시에 대해 경고합니다.
전통적인 C는 이해하지만 무시할 것입니다. # 로 나타나지 않습니다
줄의 첫 번째 문자. 또한 다음과 같은 지시문을 숨길 것을 제안합니다. #프라그마
들여쓰기를 통해 전통적인 C에서는 이해하지 못합니다. 일부 전통적인
구현은 인식하지 못합니다 #엘리프, 그래서 그것을 완전히 피하는 것이 좋습니다.

· 인수 없이 나타나는 함수와 같은 매크로.

· 단항 더하기 연산자.

· U 정수 상수 접미사 또는 F or L 부동 소수점 상수 접미사.
(전통적인 C는 L 정수 상수의 접미사.)
접미사는 대부분의 최신 시스템의 시스템 헤더에 정의된 매크로에 나타납니다.
예를 들어 _MIN/_MAX "의 매크로 ". 사용자 코드에서 이러한 매크로를 사용하면
일반적으로 가짜 경고로 이어지지만 GCC의 통합 전처리기는
이러한 경우 경고를 피하기에 충분한 컨텍스트입니다.

· 한 블록에서 외부로 선언된 함수는 종료 후 사용
블록.

· "switch" 문에는 "long" 유형의 피연산자가 있습니다.

· "정적"이 아닌 함수 선언은 "정적" 선언 다음에 옵니다. 이 구성은
일부 전통적인 C 컴파일러에서 허용됩니다.

· 정수 상수의 ISO 유형은 너비 또는 부호가 다릅니다.
전통적인 유형. 이 경고는 상수의 밑이 XNUMX인 경우에만 발행됩니다.
즉, 일반적으로 비트 패턴을 나타내는 XNUMX진수 또는 XNUMX진수 값은
에 대해 경고했습니다.

· ISO 문자열 연결 사용이 감지되었습니다.

· 자동 집계 초기화.

· 식별자가 레이블과 충돌합니다. 전통적인 C에는 별도의 네임스페이스가 없습니다.
라벨.

· 유니온 초기화. 이니셜라이저가 XNUMX이면 경고가 생략됩니다.
이것은 사용자 코드에 XNUMX 초기화가 나타난다는 가정하에 수행됩니다.
초기화 경고 누락을 피하기 위해 예를 들어 "__STDC__"를 조건으로 하고
전통적인 C의 경우 기본 초기화는 XNUMX입니다.

· 고정/부동 소수점 값과 그 반대로 프로토타입에 의한 변환. NS
전통적인 C로 컴파일할 때 이러한 프로토타입이 없으면 심각한
문제. 이것은 전체 세트에 대해 가능한 전환 경고의 하위 집합입니다.
사용 -전통 변환.

· ISO C 스타일 기능 정의 사용. 이 경고는 의도적으로 지원 발행
이러한 ISO C 기능은
libiberty의 전통적인 C 호환성 매크로를 사용할 때 코드에 나타납니다.
"PARAMS" 및 "VPARAMS". 이 경고는 중첩된 함수에 대해서도 무시됩니다.
해당 기능은 이미 GCC 확장이므로 다음과 관련이 없습니다.
전통적인 C 호환성.

-전통 변환 (C 및 Objective-C만 해당)
프로토타입이 발생하는 것과 다른 유형 변환을 일으키는 경우 경고
프로토타입이 없는 경우 동일한 인수에 대해 설명합니다. 여기에는 다음의 전환이 포함됩니다.
고정 소수점을 부동 소수점으로 또는 그 반대로 변환하고 너비를 변경하거나
기본 승격과 동일한 경우를 제외하고 고정 소수점 인수의 부호.

-W선언 후 선언 (C 및 Objective-C만 해당)
블록의 명령문 다음에 선언이 발견되면 경고합니다. 알려진 이 구성은
C++에서 ISO C99와 함께 도입되었으며 기본적으로 GCC에서 허용됩니다. 그렇지 않다
ISO C90에서 지원되며 GCC 3.0 이전의 GCC 버전에서는 지원되지 않았습니다.

-분데프
정의되지 않은 식별자가 #만약 지침.

-Wno-endif-레이블
경고하지 않음 #그밖에 또는 #endif 텍스트가 이어집니다.

-W섀도우
지역 변수 또는 유형 선언이 다른 변수에 그림자를 줄 때마다 경고합니다.
매개변수, 유형 또는 클래스 멤버(C++에서) 또는 내장 함수가
그림자. C++에서 컴파일러는 지역 변수가
struct/class/enum이지만 명시적 typedef를 숨기면 경고합니다.

-보다 큼=
다음보다 큰 개체가 있을 때마다 경고 바이트가 정의됩니다.

-Wframe-보다 큼=
함수 프레임의 크기가 다음보다 크면 경고 바이트. 계산 완료
스택 프레임 크기를 결정하는 것은 근사치이며 보수적이지 않습니다. 실제
요구 사항은 다음보다 다소 클 수 있습니다. 경고를 받지 못하더라도. 에
또한 "alloca", 가변 길이 배열 또는 관련을 통해 할당된 모든 공간
생성 여부를 결정할 때 컴파일러에서 구문을 포함하지 않습니다.
경고.

-Wno-free-nonheap-객체
힙에 할당되지 않은 개체를 해제하려고 할 때 경고하지 마십시오.

-Wstack 사용=
함수의 스택 사용량이 다음보다 클 수 있음을 경고합니다. 바이트. 계산
스택 사용량이 보수적인지 확인하기 위해 수행됩니다. "alloca"를 통해 할당된 모든 공간,
가변 길이 배열 또는 관련 구문은 다음과 같은 경우 컴파일러에 의해 포함됩니다.
경고를 발행할지 여부를 결정합니다.

메시지는 의 출력과 일치합니다. -fstack-사용.

· 스택 사용량이 완전히 정적이지만 지정된 양을 초과하는 경우 다음과 같습니다.

경고: 스택 사용량은 1120바이트입니다.

· 스택 사용이 (부분적으로) 동적이지만 제한된 경우 다음과 같습니다.

경고: 스택 사용량은 1648바이트일 수 있습니다.

· 스택 사용이 (부분적으로) 동적이고 제한되지 않는 경우 다음과 같습니다.

경고: 스택 사용량이 제한되지 않을 수 있습니다.

-Wunsafe 루프 최적화
컴파일러가 아무 것도 가정할 수 없기 때문에 루프를 최적화할 수 없는 경우 경고합니다.
루프 인덱스의 경계. 와 함께 -펀세이프 루프 최적화 컴파일러의 경우 경고
그런 가정을 했다.

-Wno-pedantic-ms-형식 (MinGW 대상만 해당)
비 ISO "printf" / "scanf" 형식 너비 지정자 "I32"에 대한 경고를 비활성화합니다.
"I64" 및 "I"는 MS 런타임에 따라 Windows 대상에서 사용됩니다.
옵션들 -W포맷-페단 틱 gnu 확장 없이.

-Wpointer-arith
함수 유형 또는 "무효"의 "크기"에 따라 달라지는 모든 것에 대해 경고합니다. GNU C
"void *"를 사용한 계산의 편의를 위해 이러한 유형의 크기를 1로 지정합니다.
함수에 대한 포인터와 포인터. C++에서는 산술 연산이 수행될 때도 경고합니다.
"NULL"이 포함됩니다. 이 경고는 다음에 의해서도 활성화됩니다. -페단 틱.

-W 유형 제한
제한된 범위로 인해 비교가 항상 참인지 항상 거짓인지 경고합니다.
데이터 유형이지만 상수 표현식에 대해서는 경고하지 않습니다. 예를 들어, 서명되지 않은 경우 경고
변수는 XNUMX과 비교됩니다. < or >=. 이 경고는 다음에 의해서도 활성화됩니다.
-웩스트라.

-Wbad 함수 캐스트 (C 및 Objective-C만 해당)
함수 호출이 일치하지 않는 유형으로 캐스팅될 때마다 경고합니다. 예를 들어 다음과 같은 경우 경고합니다.
"int malloc()"은 "anything *"으로 캐스팅됩니다.

-Wc++-호환 (C 및 Objective-C만 해당)
ISO C 및 ISO의 공통 하위 집합 외부에 있는 ISO C 구성에 대해 경고합니다.
C++, 예를 들어 "void *"에서 "void"가 아닌 포인터로의 암시적 변환 요청
유형.

-Wc++11-호환 (C++ 및 Objective-C++만 해당)
ISO C++ 1998과 ISO C++ 2011에서 의미가 다른 C++ 구문에 대해 경고합니다.
예: ISO C++ 1998의 키워드인 ISO C++ 2011의 식별자. 이 경고
켜다 - 축소 에 의해 활성화됩니다. -벽.

-Wcast급
대상 유형에서 유형 한정자를 제거하기 위해 포인터가 캐스트될 때마다 경고합니다.
예를 들어 "const char *"가 일반 "char *"로 캐스팅되면 경고합니다.

또한 안전하지 않은 방식으로 형식 한정자를 도입하는 캐스트를 만들 때 경고합니다. 을위한
예를 들어 "char **"를 "const char **"로 캐스팅하는 것은 다음 예와 같이 안전하지 않습니다.

/* p는 char ** 값입니다. */
const char **q = (const char **) p;
/* 읽기 전용 문자열을 const char *에 할당하는 것은 OK입니다. */
*q = "문자열";
/* 이제 char** 포인터가 읽기 전용 메모리를 가리킵니다. */
**p = 'b';

-Wcast 정렬
대상의 필요한 정렬이 다음과 같이 포인터가 캐스팅될 때마다 경고합니다.
증가했다. 예를 들어 "char *"가 다음과 같은 시스템에서 "int *"로 캐스팅되면 경고합니다.
정수는 XNUMX바이트 또는 XNUMX바이트 경계에서만 액세스할 수 있습니다.

-문자열 쓰기
C를 컴파일할 때 문자열 상수에 "const char[길이]" 그래서 복사
하나의 주소를 "const"가 아닌 "char *" 포인터로 지정하면 경고가 표시됩니다. 이것들
경고는 컴파일 시간에 문자열에 쓰려고 할 수 있는 코드를 찾는 데 도움이 됩니다.
상수이지만 선언에서 "const"를 사용하는 데 매우 주의를 기울인 경우에만
그리고 프로토타입. 그렇지 않으면 귀찮은 일이 될 뿐입니다. 이것이 우리가 만들지 않은 이유입니다
-벽 이러한 경고를 요청하십시오.

C++를 컴파일할 때 더 이상 사용되지 않는 문자열 리터럴에서 "char
*". 이 경고는 C++ 프로그램에 대해 기본적으로 활성화되어 있습니다.

-클로버드
다음에 의해 변경될 수 있는 변수에 대해 경고 롱제임프 or vfork. 이 경고도
활성화 된 -웩스트라.

-W변환
값을 변경할 수 있는 암시적 변환에 대해 경고합니다. 여기에는 전환이 포함됩니다.
"x"가 "더블"인 경우 "abs (x)"와 같이 실수와 정수 사이; 사이의 전환
"unsigned ui = -1"과 같이 서명된 것과 서명되지 않은 것; 다음과 같은 더 작은 유형으로의 변환
"sqrtf(M_PI)". "abs ((int) x)" 및 "ui =
(unsigned) -1" 또는 "abs (2.0)"와 같이 변환에 의해 값이 변경되지 않는 경우.
부호 있는 정수와 부호 없는 정수 간의 변환에 대한 경고는 다음과 같이 비활성화할 수 있습니다.
사용 -Wno-sign-변환.

C++의 경우 사용자 정의 변환에 대한 혼란스러운 과부하 해결에 대해서도 경고합니다. 그리고
유형 변환 연산자를 사용하지 않는 변환: "void"로의 변환,
동일한 유형, 기본 클래스 또는 참조. 전환에 대한 경고
부호 있는 정수 및 부호 없는 정수는 C++에서 기본적으로 비활성화됩니다. -Wsign 변환
명시적으로 활성화되어 있습니다.

-Wno 변환 null (C++ 및 Objective-C++만 해당)
"NULL"과 포인터가 아닌 유형 간의 변환에 대해 경고하지 마십시오. -wconversion-null. is
기본적으로 활성화되어 있습니다.

-Wzero-as-null-포인터 상수 (C++ 및 Objective-C++만 해당)
리터럴 '0'이 널 포인터 상수로 사용될 때 경고합니다. 이것은 유용할 수 있습니다
C++11에서 "nullptr"로의 변환을 용이하게 합니다.

- 멍한 몸
빈 바디가 발생하면 경고 if, 그렇지 않으면 or do 동안 성명. 이 경고는
에 의해 활성화됨 -웩스트라.

-Wenum-비교
다른 열거 유형의 값 간의 비교에 대해 경고합니다. C++ 열거형에서
조건식의 불일치도 진단되고 경고가 활성화됩니다.
기본. C에서 이 경고는 다음에 의해 활성화됩니다. -벽.

-Wjump-미스-초기화 (C, Objective-C 전용)
"goto" 문 또는 "switch" 문이 가로질러 앞으로 점프하면 경고합니다.
변수 초기화 또는 변수가 완료된 후 레이블로 뒤로 점프
초기화. 이것은 초기화될 때 초기화되는 변수에 대해서만 경고합니다.
선언했다. 이 경고는 C 및 Objective-C에서만 지원됩니다. C++에서 이런 종류의
분기는 어떤 경우에도 오류입니다.

-Wjump-미스-초기화 에 포함 -Wc++-호환. 로 비활성화할 수 있습니다.
-Wno-점프 미스-초기화 옵션을 선택합니다.

-Wsign-비교
부호 있는 값과 부호 없는 값을 비교하면 잘못된 값이 생성될 수 있음을 경고합니다.
부호 있는 값이 부호 없는 값으로 변환될 때의 결과입니다. 이 경고도 활성화되어 있습니다.
by -웩스트라; 다른 경고를 받기 위해 -웩스트라 이 경고 없이 사용 -웩스트라
-Wno-sign-비교.

-Wsign 변환
다음과 같이 정수 값의 부호를 변경할 수 있는 암시적 변환에 대해 경고합니다.
부호 있는 정수 표현식을 부호 없는 정수 변수에 할당합니다. 명시적
캐스트는 경고를 침묵시킵니다. C에서 이 옵션은 다음에 의해서도 활성화됩니다. -W변환.

-워드레스
메모리 주소의 의심스러운 사용에 대해 경고합니다. 여기에는 다음 주소를 사용하는 것이 포함됩니다.
"void func(void); if(func)"와 같은 조건식의 함수 및
"if (x == "abc")"와 같은 문자열 리터럴의 메모리 주소에 대한 비교.
이러한 사용은 일반적으로 프로그래머 오류를 나타냅니다. 함수의 주소는 항상
true로 평가되므로 조건부에서 사용하면 일반적으로 프로그래머가
함수 호출에서 괄호를 잊어 버렸습니다. 문자열 리터럴과의 비교
지정되지 않은 동작이 발생하고 C에서 이식 가능하지 않으므로 일반적으로 다음을 나타냅니다.
프로그래머가 "strcmp"를 사용하려고 했던 것입니다. 이 경고는 다음에 의해 활성화됩니다. -벽.

-W논리적 연산
표현식에서 의심스러운 논리 연산자 사용에 대해 경고합니다. 여기에는 다음을 사용하는 것이 포함됩니다.
비트 단위 연산자가 예상되는 컨텍스트의 논리 연산자.

-Waggregate-리턴
구조체 또는 공용체를 반환하는 함수가 정의되거나 호출되면 경고합니다. (에
배열을 반환할 수 있는 언어인 경우에도 경고가 표시됩니다.)

-Wno-속성
인식할 수 없는 속성과 같이 예기치 않은 "__attribute__"가 사용되는 경우 경고하지 마십시오.
변수 등에 적용된 함수 속성
지원되는 속성의 잘못된 사용.

-Wno 내장 매크로 재정의
특정 내장 매크로가 재정의되면 경고하지 마십시오. 이것은 다음에 대한 경고를 표시하지 않습니다.
"__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__"의 재정의 및
"__BASE_FILE__".

-Wstrict 프로토타입 (C 및 Objective-C만 해당)
인수 유형을 지정하지 않고 함수가 선언되거나 정의되면 경고합니다. (NS
이전 스타일의 함수 정의가 앞에 오는 경우 경고 없이 허용됩니다.
인수 유형을 지정하는 선언).

-Wold 스타일 선언 (C 및 Objective-C만 해당)
선언에서 C 표준에 따라 더 이상 사용되지 않는 사용에 대해 경고합니다. 을위한
예를 들어 "정적"과 같은 스토리지 클래스 지정자가
선언. 이 경고는 다음에 의해서도 활성화됩니다. -웩스트라.

-Wold 스타일 정의 (C 및 Objective-C만 해당)
구식 함수 정의가 사용되는 경우 경고합니다. 있는 경우에도 경고가 표시됩니다.
이전 프로토타입.

-Wmissing-매개변수 유형 (C 및 Objective-C만 해당)
함수 매개변수는 K&R 스타일 함수에서 유형 지정자 없이 선언됩니다.

무효 foo(막대) { }

이 경고는 다음에 의해서도 활성화됩니다. -웩스트라.

-Wmissing-프로토타입 (C 및 Objective-C만 해당)
이전 프로토타입 선언 없이 전역 함수가 정의된 경우 경고합니다. 이것
정의 자체가 프로토타입을 제공하더라도 경고가 발행됩니다. 목표는
헤더 파일에 선언되지 않은 전역 함수를 감지합니다.

-Wmissing-선언
전역 함수가 이전 선언 없이 정의되면 경고합니다. 경우에도 그렇게 하십시오
정의 자체가 프로토타입을 제공합니다. 이 옵션을 사용하여 전역
헤더 파일에 선언되지 않은 함수 C++에서는 경고가 발행되지 않습니다.
함수 템플릿, 인라인 함수, 익명 네임스페이스의 함수.

-Wmissing-field-initializers
구조의 이니셜라이저에 일부 필드가 누락된 경우 경고합니다. 예를 들어, 다음
"xh"가 암시적으로 XNUMX이기 때문에 코드에서 이러한 경고가 발생합니다.

구조체 s { int f, g, h; };
구조체 sx = { 3, 4 };

이 옵션은 지정된 이니셜라이저에 대해 경고하지 않으므로 다음 수정
경고를 트리거하지 않습니다:

구조체 s { int f, g, h; };
구조체 sx = { .f = 3, .g = 4 };

이 경고는 -웩스트라. 다른 것을 얻으려면 -웩스트라 이것이 없으면 경고,
사용 -웩스트라 -Wno-missing-field-initializers.

-Wmissing 형식 속성
"형식" 속성의 후보가 될 수 있는 함수 포인터에 대해 경고합니다. 메모
이들은 가능한 후보일 뿐 절대적인 후보는 아닙니다. GCC는 그 기능을 추측할 것입니다
할당, 초기화,
매개변수 전달 또는 반환 문에는 해당 "형식" 속성이 있어야 합니다.
결과 유형에서. 즉, 할당 또는 초기화의 왼쪽,
매개변수 변수의 유형 또는 포함하는 함수의 반환 유형
경고를 피하기 위해 각각에는 "형식" 속성도 있어야 합니다.

GCC는 "형식"의 후보가 될 수 있는 함수 정의에 대해서도 경고합니다.
속성. 다시 말하지만, 이들은 가능한 후보일 뿐입니다. GCC는 "형식"을 추측합니다.
속성은 "vprintf"와 같은 함수를 호출하는 모든 함수에 적합할 수 있습니다.
또는 "vscanf"이지만 항상 그런 것은 아니며 일부 기능은
"형식" 속성이 적절하면 감지되지 않을 수 있습니다.

-Wno-다중 문자
다중 문자 상수('푸프') 사용. 일반적으로 그들은 나타냅니다
사용자 코드의 오타는 구현에 정의된 값을 가지고 있기 때문에
이식 가능한 코드에 사용됩니다.

- 정규화 =
ISO C 및 ISO C++에서 두 식별자는 서로 다른 시퀀스인 경우 서로 다릅니다.
문자. 그러나 때때로 기본 ASCII 문자 집합 이외의 문자가
사용되는 경우 동일하게 보이는 두 개의 서로 다른 문자 시퀀스를 가질 수 있습니다. 피하기 위해
혼란, ISO 10646 표준은 몇 가지 표준화 규칙 적용할 때
같아 보이는 두 시퀀스가 ​​동일한 시퀀스로 바뀌는지 확인합니다. GCC
정규화되지 않은 식별자를 사용하는 경우 경고할 수 있습니다. 이 옵션
해당 경고를 제어합니다.

GCC에서 지원하는 경고에는 네 가지 수준이 있습니다. 기본값은 -표준화=nfc,
ISO 10646 "C" 정규화 형식이 아닌 식별자에 대해 경고합니다.
NFC. NFC는 대부분의 용도에 권장되는 형식입니다.

불행히도 ISO C 및 ISO C++에서 식별자에 허용되는 일부 문자가 있습니다.
NFC로 전환되면 식별자에서 허용되지 않습니다. 즉 방법이 없다.
휴대용 ISO C 또는 C++에서 이러한 기호를 사용하고 NFC에 모든 식별자를 포함합니다.
-표준화=id 이 문자에 대한 경고를 표시하지 않습니다. 미래가 기대된다
관련된 표준 버전이 이를 수정하므로 이 옵션이
기본값.

다음을 작성하여 모든 문자에 대한 경고를 끌 수 있습니다. -W정규화=없음. 당신
다른 정규화 체계(예:
"D"), 그렇지 않으면 문자 그대로 불가능한 버그를 쉽게 만들 수 있기 때문입니다.
를 참조하십시오.

ISO 10646의 일부 문자는 고유한 의미를 갖지만 일부 글꼴에서는 동일하게 보입니다.
특히 포맷이 적용된 후에는 방법론을 표시할 수 있습니다. 예를 들어
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N"은 일반 "n"처럼 표시됩니다.
그것은 위 첨자에 배치되었습니다. ISO 10646은 다음을 정의합니다. NFKC 표준화
이 모든 것을 표준 형식으로 변환하는 체계도 있고 GCC는 다음과 같은 경우 경고합니다.
사용하는 경우 코드가 NFKC에 없습니다. -표준화=nfkc. 이 경고는
혼동될 수 있으므로 문자 O가 포함된 모든 식별자에 대한 경고
숫자가 0이므로 기본값은 아니지만 로컬 코딩으로 유용할 수 있습니다.
프로그래밍 환경이 이러한 항목을 표시하도록 수정할 수 없는 경우
캐릭터를 뚜렷하게.

- 더 이상 사용되지 않음
더 이상 사용되지 않는 기능의 사용에 대해 경고하지 마십시오.

-Wno-deprecated-선언
더 이상 사용되지 않는 것으로 표시된 함수, 변수 및 유형의 사용에 대해 경고하지 마십시오.
"deprecated" 속성을 사용합니다.

-Wno 오버플로
상수 표현식에서 컴파일 타임 오버플로에 대해 경고하지 마십시오.

-Woverride 초기화 (C 및 Objective-C만 해당)
지정된 사용 시 부작용이 없는 초기화된 필드가 재정의되면 경고
이니셜라이저.

이 경고는 -웩스트라. 다른 것을 얻으려면 -웩스트라 이것이 없으면 경고,
사용 -웩스트라 -Wno-재정의-초기화.

-W포장
구조에 패킹된 속성이 지정되어 있지만 패킹된 속성에 없는 경우 경고합니다.
구조의 레이아웃이나 크기에 영향을 미칩니다. 이러한 구조는 다음과 같이 잘못 정렬될 수 있습니다.
작은 이익. 예를 들어, 이 코드에서 "struct bar"의 변수 "fx"는
"struct bar" 자체에 패킹된 속성이 없는 경우에도 잘못 정렬됩니다.

구조체 foo {
int x;
문자 a, b, c, d;
} __attribute __ ((packed));
구조체 막대 {
문자 Z;
구조체 foo f;
};

-Wpacked-bitfield-compat
GCC의 4.1, 4.2 및 4.3 시리즈는 다음 유형의 비트 필드에서 "packed" 속성을 무시합니다.
"숯". 이것은 GCC 4.4에서 수정되었지만 변경으로 인해
구조 레이아웃. GCC에서 이러한 필드의 오프셋이 변경되면 GCC에서 알려줍니다.
4.4. 예를 들어 "a" 필드와 "b" 필드 사이에 더 이상 4비트 패딩이 없습니다.
구조:

구조 foo
{
문자 a:4;
문자 b:8;
} __attribute__ ((포장));

이 경고는 기본적으로 활성화되어 있습니다. 사용하다 -Wno-packed-bitfield-compat 이것을 비활성화하려면
경고.

-W패딩
패딩이 구조체에 포함되어 있으면 경고합니다.
구조 또는 전체 구조를 정렬합니다. 가끔 이런 일이 있을 때 가능하다
패딩을 줄이기 위해 구조의 필드를 재정렬하고
더 작은 구조.

- Wredundant-decls
동일한 범위에서 두 번 이상 선언된 항목이 있으면 경고합니다.
다중 선언은 유효하며 아무 것도 변경하지 않습니다.

-Wnested-externs (C 및 Objective-C만 해당)
함수 내에서 "extern" 선언이 발견되면 경고합니다.

-윈라인
함수를 인라인할 수 없고 인라인으로 선언된 경우 경고합니다. 이것으로도
옵션을 선택하면 컴파일러는 에 선언된 인라인 함수 실패에 대해 경고하지 않습니다.
시스템 헤더.

컴파일러는 다양한 경험적 방법을 사용하여 인라인할 것인지 여부를 결정합니다.
기능. 예를 들어 컴파일러는 함수의 크기를 고려합니다.
인라인 및 현재 함수에서 이미 수행된 인라인 양입니다.
따라서 소스 프로그램에서 겉보기에 중요하지 않은 변경 사항이 발생할 수 있습니다.
에 의해 생성된 경고 -윈라인 나타나거나 사라지다.

-Wno-invalid-offsetof (C++ 및 Objective-C++만 해당)
적용 시 경고 표시 안 함 오프셋 비 POD 유형에 대한 매크로. 에 따르면
1998 ISO C++ 표준, 적용 오프셋 비 POD 유형은 정의되지 않습니다. 에
그러나 기존 C++ 구현은 오프셋 일반적으로 의미 있는 결과를 제공합니다
특정 종류의 비 POD 유형에 적용되는 경우에도 마찬가지입니다. (간단한 것과 같은 구조체
생성자가 있기 때문에 POD 유형이 될 수 없습니다.) 이 플래그는 다음을 위한 것입니다.
이식 불가능한 코드를 작성하고 있음을 알고 의도적으로
그것에 대한 경고를 무시하기로 선택했습니다.

에 대한 제한 사항 오프셋 C++ 표준의 향후 버전에서는 완화될 수 있습니다.

- 포인터 투 포인터 캐스트 없음
크기가 다른 정수의 포인터 유형에 대한 캐스트에서 경고를 표시하지 않습니다. 에
C++에서 더 작은 크기의 포인터 유형으로 캐스팅하는 것은 오류입니다. Wint-to-pointer 캐스트 is
기본적으로 활성화되어 있습니다.

- Wno-pointer-to-int-cast (C 및 Objective-C만 해당)
포인터에서 다른 크기의 정수 유형으로의 캐스트 경고를 억제합니다.

-Winvalid-pch
미리 컴파일된 헤더가 검색 경로에 있지만 사용할 수 없는 경우 경고합니다.

-롱롱
다음 경우 경고 유형이 사용됩니다. 이것은 다음 중 하나에 의해 활성화됩니다. -페단 틱 or -전통적인
ISO C90 및 C++98 모드에서. 경고 메시지를 금지하려면 다음을 사용하십시오. -오롱롱.

-Wvariadic 매크로
가변 매크로가 현학적 ISO C90 모드 또는 GNU 대체 구문에서 사용되는 경우 경고
현학적 ISO C99 모드에 있을 때. 이것은 기본값입니다. 경고 메시지를 금지하려면 다음을 사용하십시오.
-Wno-variadic-매크로.

-W벡터 작업 성능
아키텍처의 SIMD 기능을 통해 벡터 작업이 구현되지 않으면 경고합니다.
주로 성능 조정에 유용합니다. 벡터 연산 구현 가능
"조각별", 이는 스칼라 연산이 모든 벡터에 대해 수행됨을 의미합니다.
요소; "병렬로", 이는 벡터 연산이 다음을 사용하여 구현됨을 의미합니다.
일반적으로 더 성능 효율적인 더 넓은 유형의 스칼라; 그리고 "싱글로
스칼라", 이는 벡터가 스칼라 유형에 맞는다는 것을 의미합니다.

- 블라
코드에 가변 길이 배열이 사용되면 경고합니다. -우노블라 방지할 것이다
-페단 틱 가변 길이 배열의 경고.

-W휘발성 레지스터 변수
레지스터 변수가 휘발성으로 선언되면 경고합니다. 휘발성 수정자는
레지스터에 대한 읽기 및/또는 쓰기를 제거할 수 있는 모든 최적화 금지
변수. 이 경고는 다음에 의해 활성화됩니다. -벽.

-Wdisabled-최적화
요청한 최적화 단계가 비활성화되면 경고합니다. 이 경고는 일반적으로
코드에 문제가 있음을 나타냅니다. 그것은 단지 GCC의
옵티마이저는 코드를 효과적으로 처리할 수 없습니다. 종종 문제는
코드가 너무 크거나 너무 복잡합니다. GCC는 다음과 같은 경우 프로그램 최적화를 거부합니다.
최적화 자체에 지나치게 많은 시간이 소요될 수 있습니다.

-Wpointer 기호 (C 및 Objective-C만 해당)
포인터 인수 전달 또는 부호가 다른 할당에 대해 경고합니다. 이것
옵션은 C 및 Objective-C에서만 지원됩니다. 에 의해 암시된다 -벽 과 별
-페단 틱로 비활성화할 수 있습니다. -Wno 포인터 기호.

-Wstack 보호기
이 옵션은 다음 경우에만 활성화됩니다. -fstack 보호기 활성. 기능에 대해 경고합니다.
스택 스매싱으로부터 보호되지 않습니다.

-Wno-머드플랩
에서 계측할 수 없는 구성에 대한 경고를 억제합니다. -fmudflap.

-Woverlength-문자열
"최소 최대" 길이보다 긴 문자열 상수에 대해 경고
C 표준에 명시되어 있습니다. 최신 컴파일러는 일반적으로 다음과 같은 문자열 상수를 허용합니다.
표준의 최소 제한보다 훨씬 길지만 이식성이 뛰어난 프로그램은
더 긴 문자열을 사용하지 마십시오.

한도 적용 시간 내에 문자열 상수 연결, 후행은 계산하지 않음
무효. C90에서 제한은 509자였습니다. C99에서는 4095로 올라갔습니다. C++98은
표준 최소 최대값을 지정하지 않으므로 길이가 초과된 문자열은 진단하지 않습니다.
C ++.

이 옵션은 -페단 틱로 비활성화할 수 있습니다. -Wno-overlength-문자열.

-Wunsuffixed 부동 소수점 상수 (C 및 Objective-C만 해당)
GCC는 접미사가 없는 부동 상수에 대해 경고를 발행합니다. 언제
와 함께 사용 -Wsystem 헤더 시스템 헤더에서 이러한 상수에 대해 경고합니다.
파일. 이것은 "FLOAT_CONST_DECIMAL64"와 함께 사용할 코드를 준비할 때 유용할 수 있습니다.
99진 부동 소수점 확장에서 CXNUMX로의 pragma.

옵션 for 디버깅 너의 프로그램 or GCC
GCC에는 프로그램이나 GCC를 디버깅하는 데 사용되는 다양한 특수 옵션이 있습니다.

-g 운영 체제의 기본 형식(stabs, COFF,
XCOFF 또는 DWARF 2). GDB는 이 디버깅 정보로 작업할 수 있습니다.

stabs 형식을 사용하는 대부분의 시스템에서 -g 추가 디버깅 정보 사용 가능
GDB만이 사용할 수 있는 것; 이 추가 정보는 GDB에서 디버깅 작업을 더 잘 수행하지만
아마도 다른 디버거가 충돌을 일으키거나 프로그램 읽기를 거부할 것입니다. 네가 원한다면
추가 정보를 생성할지 여부를 확실히 제어하려면 다음을 사용하십시오. -gstabs +,
-gstabs, -gxcoff+, -gxcoff-gvms (아래 참조).

GCC를 사용하면 -g-O. 최적화된 코드에서 사용하는 단축키는
때때로 놀라운 결과가 발생합니다. 선언한 일부 변수는 에 존재하지 않을 수 있습니다.
모두; 통제의 흐름이 예상하지 못한 곳으로 잠시 이동할 수 있습니다. 일부 진술은
상수 결과를 계산하거나 해당 값이 이미
손; 일부 명령문은 다른 곳으로 옮겨졌기 때문에 다른 위치에서 실행될 수 있습니다.
루프.

그럼에도 불구하고 최적화된 출력을 디버그할 수 있음이 입증되었습니다. 이것은 합리적으로 만든다.
버그가 있을 수 있는 프로그램에 최적화 프로그램을 사용합니다.

다음 옵션은 더 많은 기능을 가진 GCC가 생성될 때 유용합니다.
하나 이상의 디버깅 형식.

-ggdb
GDB에서 사용할 디버깅 정보를 생성합니다. 이것은 가장 표현력이
사용 가능한 형식(DWARF 2, 찌르기 또는 둘 다 없는 경우 기본 형식
지원됨) 가능하면 GDB 확장을 포함합니다.

-gstabs
GDB 없이 디버깅 정보를 stabs 형식(지원되는 경우)으로 생성합니다.
확장. 이것은 대부분의 BSD 시스템에서 DBX가 사용하는 형식입니다. MIPS, 알파 및
System V 릴리스 4 시스템 이 옵션은 stabs 디버깅 출력을 생성하지 않습니다.
DBX 또는 SDB에서 이해합니다. System V 릴리스 4 시스템에서 이 옵션을 사용하려면 GNU가 필요합니다.
어셈블러.

-feliminate-unused-debug-기호
기호에 대해서만 stabs 형식(지원되는 경우)의 디버깅 정보 생성
실제로 사용되는 것입니다.

-femit-class-debug-항상
하나의 개체 파일에서만 C++ 클래스에 대한 디버깅 정보를 내보내는 대신,
클래스를 사용하여 모든 객체 파일에서 방출합니다. 이 옵션은 다음과 함께 사용해야 합니다.
GCC가 일반적으로 디버깅 정보를 내보내는 방식을 처리할 수 없는 디버거
이 옵션을 사용하면 디버깅 정보의 크기가 증가하기 때문입니다.
XNUMX배만큼.

-fno-debug-types-섹션
기본적으로 DWARF v4 이상 유형을 사용할 때 DIE는 자체적으로 배치됩니다.
.debug_types 섹션을 .debug_info 섹션의 일부로 만드는 대신. 그것은이다
링커가 실행되기 때문에 별도의 comdat 섹션에 두는 것이 더 효율적입니다.
중복을 제거할 수 있습니다. 그러나 모든 DWARF 소비자가 .debug_types 섹션을 지원하는 것은 아닙니다.
아직.

-gstabs +
GNU를 사용하여 stabs 형식(지원되는 경우)으로 디버깅 정보 생성
GNU 디버거(GDB)에서만 이해할 수 있는 확장입니다. 이러한 확장의 사용은
다른 디버거가 충돌을 일으키거나 프로그램 읽기를 거부할 가능성이 있습니다.

-gcoff
COFF 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 이것이
System V 릴리스 4 이전의 대부분의 System V 시스템에서 SDB가 사용하는 형식입니다.

-gxcoff
XCOFF 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 이것이
IBM RS/6000 시스템의 DBX 디버거에서 사용하는 형식입니다.

-gxcoff+
GNU를 사용하여 XCOFF 형식(지원되는 경우)으로 디버깅 정보 생성
GNU 디버거(GDB)에서만 이해할 수 있는 확장입니다. 이러한 확장의 사용은
다른 디버거가 충돌을 일으키거나 프로그램 읽기를 거부할 가능성이 있으며
GNU 어셈블러(GAS) 이외의 어셈블러는 오류와 함께 실패합니다.

-그드워프-버전
DWARF 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 이것이
IRIX 6의 DBX에서 사용하는 형식입니다. 버전 2, 3 또는 4일 수 있습니다. NS
기본 버전은 2입니다.

DWARF 버전 2에서는 일부 포트가 필요하고 항상 사용할 것입니다.
해제 테이블에서 충돌하는 DWARF 3 확장.

버전 4에는 GDB 7.0 및 -fvar-추적 할당 최대 이익을 위해.

-grecord-gcc-스위치
이 스위치로 인해 컴파일러를 호출하는 데 사용되는 명령줄 옵션이
DWARF의 DW_AT_producer 속성에 추가될 코드 생성에 영향을 줍니다.
디버깅 정보. 옵션은 다음과 구분되는 공백으로 연결됩니다.
서로 그리고 컴파일러 버전에서. 또한보십시오 -frecord-gcc-스위치 다른이를 위해
컴파일러 옵션을 개체 파일에 저장하는 방법입니다.

-gno-record-gcc-스위치
DWARF의 DW_AT_producer 속성에 명령줄 옵션을 추가하는 것을 허용하지 않습니다.
디버깅 정보. 이것이 기본값입니다.

-gstrict-dwarf
에서 선택한 것보다 최신 DWARF 표준 버전의 확장 사용을 허용하지 않습니다.
-그드워프-버전. 이후의 충돌하지 않는 DWARF 확장을 사용하는 대부분의 대상에서
표준 버전이 허용됩니다.

-gno-strict-dwarf
선택한 것보다 최신 DWARF 표준 버전의 확장 사용 허용
-그드워프-버전.

-gvms
VMS 디버그 형식으로 디버깅 정보를 생성합니다(지원되는 경우). 이것이
VMS 시스템의 DEBUG에서 사용하는 형식입니다.

-g수평
-ggdb수평
-gstabs수평
-gcoff수평
-gxcoff수평
-gvms수평
디버깅 정보 요청 및 사용 수평 정보의 양을 지정합니다. NS
기본 레벨은 2입니다.

레벨 0은 디버그 정보를 전혀 생성하지 않습니다. 따라서, -g0 부정하다 -g.

레벨 1은 최소한의 정보를 생성하여 일부를 역추적하기에 충분합니다.
디버그할 계획이 없는 프로그램. 여기에는 기능에 대한 설명과
외부 변수는 있지만 지역 변수와 줄 번호에 대한 정보는 없습니다.

레벨 3에는 파일에 있는 모든 매크로 정의와 같은 추가 정보가 포함됩니다.
프로그램. 일부 디버거는 다음을 사용할 때 매크로 확장을 지원합니다. -g3.

-gdwarf-2 GCC가 지원하는 데 사용되었기 때문에 연결된 디버그 수준을 허용하지 않습니다.
선택권 -gdwarf 이는 DWARF 버전 1에서 디버그 정보를 생성한다는 의미입니다.
형식(버전 2와 매우 다름)이며 너무 혼란스러웠을 것입니다.
해당 디버그 형식은 더 이상 사용되지 않지만 지금은 옵션을 변경할 수 없습니다. 대신 사용
추가의 -g수평 DWARF의 디버그 수준을 변경하는 옵션입니다.

-gttoggle
디버그 정보 생성을 끕니다. 이 옵션을 생략하면 생성되었을 것입니다.
그렇지 않으면 레벨 2에서 켜십시오. 명령줄에서 이 인수의 위치
중요하지 않습니다. 다른 모든 옵션이 처리된 후에 적용되며 그대로 적용됩니다.
몇 번을 주어도 한 번만. 이것은 주로 사용하기위한 것입니다
-fcompare-디버그.

-fdump-최종-insns[=파일]
최종 내부 표현(RTL)을 다음으로 덤프합니다. 파일. 선택적 인수인 경우
생략된 경우(또는 파일 "."), 덤프 파일의 이름은 다음을 추가하여 결정됩니다.
".gkd"를 컴파일 출력 파일 이름으로 바꿉니다.

-fcompare-디버그[=선택하지 않는]
컴파일하는 동안 오류가 발생하지 않으면 컴파일러를 두 번째로 실행하고 다음을 추가합니다. 선택하지 않는
-f비교-디버그-초 두 번째 컴파일에 전달된 인수에 덤프
두 컴파일 모두에서 최종 내부 표현이며, 다르면 오류를 인쇄합니다.

등호를 생략하면 기본값 -gttoggle 사용.

환경 변수 GCC_COMPARE_DEBUG, 정의된 경우 비어 있지 않고 XNUMX이 아닙니다.
암시적으로 활성화 -fcompare-디버그. 면 GCC_COMPARE_DEBUG 문자열로 정의
대시로 시작하여 다음 용도로 사용됩니다. 선택하지 않는, 그렇지 않으면 기본값 -gttoggle is
익숙한.

-fcompare-디버그=, 등호는 있지만 제외 선택하지 않는는 다음과 같습니다.
-fno-비교-디버그, 최종 표현의 덤핑을 비활성화하고
두 번째 컴파일, 심지어 방지 GCC_COMPARE_DEBUG 부터.

기간 동안 전체 적용 범위를 확인하려면 -fcompare-디버그 테스트, 설정 GCC_COMPARE_DEBUG to say
-fcompare-debug-재정의되지 않음, GCC는 어떤 경우에도 유효하지 않은 옵션으로 거부합니다.
실제 컴파일(전처리, 어셈블리 또는 연결이 아닌). 그냥 얻으려면
경고, 설정 GCC_COMPARE_DEBUG-w%n-f비교 디버그 지원 재정의 할 것이다.

-f비교-디버그-초
이 옵션은 요청된 두 번째 컴파일에 대해 암시적으로 컴파일러에 전달됩니다.
by -fcompare-디버그, 경고를 무음으로 설정하고 다른 옵션을 생략하는 옵션과 함께
파일 또는 표준 출력에 대한 부작용 컴파일러 출력이 발생합니다.
덤프 파일 및 보존된 임시 파일은 ".gk"를 포함하도록 이름이 변경됩니다.
덮어쓰지 않도록 두 번째 컴파일 중 추가 확장
첫 번째에 의해 생성됩니다.

이 옵션이 컴파일러 드라이버에 전달되면 먼저 컴파일
컴파일러를 적절하게 디버깅하는 것 외에는 거의 유용하지 않습니다.

-felimate-dwarf2-dups
각각에 대한 중복 정보를 제거하여 DWARF2 디버깅 정보를 압축합니다.
상징. 이 옵션은 DWARF2 디버깅 정보를 생성할 때만 의미가 있습니다.
-gdwarf-2.

-femit-struct-debug-baseonly
기본 이름이
컴파일 소스 파일은 구조체가 정의된 파일의 기본 이름과 일치합니다.

이 옵션은 디버깅 정보의 크기를 상당히 줄여주지만,
디버거에 대한 유형 정보의 상당한 잠재적 손실. 보다
-femit-struct-debug-reduced 덜 공격적인 옵션을 위해. 보다
-femit-struct-debug-detailed 더 자세한 제어를 위해.

이 옵션은 DWARF 2에서만 작동합니다.

-femit-struct-debug-reduced
기본 이름이
컴파일 소스 파일은 유형이 정의된 파일의 기본 이름과 일치합니다.
구조체가 템플릿이거나 시스템 헤더에 정의되어 있지 않는 한.

이 옵션은 디버깅 정보의 크기를 크게 줄입니다.
디버거에 대한 유형 정보의 잠재적 손실. 보다 -femit-struct-debug-baseonly
더 공격적인 옵션을 위해. 보다 -femit-struct-debug-detailed 더 자세한
제어 할 수 있습니다.

이 옵션은 DWARF 2에서만 작동합니다.

-femit-struct-debug-detailed[=사양 목록]
컴파일러가 디버그 정보를 생성할 구조체 유형을 지정하십시오.
의도는 서로 다른 개체 간의 중복 구조 디버그 정보를 줄이는 것입니다.
동일한 프로그램 내의 파일.

이 옵션은 -femit-struct-debug-reduced
-femit-struct-debug-baseonly, 대부분의 요구 사항을 충족합니다.

사양에는 구문이 있습니다[국장 :|인:][주문:|장르 :](어떤|sys|기지|없음)

선택적인 첫 번째 단어는 직접 사용되는 구조체로 사양을 제한합니다.
(국장 :) 또는 간접적으로 사용(인:). 구조체 유형은 유형일 때 직접 사용됩니다.
변수, 멤버. 간접 사용은 구조체에 대한 포인터를 통해 발생합니다. 그건,
불완전한 구조체의 사용이 합법적인 경우 사용은 간접적입니다. 예는
구조체 직접; 구조체 * 간접;.

선택적 두 번째 단어는 사양을 일반 구조체(주문:) 또는
일반 구조체(장르 :). 일반 구조체는 설명하기가 약간 복잡합니다. C++의 경우,
이들은 템플릿 클래스 또는 템플릿이 아닌 클래스의 비명시적 전문화입니다.
위의 범위 내에서. 다른 프로그래밍 언어에는 제네릭이 있지만
-femit-struct-debug-detailed 아직 구현하지 않았습니다.

세 번째 단어는 컴파일러가 해당 구조체에 대한 소스 파일을 지정합니다.
디버그 정보를 내보냅니다. 가치 없음어떤 정상적인 의미를 가지고 있습니다. NS
가치 기지 형식 선언이 있는 파일 이름의 기준을 의미합니다.
표시는 기본 컴파일 파일 이름의 기준과 일치해야 합니다. 실제로,
이것은 다음에 선언된 유형을 의미합니다. foo.c푸.h 디버그 정보가 있지만
다른 헤더에 선언된 유형은 그렇지 않습니다. 가치 sys 만족하는 유형을 의미합니다.
기지 또는 시스템 또는 컴파일러 헤더에서 선언됩니다.

응용 프로그램에 가장 적합한 설정을 결정하기 위해 실험해야 할 수도 있습니다.

디폴트는 -femit-struct-debug-detailed=모두.

이 옵션은 DWARF 2에서만 작동합니다.

-fno-병합-디버그-문자열
디버깅 정보의 문자열을 병합하지 않도록 링커에 지시하십시오.
다른 개체 파일에서 동일합니다. 병합은 모든 어셈블러에서 지원되지 않거나
링커. 병합하면 출력 파일의 디버그 정보 크기가 줄어듭니다.
링크 처리 시간 증가 비용. 병합은 기본적으로 활성화되어 있습니다.

-fdebug-접두사-맵=낡은=
디렉토리에서 파일을 컴파일할 때 낡은, 다음과 같이 설명하는 디버깅 정보를 기록합니다.
in 대신.

-fno-dwarf2-cfi-asm
DWARF 2 해제 정보를 사용하는 대신 컴파일러에서 생성한 ".eh_frame" 섹션으로 내보냅니다.
GAS ".cfi_*" 지시문.

-p 분석 프로그램에 적합한 프로파일 정보를 작성하기 위한 추가 코드 생성
교수. 데이터를 원하는 소스 파일을 컴파일할 때 이 옵션을 사용해야 합니다.
링크할 때도 사용해야 합니다.

-페이지 분석 프로그램에 적합한 프로파일 정보를 작성하기 위한 추가 코드 생성
gprof. 데이터를 원하는 소스 파일을 컴파일할 때 이 옵션을 사용해야 합니다.
링크할 때도 사용해야 합니다.

-Q 컴파일러가 컴파일될 때 각 함수 이름을 출력하고 일부를 출력하도록 합니다.
완료 시 각 패스에 대한 통계입니다.

-ftime-보고
컴파일러가 각 패스에서 소비한 시간에 대한 통계를 인쇄하도록 합니다.
마무리합니다.

-fmem 보고서
컴파일러가 영구 메모리 할당에 대한 일부 통계를 인쇄하도록 합니다.
마무리합니다.

-fpre-ipa-mem-보고서
-fpost-ipa-mem-보고서
컴파일러가 영구 메모리 할당에 대한 일부 통계를 인쇄하거나
절차 간 최적화 후.

-fstack-사용
컴파일러가 함수별로 프로그램에 대한 스택 사용 정보를 출력하도록 합니다.
기초. 덤프의 파일 이름은 다음을 추가하여 만듭니다. .su ~로 보조 이름. 보조 이름 is
명시적으로 지정되고 파일이 아닌 경우 출력 파일의 이름에서 생성됩니다.
실행 가능하고 그렇지 않으면 소스 파일의 기본 이름입니다. 항목으로 구성됩니다.
세 필드:

· 함수의 이름.

· 바이트 수.

· 하나 이상의 한정자: "정적", "동적", "제한적".

한정자 "정적"은 함수가 스택을 정적으로 조작한다는 것을 의미합니다.
고정된 수의 바이트가 함수 진입 시 프레임에 할당되고 해제됩니다.
기능 종료; 그렇지 않으면 함수에서 스택 조정이 수행되지 않습니다. 두번째
필드는 이 고정된 바이트 수입니다.

한정자 "동적"은 함수가 스택을 동적으로 조작함을 의미합니다.
위에서 설명한 정적 할당 외에도 스택 조정은
예를 들어 함수 호출 주위에 인수를 푸시/팝하기 위해 함수의 본문을 사용합니다. 만약
한정자 "bounded"도 있는 경우 이러한 조정의 양은 다음으로 제한됩니다.
컴파일 시간이고 두 번째 필드는 사용된 총 스택 양의 상한입니다.
기능으로. 존재하지 않는 경우 이러한 조정의 양은 제한되지 않습니다.
컴파일 타임에 두 번째 필드는 제한된 부분만 나타냅니다.

-fprofile-호
프로그램이 흐를 수 있도록 코드 추가 계측됩니다. 프로그램을 실행하는 동안
각 분기 및 호출이 실행된 횟수와 수행된 횟수를 기록합니다.
또는 반환합니다. 컴파일된 프로그램이 종료되면 이 데이터를 라는 파일에 저장합니다.
auxname.gcda 각 소스 파일에 대해 데이터는 프로필 지시에 사용될 수 있습니다.
최적화(-f분기 확률) 또는 테스트 커버리지 분석용
(-최후 범위). 각 오브젝트 파일의 보조 이름 의 이름에서 생성됩니다.
명시적으로 지정되고 최종 실행 파일이 아닌 경우 출력 파일, 그렇지 않으면
소스 파일의 기본 이름입니다. 두 경우 모두 접미사가 제거됩니다(예:
foo.gcda 입력 파일용 디렉토리/foo.c디렉토리/foo.gcda 다음과 같이 지정된 출력 파일의 경우 -o
dir/foo.o).

--적용 범위
이 옵션은 커버리지 분석을 위해 계측된 코드를 컴파일하고 링크하는 데 사용됩니다. NS
옵션은 동의어입니다. -fprofile-호 -최후 범위 (컴파일할 때) 그리고 -lgcov
(링크할 때). 자세한 내용은 해당 옵션에 대한 설명서를 참조하십시오.

· 소스 파일을 다음으로 컴파일 -fprofile-호 플러스 최적화 및 코드 생성
옵션. 테스트 커버리지 분석을 위해 추가적인 -최후 범위 옵션을 선택합니다.
프로그램의 모든 소스 파일을 프로파일링할 필요는 없습니다.

· 개체 파일을 다음과 연결하십시오. -lgcov or -fprofile-호 (후자는 의미한다.
이전의).

· 대표적인 워크로드에서 프로그램을 실행하여 아크 프로파일 생성
정보. 이것은 여러 번 반복될 수 있습니다. 동시에 실행할 수 있습니다
프로그램의 인스턴스와 파일 시스템이 잠금을 지원하는 경우
데이터 파일이 올바르게 업데이트됩니다. 또한 "포크" 호출이 감지되고
올바르게 처리됩니다(이중 계산은 발생하지 않음).

· 프로필 지향 최적화의 경우 동일한 파일로 소스 파일을 다시 컴파일합니다.
최적화 및 코드 생성 옵션 플러스 -f분기 확률.

· 테스트 커버리지 분석을 위해 사용 gcov 사람이 읽을 수 있는 정보를 생성하기 위해
전에, .gcno.gcda 파일. 참조 gcov 추가 문서
정보.

-fprofile-호, 프로그램의 각 기능에 대해 GCC는 프로그램 흐름을 만듭니다.
그래프에 대한 스패닝 트리를 찾습니다. 에 없는 호만
스패닝 트리를 계측해야 합니다. 컴파일러는
이 호가 실행되는 횟수입니다. 호가 유일한 출구 또는 유일한 입구일 때
블록, 계측 코드를 블록에 추가할 수 있습니다. 그렇지 않으면 새로운 기본
계측 코드를 보관하려면 블록을 생성해야 합니다.

-최후 범위
메모 파일을 생성하십시오. gcov 코드 적용 유틸리티는 프로그램을 표시하는 데 사용할 수 있습니다.
적용 범위. 각 소스 파일의 메모 파일은 auxname.gcno. 자세한 내용은
-fprofile-호 에 대한 설명은 위의 옵션 보조 이름 및 방법에 대한 지침
테스트 커버리지 데이터를 생성합니다. 커버리지 데이터는 소스 파일과 더 가깝게 일치하며,
최적화하지 않으면.

-fdbg-cnt-목록
모든 디버그 카운터의 이름과 카운터 상한을 인쇄합니다.

-fdbg-cnt=반대 가치 목록
내부 디버그 카운터 상한을 설정합니다. 반대 가치 목록 쉼표로 구분된
목록 name:가치 각 디버그 카운터의 상한을 설정하는 쌍 name
가치. 모든 디버그 카운터는 초기 상한을 가집니다. UINT_MAX따라서, DBG_CNT()
이 옵션으로 상한을 설정하지 않는 한 항상 true를 반환합니다. 예를 들어
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce)는 처음 10개에 대해서만 true를 반환합니다.
호출

-합리적인-종류-패스
-fdisable-종류-패스=범위 목록
이것은 명시적으로 비활성화/활성화하는 데 사용되는 디버깅 옵션 세트입니다.
최적화 통과. 컴파일러 사용자의 경우 패스 활성화/비활성화를 위한 일반 옵션
대신 사용해야합니다.

*<-fdisable-ipa-패스>
ipa 패스 비활성화 패스. 패스 는 패스 이름입니다. 동일한 패스가 정적으로
컴파일러에서 여러 번 호출되면 패스 이름에
1부터 시작하는 일련번호.

*<-fdisable-rtl-패스>
*<-fdisable-rtl-패스=범위 목록>
rtl 패스 비활성화 패스. 패스 는 패스 이름입니다. 동일한 패스가 정적으로
컴파일러에서 여러 번 호출되면 패스 이름에
1부터 시작하는 일련번호. 범위 목록 는 쉼표로 구분된 목록입니다.
함수 범위 또는 어셈블러 이름. 각 범위는 a로 구분된 숫자 쌍입니다.
콜론. 범위는 양쪽 끝을 모두 포함합니다. 범위가 사소한 경우 숫자
쌍을 단일 숫자로 단순화할 수 있습니다. 함수의 cgraph 노드가 UID is
지정된 범위 중 하나에 해당하는 경우 패스 그것에 대해 비활성화되어 있습니다
함수. 그만큼 UID 덤프 파일의 함수 헤더에 표시되고 패스
옵션을 사용하여 이름을 덤프할 수 있습니다. -fdump-pass.

*<-fdisable-트리-패스>
*<-fdisable-트리-패스=범위 목록>
트리 패스 비활성화 패스. 참조 -fdisable-rtl 옵션 설명을 위해
인수.

*<-fenable-ipa-패스>
ipa 패스 활성화 패스. 패스 는 패스 이름입니다. 동일한 패스가 정적으로
컴파일러에서 여러 번 호출되면 패스 이름에
1부터 시작하는 일련번호.

*<-가능-rtl-패스>
*<-가능-rtl-패스=범위 목록>
rtl 패스 활성화 패스. 참조 -fdisable-rtl 옵션 인수 설명 및
예.

*<-fenable-tree-패스>
*<-fenable-tree-패스=범위 목록>
트리 패스 사용 패스. 참조 -fdisable-rtl 옵션 인수에 대한 설명입니다.

# 모든 기능에 대해 ccp1 비활성화
-fdisable-tree-ccp1
# cgraph 노드 uid가 1인 함수에 대해 완전한 언롤을 비활성화합니다.
-fenable-tree-cunroll=1
# 다음 범위 [2]에서 기능에 대해 gcse1,1를 비활성화합니다.
# [300,400] 및 [400,1000]
# foo 및 foo2 기능에 대해 gcse2 비활성화
-fdisable-rtl-gcse2=푸,푸2
# 초기 인라인 비활성화
-fdisable-tree-einline
# ipa 인라이닝 비활성화
-fdisable-ipa-inline.
# 트리 전체 언롤 활성화
-fenable-트리-펼치기

-d편지
-fdump-rtl-패스
다음에서 지정한 시간에 컴파일하는 동안 디버깅 덤프를 만들라고 말합니다. 편지. 이
컴파일러의 RTL 기반 패스를 디버깅하는 데 사용됩니다. 대부분의 파일 이름
덤프는 패스 번호와 단어를 추가하여 만들어집니다. 덤프 이름
파일은 출력 파일의 디렉토리에 생성됩니다. 패스 번호는
패스가 패스 관리자에 등록될 때 정적으로 계산됩니다. 그래서
번호 매기기는 패스 실행의 동적 순서와 관련이 없습니다. 특히,
플러그인에 의해 설치된 패스는 꽤 실행되더라도 200개 이상의 숫자를 가질 수 있습니다.
이른. 덤프 이름 명시적으로 출력 파일의 이름에서 생성됩니다.
지정되고 실행 파일이 아닙니다. 그렇지 않으면 소스의 기본 이름입니다.
파일. 이러한 스위치는 다음과 같은 경우 다른 효과를 가질 수 있습니다. -E 전처리에 사용됩니다.

디버그 덤프는 다음을 사용하여 활성화할 수 있습니다. -fdump-rtl 스위치 또는 일부 -d 선택권 편지. 이리
에 사용할 수 있는 문자는 패스편지, 그리고 그 의미:

-fdump-rtl-정렬
분기 정렬이 계산된 후 덤프합니다.

-fdump-rtl-asmcons
in/out 제약 조건이 충족되지 않은 rtl 문을 수정한 후 덤프합니다.

-fdump-rtl-auto_inc_dec
auto-inc-dec 검색 후 덤프합니다. 이 패스는 다음과 같은 아키텍처에서만 실행됩니다.
auto inc 또는 auto dec 명령이 있습니다.

-fdump-rtl-장벽
배리어 지침을 정리한 후 덤프하십시오.

-fdump-rtl-bbpart
핫 및 콜드 기본 블록을 분할한 후 덤프합니다.

-fdump-rtl-bbro
블록 재정렬 후 덤프.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1-fdump-rtl-btl2 두 분기 대상 뒤에 덤핑 활성화
로드 최적화를 통과합니다.

-fdump-rtl-바이패스
점프 우회 및 제어 흐름 최적화 후 덤프.

-fdump-rtl-결합
RTL 명령어 조합 통과 후 덤프합니다.

-fdump-rtl-compgotos
계산된 goto를 복제한 후 덤프합니다.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2-fdump-rtl-ce3 세 후 덤핑 활성화
변환이 통과하는 경우.

-fdump-rtl-cprop_hardreg
하드 레지스터 복사 전파 후 덤프.

-fdump-rtl-csa
스택 조정을 결합한 후 덤프합니다.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1-fdump-rtl-cse2 두 개의 공통 하위 후 덤핑을 활성화합니다.
표현 제거를 통과합니다.

-fdump-rtl-dce
독립 실행형 데드 코드 제거를 통과한 후 덤프합니다.

-fdump-rtl-dbr
지연된 분기 스케줄링 후 덤프.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1-fdump-rtl-dce2 두 개의 죽은 저장소 후 덤핑 활성화
제거 통과.

-fdump-rtl-eh
EH 처리 코드 완료 후 덤프합니다.

-fdump-rtl-eh_ranges
EH 처리 범위 영역 변환 후 덤프.

-fdump-rtl-확장
RTL 생성 후 덤프.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1-fdump-rtl-fwprop2 두 앞으로 덤핑 활성화
전파 통과.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1-fdump-rtl-gcse2 전역 공통 후 덤핑 활성화
하위 표현 제거.

-fdump-rtl-init-regs
레지스터 초기화 후 덤프합니다.

-fdump-rtl-초기화
초기 값 세트 계산 후 덤프합니다.

-fdump-rtl-into_cfglayout
cfglayout 모드로 변환한 후 덤프합니다.

-fdump-rtl-ira
레지스터 할당을 반복한 후 덤프합니다.

-fdump-rtl-점프
두 번째 점프 최적화 후 덤프합니다.

-fdump-rtl-loop2
-fdump-rtl-loop2 rtl 루프 최적화가 통과한 후 덤핑을 활성화합니다.

-fdump-rtl-마하
시스템 종속 재구성 단계를 수행한 후 덤프(해당 패스인 경우)
존재합니다.

-fdump-rtl-mode_sw
중복 모드 스위치를 제거한 후 덤프합니다.

-fdump-rtl-rnreg
레지스터 번호 다시 매기기 후 덤프.

-fdump-rtl-outof_cfglayout
cfglayout 모드에서 변환한 후 덤프합니다.

-fdump-rtl-peephole2
엿보는 구멍 통과 후 덤프.

-fdump-rtl-postreload
다시 로드 후 최적화 후 덤프합니다.

-fdump-rtl-pro_and_epilogue
함수 프롤로그 및 에필로그를 생성한 후 덤프합니다.

-fdump-rtl-regmove
레지스터 이동 통과 후 덤프.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1-fdump-rtl-sched2 기본 블록 이후에 덤핑 활성화
일정 패스.

-fdump-rtl-참조
부호 확장 제거 후 덤프.

-fdump-rtl-seqabstr
공통 시퀀스 검색 후 덤프합니다.

-fdump-rtl-단축
가지를 줄인 후 덤프하십시오.

-fdump-rtl-형제
형제 호출 최적화 후 덤프.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4
-fdump-rtl-split5 XNUMX 라운드의 명령어 분할 후 덤핑을 활성화합니다.

-fdump-rtl-sms
모듈로 스케줄링 후 덤프. 이 패스는 일부 아키텍처에서만 실행됩니다.

-fdump-rtl-스택
GCC의 "플랫 레지스터 파일" 레지스터에서 x87 레지스터로 변환 후 덤프
스택형 레지스터 이 패스는 x86 변형에서만 실행됩니다.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1-fdump-rtl-subreg2 두 하위 등록 뒤에 덤핑 활성화
확장 패스.

-fdump-rtl-공유 해제
모든 rtl이 공유 해제된 후 덤프합니다.

-fdump-rtl-vartrack
변수 추적 후 덤프.

-fdump-rtl-vregs
가상 레지스터를 하드 레지스터로 변환한 후 덤프합니다.

-fdump-rtl-웹
라이브 범위 분할 후 덤프.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
이러한 덤프는 정의되지만 항상 빈 파일을 생성합니다.

-in
-fdump-rtl-모두
위에 나열된 모든 덤프를 생성합니다.

-dA 기타 디버깅 정보로 어셈블러 출력에 주석을 답니다.

-dD 전처리가 끝날 때 일반적인 매크로 정의 외에 모든 매크로 정의를 덤프합니다.
출력.

-dH 오류가 발생할 때마다 코어 덤프를 생성합니다.

-dp 어셈블러 출력에 어떤 패턴과
대안이 사용되었습니다. 각 명령의 길이도 인쇄됩니다.

-dP 각 명령어 앞에 주석으로 어셈블러 출력의 RTL을 덤프합니다. 또한
켜다 -dp 주석.

-dv 표시된 다른 덤프 파일 각각에 대해(-fdump-rtl-패스), 덤프
VCG로 보기에 적합한 제어 흐름 그래프 표현
파일.패스.vcg.

-dx 컴파일하는 대신 함수에 대한 RTL을 생성하기만 하면 됩니다. 일반적으로 함께 사용
-fdump-rtl-확장.

-fdump-noaddr
디버깅 덤프를 수행할 때 주소 출력을 억제합니다. 이를 통해 보다 실현 가능한
다른 컴파일러 바이너리를 사용하여 컴파일러 호출을 위한 디버깅 덤프에 diff 사용
및/또는 다른 텍스트/bss/데이터/힙/스택/dso 시작 위치.

-fdump-번호 없음
디버깅 덤프를 수행할 때 명령 번호와 주소 출력을 억제합니다. 이것
컴파일러 호출에 대한 디버깅 덤프에서 diff를 사용하는 것이 더 적합합니다.
특히 유무에 관계없이 다양한 옵션 -g.

-fdump-unnumbered-링크
디버깅 덤프를 수행할 때(참조 -d 위의 옵션)에 대한 명령 번호를 억제합니다.
시퀀스의 이전 및 다음 명령에 대한 링크입니다.

-fdump-번역-단위 (C++만 해당)
-fdump-번역-단위-옵션 (C++만 해당)
전체 번역 단위에 대한 트리 구조 표현을 파일로 덤프합니다.
파일 이름은 다음을 추가하여 만들어집니다. .tu 소스 파일 이름으로, 파일은
출력 파일과 동일한 디렉토리에 생성됩니다. 만약 -옵션 형태가 사용되며,
옵션 에 대해 설명된 대로 덤프의 세부 정보를 제어합니다. -fdump-트리 옵션을 제공합니다.

-fdump-클래스-계층 구조 (C++만 해당)
-fdump-클래스-계층 구조-옵션 (C++만 해당)
각 클래스의 계층 구조 및 가상 기능 테이블 레이아웃의 표현을 다음으로 덤프합니다.
파일. 파일 이름은 다음을 추가하여 만들어집니다. .수업 소스 파일 이름 및 파일
출력 파일과 동일한 디렉토리에 생성됩니다. 만약 -옵션 형태가 사용되며,
옵션 에 대해 설명된 대로 덤프의 세부 정보를 제어합니다. -fdump-트리 옵션을 제공합니다.

-fdump-ipa-스위치
절차간 분석 언어 트리의 다양한 단계에서 덤핑을 제어하여
파일. 파일 이름은 소스에 스위치 특정 접미사를 추가하여 생성됩니다.
파일 이름을 입력하고 파일은 출력 파일과 동일한 디렉토리에 생성됩니다. NS
다음 덤프가 가능합니다.

모든 모든 절차 간 분석 덤프를 활성화합니다.

c그래프
호출 그래프 최적화, 사용하지 않는 함수 제거 및
인라인 결정.

인라인
함수 인라이닝 후 덤프.

-fdump-pass
현재 설정 및 해제된 최적화 패스 목록을 덤프합니다.
명령줄 옵션.

-fdump-통계-선택권
별도의 파일에서 통과 통계 덤핑을 활성화하고 제어합니다. 파일 이름은
로 끝나는 접미사를 추가하여 생성 .통계 소스 파일 이름에
파일은 출력 파일과 동일한 디렉토리에 생성됩니다. 만약 -선택권 형태는
익숙한, -통계 카운터가 전체 컴파일 단위에 대해 합산되도록 합니다.
-세부 패스가 생성될 때 모든 이벤트를 덤프합니다. 없는 기본값
옵션은 컴파일된 각 함수에 대한 카운터를 합산하는 것입니다.

-fdump-트리-스위치
-fdump-트리-스위치-옵션
중간 언어 트리를 처리하는 다양한 단계에서 덤핑을 제어하여
파일. 파일 이름은 스위치 특정 접미사를 추가하여 생성됩니다.
소스 파일 이름이고 파일은 출력 파일과 동일한 디렉토리에 생성됩니다.
경우 -옵션 형태가 사용되며, 옵션 목록입니다 - 제어하는 분리된 옵션
덤프의 세부 사항. 모든 옵션이 모든 덤프에 적용되는 것은 아닙니다. 그것들
의미가 없는 것은 무시됩니다. 다음 옵션을 사용할 수 있습니다.

주소
각 노드의 주소를 출력하십시오. 일반적으로 이것은 변경되기 때문에 의미가 없습니다.
환경 및 소스 파일에 따라. 주요 용도는 묶는 것입니다.
디버그 환경이 있는 덤프 파일.

이름
지정된 Decl에 대해 "DECL_ASSEMBLER_NAME"이 설정된 경우 덤프에서 사용하십시오.
"DECL_NAME" 대신. 주요 용도는
어셈블리 파일의 맹글링된 이름.

날씬한
단지 다음과 같은 이유로 함수의 범위나 본문의 구성원을 덤핑하는 것을 금지합니다.
범위에 도달했습니다. 직접 접근할 수 있는 경우에만 이러한 항목을 버리십시오.
다른 길. 예쁘게 인쇄된 나무를 덤핑할 때 이 옵션은 덤핑을 금지합니다.
제어 구조의 본체.

살갗이 벗어 진 나무의 원시 표현을 인쇄합니다. 기본적으로 나무는 예쁘게 인쇄됩니다.
C와 같은 표현.

세부설명
더 자세한 덤프를 활성화합니다(모든 덤프 옵션에서 적용되지 않음).

통계
패스에 대한 다양한 통계 덤핑 활성화(모든 덤프에서 적용되지 않음
선택권).

블록
기본 블록 경계 표시를 활성화합니다(원시 덤프에서는 비활성화됨).


모든 명령문에 대해 가상 피연산자를 표시하도록 설정합니다.

리노
명령문의 줄 번호 표시를 활성화합니다.

UID 각 변수에 대해 고유 ID("DECL_UID") 표시를 활성화합니다.

말 수가 많은
각 문에 대한 트리 덤프 표시를 활성화합니다.

eh 각 문을 포함하는 EH 지역 번호를 표시하도록 설정합니다.

scev
스칼라 진화 분석 세부 정보 표시를 활성화합니다.

모든 다음을 제외한 모든 옵션을 켭니다. 살갗이 벗어 진, 날씬한, 말 수가 많은리노.

다음 트리 덤프가 가능합니다.

실물
트리 기반 최적화 전에 덤프, 파일.원본.

최적화
모든 트리 기반 최적화 후 덤프, 파일 최적화.

김프
gimplification이 파일로 전달되기 전후에 각 함수를 덤프합니다. 파일
이름은 추가하여 만들어집니다. .gimple 소스 파일 이름으로.

cfg 각 함수의 제어 흐름 그래프를 파일로 덤프합니다. 파일 이름은
첨부 .cfg 소스 파일 이름으로.

가상현실 각 기능의 제어 흐름 그래프를 VCG 형식의 파일로 덤프합니다. 파일
이름은 추가하여 만들어집니다. .vcg 소스 파일 이름으로. 파일의 경우
하나 이상의 함수를 포함하는 경우 생성된 파일은 다음에서 직접 사용할 수 없습니다.
VCG. 각 함수의 그래프를 잘라내어 별도의 그래프에 붙여넣어야 합니다.
먼저 파일.

ch 루프 헤더를 복사한 후 각 함수를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다.
.ch 소스 파일 이름으로.

SSA 파일에 SSA 관련 정보를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다. .ssa
소스 파일 이름으로.

별명
각 함수에 대한 별칭 정보를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다.
.별명 소스 파일 이름으로.

ccp CCP 후에 각 함수를 덤프하십시오. 파일 이름은 다음을 추가하여 만들어집니다. .ccp ~로
소스 파일 이름.

storeccp
STORE-CCP 후에 각 함수를 덤프하십시오. 파일 이름은 다음을 추가하여 만들어집니다. .storeccp
소스 파일 이름으로.

사전 부분 중복 제거 후 트리를 덤프합니다. 파일 이름은
첨부 .pre 소스 파일 이름으로.

fre 완전한 중복 제거 후 나무를 버립니다. 파일 이름은 다음을 추가하여 만들어집니다.
.fre 소스 파일 이름으로.

카피프롭
복사 전파 후 트리를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다. .copyprop
소스 파일 이름으로.

store_copyprop
저장소 복사 전파 후 트리를 덤프합니다. 파일 이름은 다음을 추가하여 만들어집니다.
.store_copyprop 소스 파일 이름으로.

디시 데드 코드 제거 후 각 함수를 덤프합니다. 파일 이름은
첨부 .dce 소스 파일 이름으로.

갯벌
머드플랩 계측을 추가한 후 각 함수를 덤프합니다. 파일 이름은
첨부 .머드플랩 소스 파일 이름으로.

미스터 / Ms 집계의 스칼라 교체를 수행한 후 각 함수를 덤프합니다. 파일
이름은 추가하여 만들어집니다. .sra 소스 파일 이름으로.

싱크대
코드 싱킹을 수행한 후 각 함수를 덤프합니다. 파일 이름은
첨부 .싱크대 소스 파일 이름으로.

DOM 도미네이터 트리 최적화를 적용한 후 각 함수를 덤프합니다. 파일 이름은
추가하여 만든 .돔 소스 파일 이름으로.

말하다 데드 스토어 제거를 적용한 후 각 함수를 덤프합니다. 파일명이 만들어진다
추가하여 .dse 소스 파일 이름으로.

피옵트
PHI 노드를 직선 코드로 최적화한 후 각 함수를 덤프합니다. 파일
이름은 추가하여 만들어집니다. .phiopt 소스 파일 이름으로.

전진
단일 사용 변수를 전달한 후 각 함수를 덤프합니다. 파일 이름
추가하여 만들어집니다 .forwprop 소스 파일 이름으로.

카피 이름 바꾸기
복사본 이름 바꾸기 최적화를 적용한 후 각 함수를 덤프합니다. 파일 이름은
추가하여 만든 .카피 이름 바꾸기 소스 파일 이름으로.

nrv 제네릭에 명명된 반환 값 최적화를 적용한 후 각 함수 덤프
나무. 파일 이름은 다음을 추가하여 만들어집니다. .nrv 소스 파일 이름으로.

벡터
루프의 벡터화를 적용한 후 각 함수를 덤프합니다. 파일명이 만들어진다
추가하여 .벡트 소스 파일 이름으로.

슬랩 기본 블록의 벡터화를 적용한 후 각 함수를 덤프합니다. 파일 이름은
추가하여 만든 .SLP 소스 파일 이름으로.

VRP 값 범위 전파(VRP) 후 각 함수를 덤프합니다. 파일 이름은
첨부 .vrp 소스 파일 이름으로.

모든 이 옵션에 제공된 플래그로 사용 가능한 모든 트리 덤프를 활성화합니다.

-ftree-벡터화기-상세=n
이 옵션은 벡터라이저가 인쇄하는 디버깅 출력의 양을 제어합니다. 이것
정보는 표준 오류에 기록됩니다. -fdump-트리-모두 or -fdump-트리-벡터
이 경우 일반 덤프 목록 파일로 출력됩니다. .벡트. 용
n=0 진단 정보가 보고되지 않습니다. 만약에 n=1 벡터라이저는 각 루프를 보고합니다.
벡터화 된 루프의 총 수와 벡터화 된 루프의 총 수. 만약에 n=2
vectorizer는 첫 번째 분석 단계를 통과한 벡터화되지 않은 루프도 보고합니다.
(vect_analyze_loop_form) - 즉, 셀 수 있는, 가장 안쪽에 있는, 단일 BB, 단일 입력/종료
루프. 이것은 동일한 상세 수준입니다. -fdump-트리-vect-통계 사용. 더 높은
자세한 표시 수준은 보고된 각 루프에 대해 더 많은 정보가 덤프되거나 동일함을 의미합니다.
더 많은 루프에 대해 보고된 정보의 양: if n=3, 벡터라이저 비용 모델
정보가 보고됩니다. 만약에 n=4, 정렬 관련 정보가 추가됩니다.
보고서. 만약에 n=5, 데이터 참조 관련 정보(예: 메모리 의존성, 메모리
access-patterns)가 보고서에 추가됩니다. 만약에 n=6, 벡터라이저는 비
첫 번째 분석 단계를 통과하지 못한 벡터화된 가장 안쪽 루프(즉,
셀 수 있거나 복잡한 제어 흐름을 가질 수 있음). 만약에 n=7, 벡터라이저 보고
또한 벡터화되지 않은 중첩 루프. 만약에 n=8, SLP 관련 정보가 추가됩니다.
보고서. 을위한 n=9, 벡터라이저가 분석하는 동안 생성하는 모든 정보
및 변형이 보고됩니다. 이것은 동일한 상세 수준입니다.
-fdump-트리-vect-세부 사항 사용합니다.

-임의의 시드=
이 옵션은 GCC가 난수를 사용할 때 사용하는 시드를 제공합니다.
모든 기호에서 달라야 하는 특정 기호 이름을 생성하는 데 사용됩니다.
컴파일된 파일. 또한 적용 범위 데이터 파일에 고유한 스탬프를 배치하고
그것들을 생성하는 객체 파일. 당신은 사용할 수 있습니다 -임의의 종자 생산 옵션
재현 가능하게 동일한 개체 파일.

XNUMXD덴탈의 컴파일하는 모든 파일에 대해 달라야 합니다.

-fsched-상세=n
명령 스케줄링을 사용하는 대상에서 이 옵션은
스케쥴러가 출력하는 디버깅 출력. 이 정보는 표준 오류에 기록되며,
...을 제외하면 -fdump-rtl-sched1 or -fdump-rtl-sched2 지정된 경우 출력됩니다.
일반적인 덤프 목록 파일에 .sched1 or .sched2 각기. 그러나 n
XNUMX보다 크면 출력은 항상 표준 오류로 인쇄됩니다.

럭셔리 n XNUMX보다 큰, -fsched-verbose 와 같은 정보를 출력
-fdump-rtl-sched1-fdump-rtl-sched2. 용 n XNUMX보다 크면 기본도 출력합니다.
블록 확률, 자세한 준비 목록 정보 및 유닛/숙소 정보. 을위한 n
XNUMX보다 크면 중단 지점의 RTL, 제어 흐름 및 영역 정보가 포함됩니다. 그리고
for n XNUMX개 이상, -fsched-verbose 종속성 정보도 포함됩니다.

- 임시 저장
- 임시 저장 = cwd
일반적인 "임시" 중간 파일을 영구적으로 저장합니다. 현재에 배치
디렉토리를 만들고 소스 파일을 기반으로 이름을 지정합니다. 따라서 컴파일 foo.c-c
- 임시 저장 파일을 생성할 것입니다 푸아이푸.에스, 만큼 잘 푸.오. 이것은
전처리 푸아이 컴파일러가 이제 일반적으로
통합 전처리기.

와 함께 사용시 -x 명령줄 옵션, - 임시 저장 현명하다
확장자가 동일한 입력 소스 파일을 덮어쓰는 것을 방지하기에 충분합니다.
중간 파일. 해당 중간 파일은 이름을 변경하여 얻을 수 있습니다.
사용하기 전에 소스 파일 - 임시 저장.

GCC를 병렬로 호출하는 경우 공유하는 여러 다른 소스 파일을 컴파일합니다.
다른 서브디렉토리의 공통 기본 이름 또는 다음을 위해 컴파일된 동일한 소스 파일
여러 출력 대상이 있는 경우 서로 다른 병렬 컴파일러가
서로 간섭하고 임시 파일을 덮어씁니다. 예를 들어:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

발생할 수 있습니다 푸아이푸.오 두 컴파일러에서 동시에 작성됩니다.

- 임시 저장 = obj
일반적인 "임시" 중간 파일을 영구적으로 저장합니다. 만약 -o 옵션을 사용하고,
임시 파일은 개체 파일을 기반으로 합니다. 만약 -o 옵션을 사용하지 않는 경우
- 임시 저장 = obj 스위치는 다음과 같이 작동합니다. - 임시 저장.

예 :

gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o 디렉토리/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar

만들 것이다 푸아이, 푸.에스, 디렉토리/xbar.i, 디렉토리/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s
dir2/yfoobar.o.

-시각[=파일]
컴파일 순서에서 각 하위 프로세스가 소요한 CPU 시간을 보고합니다. C의 경우
소스 파일, 이것은 적절한 컴파일러 및 어셈블러입니다(링크가
완료).

출력 파일을 지정하지 않으면 출력은 다음과 같습니다.

# CC1 0.12 0.01
# 0.00 0.01

각 줄의 첫 번째 숫자는 "사용자 시간", 즉 실행에 소요된 시간입니다.
프로그램 자체. 두 번째 숫자는 "시스템 시간"으로 운영 실행에 소요된 시간입니다.
프로그램 대신 시스템 루틴. 두 숫자 모두 초 단위입니다.

출력 파일의 지정으로 출력은 명명된 파일에 추가되고,
그리고 다음과 같이 보입니다 :

0.12 0.01cc1
0.00 0.01 그대로

"사용자 시간"과 "시스템 시간"은 프로그램 이름 앞에 이동하고
프로그램에 전달된 옵션이 표시되므로 나중에 파일이 무엇인지 알 수 있습니다.
컴파일 중이며 어떤 옵션을 사용합니다.

-fvar 추적
변수 추적 패스를 실행합니다. 각 위치에서 변수가 저장된 위치를 계산합니다.
코드에서. 그러면 더 나은 디버깅 정보가 생성됩니다(디버깅 정보가
형식이 이 정보를 지원함).

최적화(- 오스, -O, -O2, ...),
디버깅 정보(-g) 디버그 정보 형식이 이를 지원합니다.

-fvar-추적 할당
컴파일 초기에 사용자 변수에 대한 주석을 달고 수행을 시도합니다.
시도에서 끝까지 컴파일 전체에 걸쳐 주석
최적화하는 동안 디버그 정보를 개선합니다. 사용 -gdwarf-4 함께 권장됩니다
그것에.

var-tracking이 비활성화된 경우에도 활성화될 수 있습니다. 이 경우 주석은
생성 및 유지되지만 결국 폐기됩니다.

-fvar-추적-할당-전환
전환 -fvar-추적 할당같은 방식으로 -gttoggle 토글하다 -g.

-인쇄 파일 이름=도서관
라이브러리 파일의 전체 절대 이름 인쇄 도서관 그 때 사용됩니다
연결 --- 다른 작업을 수행하지 마십시오. 이 옵션을 사용하면 GCC가 컴파일하거나 링크하지 않습니다.
아무것; 그것은 단지 파일 이름을 인쇄합니다.

- 인쇄 다중 디렉토리
다른 스위치에서 선택한 multilib에 해당하는 디렉토리 이름을 인쇄합니다.
명령줄에 있습니다. 이 디렉토리는 다음 위치에 있어야 합니다. GCC_EXEC_PREFIX.

-print-multi-lib
multilib 디렉토리 이름에서 이를 활성화하는 컴파일러 스위치로의 매핑을 인쇄합니다.
디렉토리 이름은 다음으로 스위치와 구분됩니다. ;, 각 스위치는
@ 대신에 -, 여러 스위치 사이에 공백이 없습니다. 이것은
쉘 처리를 용이하게 합니다.

-print-multi-os-디렉토리
일부를 기준으로 선택한 multilib에 대한 OS 라이브러리 경로를 인쇄합니다. lib
하위 디렉토리. OS 라이브러리가 lib 하위 디렉토리 및 다중 라이브러리 없음
이것은 일반적으로 그냥 ., OS 라이브러리가 에 있는 경우 libsuffix 형제
예를 들어 인쇄하는 디렉토리 ../lib64, ../ lib or ../lib32, 또는 OS 라이브러리가
에 존재 라이브러리/하위 디렉토리 예를 들어 인쇄하는 하위 디렉토리 amd64, 스파크v9 or ev6.

-인쇄 멀티아크
일부를 기준으로 선택한 멀티아크의 OS 라이브러리 경로를 인쇄합니다. lib
하위 디렉토리.

-인쇄 프로그램 이름=프로그램
처럼 -인쇄 파일 이름, 하지만 다음과 같은 프로그램을 검색합니다. CPP.

-print-libgcc-파일 이름
과 동일 -인쇄 파일 이름=libgcc.a.

사용할 때 유용합니다. -nostdlib or -nodefaultlibs 하지만 당신은 연결하고 싶어
libgcc.a. 넌 할 수있어

gcc -nostdlib ... `gcc -print-libgcc-파일 이름`

-인쇄-검색-디렉토리
구성된 설치 디렉토리의 이름과 프로그램 목록을 인쇄하고
라이브러리 디렉토리 GCC 검색을 하고 다른 작업은 하지 않습니다.

이것은 다음과 같은 경우에 유용합니다. GCC 오류 메시지를 인쇄합니다 설치 문제, 임원
cpp0: 아니 이러한 파일 or 예배 규칙서. 이 문제를 해결하려면 다음 중 하나를 입력해야 합니다. cpp0 그리고
다른 컴파일러 구성 요소 GCC 찾을 것으로 예상하거나 설정할 수 있습니다.
환경 변수 GCC_EXEC_PREFIX 설치한 디렉토리로 이동합니다. 하지마
후행을 잊어 /.

-인쇄-sysroot
컴파일하는 동안 사용할 대상 sysroot 디렉터리를 인쇄합니다. 이것이
구성 시 또는 다음을 사용하여 지정된 대상 sysroot --sysroot 선택권,
컴파일 옵션에 따라 추가 접미사가 붙을 수 있습니다. 대상이 없는 경우
sysroot가 지정되면 옵션은 아무 것도 인쇄하지 않습니다.

-인쇄-sysroot-헤더-접미사
헤더를 검색할 때 대상 sysroot에 추가된 접미사를 인쇄하거나
컴파일러가 이러한 접미사로 구성되지 않은 경우 오류가 발생하고 아무 작업도 수행하지 않습니다.
그밖에.

- 덤프 머신
컴파일러의 대상 머신을 인쇄합니다(예: i686-pc-리눅스-gnu) ---하지 마십시오
다른 것.

-덤프 버전
컴파일러 버전을 인쇄합니다(예: 3.0) --- 그리고 다른 작업을 수행하지 마십시오.

-덤프 사양
컴파일러의 내장 사양을 인쇄하고 다른 작업은 하지 마십시오. (이것은 다음과 같은 경우에 사용됩니다.
GCC 자체가 구축 중입니다.)

-feliminate-미사용-디버그 유형
일반적으로 DWARF2 출력을 생성할 때 GCC는 모든
실제인지 여부에 관계없이 컴파일 단위에서 선언된 유형
해당 컴파일 단위에서 사용됩니다. 때때로 이것은 디버거에서 다음과 같이 유용합니다.
프로그램에서 실제로 사용되지 않는 유형으로 값을 캐스트하려고 합니다(그러나
선언). 그러나 더 자주 이로 인해 상당한 양의 공간이 낭비됩니다.
이 옵션을 사용하면 GCC는 다음과 같은 유형에 대한 디버그 기호 출력을 생성하지 않습니다.
컴파일되는 소스 파일에는 어디에도 사용되지 않습니다.

옵션 Control 최적화
이러한 옵션은 다양한 종류의 최적화를 제어합니다.

최적화 옵션이 없으면 컴파일러의 목표는 컴파일 비용을 줄이는 것입니다.
디버깅을 통해 예상한 결과를 얻을 수 있습니다. 명령문은 독립적입니다.
명령문 사이에 중단점으로 프로그램을 중지한 다음 새 값을 할당할 수 있습니다.
임의의 변수를 사용하거나 프로그램 카운터를 함수의 다른 명령문으로 변경하고
소스 코드에서 기대하는 결과와 정확히 일치합니다.

최적화 플래그를 켜면 컴파일러가 성능 및/또는
컴파일 시간과 디버그 기능을 희생하는 코드 크기
프로그램)

컴파일러는 프로그램에 대한 지식을 기반으로 최적화를 수행합니다.
한 번에 여러 파일을 단일 출력 파일 모드로 컴파일하면 컴파일러에서 다음을 사용할 수 있습니다.
각 파일을 컴파일할 때 모든 파일에서 얻은 정보.

모든 최적화가 플래그에 의해 직접 제어되는 것은 아닙니다. 다음이 있는 최적화만
플래그는 이 섹션에 나열됩니다.

대부분의 최적화는 다음과 같은 경우에만 활성화됩니다. -O 레벨은 명령줄에서 설정됩니다. 그렇지 않으면
개별 최적화 플래그가 지정된 경우에도 비활성화됩니다.

대상 및 GCC 구성 방법에 따라 약간 다른 집합
최적화는 각각에서 활성화될 수 있습니다 -O 여기에 나열된 것보다 수준이 높습니다. GCC를 호출할 수 있습니다.
-Q --help=최적화기 활성화된 정확한 최적화 세트를 찾으려면
각 수준.

-O
-O1 최적화 컴파일을 최적화하는 데 시간과 메모리가 더 많이 소요됩니다.
큰 기능.

-O, 컴파일러는 수행하지 않고 코드 크기와 실행 시간을 줄이려고 합니다.
컴파일 시간이 많이 걸리는 최적화.

-O 다음 최적화 플래그를 켭니다.

-fauto-inc-dec -f비교-제거 -fcprop 레지스터 -fdce -fdefer-팝 -fdelayed-분기
-fdse -fguess-분기 확률 -fi-변환2 -fif 변환 -fipa-순수-const
-fipa 프로필 -fipa-참조 -fmerge-상수 -fsplit-와이드 유형 -ftree-bit-ccp
-ftree-내장 호출-dce -fttree-ccp -fttree-ch -ftree-copy이름 바꾸기 -fttree-dce
-ftree-지배자-opts -fttree-dse -fttree-forwprop -fttree-fre -fttree-phiprop -fttree-sra
-fttree-pta -fttree-ter -한 번에 단위

-O 도 켜집니다 -fomit 프레임 포인터 그렇게 하는 것이 방해가 되지 않는 기계에서
디버깅과 함께.

-O2 더욱 최적화하십시오. GCC는 지원하지 않는 거의 모든 최적화를 수행합니다.
공간 속도 절충안을 포함합니다. 비교하자면 -O, 이 옵션은
컴파일 시간과 생성된 코드의 성능.

-O2 에 의해 지정된 모든 최적화 플래그를 켭니다. -O. 또한 다음을 켭니다.
최적화 플래그: -fthread 점프 -falign-함수 -정렬 점프 -정렬 루프
-falign-라벨 -fcaller 저장 -크로스점프 -fcse-추종-점프 -fcse-skip-blocks.
-fdelete-null-포인터 검사 -f비가상화 -비싼 최적화 -fgcse
-fgcse-lm -finline-작은 기능 -findirect 인라인 -피파-스라
-foptimize-형제 호출 -f부분 인라인 -fpeephole2 -fregmove -freorder-블록
-freorder-함수 -frerun-cse-후-루프 -fsched-인터블록 -fsched-spec
-fschedule-insns -fschedule-insns2 -fstrict-앨리어싱 -fstrict-오버플로
-ftree 스위치 변환 -fttree-tail-merge -fttree-pre -fttree-vrp

아래의 경고에 유의하십시오. -fgcse 호출에 대해 -O2 계산을 사용하는 프로그램에서
고토스.

참고: Ubuntu 8.10 이상 버전에서는 -D_FORTIFY_SOURCE=2 기본적으로 설정되어 있으며
활성화되면 -O 2 이상으로 설정됩니다. 이것은 추가 컴파일 시간을 가능하게 하고
여러 libc 함수에 대한 런타임 검사. 비활성화하려면 다음 중 하나를 지정하십시오.
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 더 최적화하세요. -O3 에 의해 지정된 모든 최적화를 켭니다. -O2 또한 켜집니다
전에, -finline-함수, -펀스위치 루프, -f예측-공통, -fgcse-재로드 후,
-ftree 벡터화, -ftree-부분 사전-fipa-cp-클론 옵션을 제공합니다.

-O0 컴파일 시간을 줄이고 디버깅을 통해 예상한 결과를 얻을 수 있습니다. 이것이
태만.

- 오스 크기에 최적화하십시오. - 오스 모두 활성화 -O2 일반적으로 증가하지 않는 최적화
코드 크기. 또한 코드 크기를 줄이기 위해 설계된 추가 최적화를 수행합니다.

- 오스 다음 최적화 플래그를 비활성화합니다. -falign-함수 -정렬 점프
-정렬 루프 -falign-라벨 -freorder-블록 -freeorder-blocks-and-partition
-fprefetch 루프 배열 -ftree-vect-loop-버전

-오파스트
엄격한 표준 준수를 무시하십시오. -오파스트 모두 활성화 -O3 최적화. 또한
모든 표준 호환 프로그램에 유효하지 않은 최적화를 활성화합니다. 그것
켜다 -빠른 수학 그리고 포트란 전용 -fno 보호 괄호-fstack-배열.

여러 개 사용하는 경우 -O 옵션, 레벨 번호 유무에 관계없이 마지막 옵션은
효과적인 것.

양식의 옵션 -f플래그 기계 독립적 플래그를 지정합니다. 대부분의 플래그에는 두 가지가 모두 있습니다.
긍정적이고 부정적인 형태; 의 부정적인 형태 - 푸푸-fno-foo. 테이블에서
아래에는 일반적으로 사용하게 될 양식 중 하나만 나열되어 있습니다. 당신은 이해할 수 있습니다
제거하여 다른 형태로 아니 - 또는 추가합니다.

다음 옵션은 특정 최적화를 제어합니다. 그들은 다음 중 하나에 의해 활성화됩니다. -O
옵션 또는 해당 옵션과 관련이 있습니다. 희귀한 경우 다음 플래그를 사용할 수 있습니다.
수행할 최적화의 "미세 조정"이 필요한 경우.

-fno-기본-인라인
멤버 함수가 내부에 정의되어 있기 때문에 기본적으로 인라인으로 만들지 마십시오.
클래스 범위(C++만 해당). 그렇지 않으면 다음을 지정할 때 -O, 멤버 함수 정의
내부 클래스 범위는 기본적으로 인라인으로 컴파일됩니다. 즉, 추가할 필요가 없습니다 인라인
멤버 함수 이름 앞에

-fno-지연-팝
함수가 반환되는 즉시 각 함수 호출에 대한 인수를 항상 팝업합니다. 을위한
함수 호출 후 인수를 팝해야 하는 시스템에서 컴파일러는 일반적으로 다음을 허용합니다.
인수는 여러 함수 호출에 대해 스택에 누적되어 모두 다음 위치에 표시됩니다.
일단.

수준에서 비활성화됨 -O, -O2, -O3, - 오스.

-앞으로 전파
RTL에서 순방향 전파 전달을 수행합니다. 패스는 두 가지 명령을 결합하려고 합니다.
결과를 단순화할 수 있는지 확인합니다. 루프 언롤링이 활성화된 경우 XNUMX회 통과
수행되고 두 번째는 루프 언롤링 후에 예약됩니다.

이 옵션은 최적화 수준에서 기본적으로 활성화되어 있습니다. -O, -O2, -O3, - 오스.

-ffp-계약=스타일
-ffp-계약=해제 부동 소수점 표현식 축소를 비활성화합니다. -ffp-계약=빠른
fused multi-add의 형성과 같은 부동소수점 표현 축약 가능
대상에 기본 지원이 있는 경우 작업. -ffp-계약=켜기
언어 표준에서 허용하는 경우 부동 소수점 표현식 축소. 이것은
현재 구현되지 않고 동등하게 취급됨 -ffp-계약=해제.

디폴트는 -ffp-계약=빠른.

-fomit 프레임 포인터
프레임 포인터가 필요하지 않은 함수의 레지스터에 프레임 포인터를 보관하지 마십시오. 이것
프레임 포인터를 저장, 설정 및 복원하라는 지시를 피합니다. 그것은 또한 만든다
많은 기능에서 사용할 수 있는 추가 레지스터. It 또한 브랜드 디버깅 불가능한 on
일부 기계.

VAX와 같은 일부 시스템에서는 이 플래그가 효과가 없습니다.
호출 시퀀스는 자동으로 프레임 포인터를 처리하고 아무 것도 저장되지 않습니다.
존재하지 않는 척. 기계 설명 매크로 "FRAME_POINTER_REQUIRED"
대상 머신이 이 플래그를 지원하는지 여부를 제어합니다.

GCC 버전 4.6부터 기본 설정(크기 최적화가 아닌 경우)
32비트 Linux x86 및 32비트 Darwin x86 대상이 다음으로 변경되었습니다.
-fomit 프레임 포인터. 기본값은 다음으로 되돌릴 수 있습니다. -fno-생략-프레임 포인터 by
다음을 사용하여 GCC 구성 --enable-프레임 포인터 옵션을 구성합니다.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-foptimize-형제 호출
형제 및 꼬리 재귀 호출을 최적화합니다.

수준에서 활성화됨 -O2, -O3, - 오스.

-fno 인라인
"always_inline"으로 표시된 기능 외에 인라인 기능을 확장하지 마십시오.
기인하다. 최적화하지 않을 때의 기본값입니다.

단일 함수는 "noinline"으로 표시하여 인라인에서 제외할 수 있습니다.
속성을 사용하지 않는 것입니다.

-finline-작은 기능
본문이 예상보다 작을 때 호출자에 함수를 통합합니다.
함수 호출 코드(그래서 프로그램의 전체 크기가 작아짐). 컴파일러
통합할 가치가 있을 만큼 간단한 기능을 발견적으로 결정합니다.
이 방법. 이 인라인은 인라인으로 선언되지 않은 함수를 포함하여 모든 함수에 적용됩니다.

수준에서 활성화됨 -O2.

-findirect 인라인
인라인은 또한 다음 덕분에 컴파일 타임에 알려진 간접 호출입니다.
이전 인라이닝. 이 옵션은 인라인 자체가 켜져 있을 때만 효과가 있습니다.
-finline-함수 or -finline-작은 기능 옵션을 제공합니다.

수준에서 활성화됨 -O2.

-finline-함수
인라인으로 선언되지 않은 경우에도 모든 함수를 인라인으로 고려하십시오. NS
컴파일러는 이러한 방식으로 통합할 가치가 있는 기능을 경험적으로 결정합니다.

주어진 함수에 대한 모든 호출이 통합되고 함수가 선언된 경우
"정적"인 경우 함수는 일반적으로 자체적으로 어셈블러 코드로 출력되지 않습니다.

수준에서 활성화됨 -O3.

-finline-functions-call-once
다음과 같은 경우에도 호출자에 인라인하기 위해 한 번 호출된 모든 "정적" 함수를 고려하십시오.
"인라인"으로 표시되지 않습니다. 주어진 함수에 대한 호출이 통합되면
함수는 자체적으로 어셈블러 코드로 출력되지 않습니다.

수준에서 활성화됨 -O1, -O2, -O3- 오스.

-두려운 인라인
"always_inline"으로 표시된 인라인 함수 및 본문이 다음보다 작게 보이는 함수
하기 전에 일찍 함수 호출 오버헤드 -fprofile 생성 계측 및
실제 인라인 패스. 이렇게 하면 프로파일링이 상당히 저렴해지고 일반적으로
중첩된 래퍼 함수의 큰 체인이 있는 프로그램에서 더 빠르게 인라인합니다.

기본적으로 활성화됩니다.

-피파-스라
집계의 절차 간 스칼라 교체 수행, 사용하지 않는 매개변수 제거
참조로 전달된 매개변수를 값으로 전달된 매개변수로 교체합니다.

수준에서 활성화됨 -O2, -O3- 오스.

-finline-한계=n
기본적으로 GCC는 인라인될 수 있는 함수의 크기를 제한합니다. 이 플래그는
이 한계의 거친 제어. n 인라인할 수 있는 함수의 크기입니다.
의사 명령어의 수.

인라인은 실제로 지정될 수 있는 여러 매개변수에 의해 제어됩니다.
사용하여 개별적으로 --매개변수 name=가치. 그만큼 -finline-한계=n 옵션은 일부를 설정합니다.
이러한 매개변수는 다음과 같습니다.

최대 인라인-insns-단일
n/ 2.

최대 인라인-insns-자동
n/ 2.

인라인을 제어하는 ​​개별 매개변수에 대한 문서는 아래를 참조하십시오.
이러한 매개변수의 기본값에 대해

참고 : 가치가 없을 수 있습니다 -finline-한계 기본 동작이 발생합니다.

참고 : 의사 명령어는 이 특정 컨텍스트에서 추상을 나타냅니다.
함수의 크기 측정. 어떤 식으로든 어셈블리 수를 나타내지 않습니다.
지침이 있으므로 정확한 의미는 릴리스마다 변경될 수 있습니다.
또 다른.

-fno-keep-inline-dllexport
더 세분화된 버전입니다. -fkeep 인라인 함수에만 적용되는
"dllexport" 속성 또는 declspec을 사용하여 선언된 함수

-fkeep 인라인 함수
C에서 "인라인"으로 선언된 "정적" 함수를 개체 파일에 내보냅니다.
함수는 모든 호출자에 인라인되었습니다. 이 스위치는 영향을 미치지 않습니다
GNU C90에서 "extern inline" 확장을 사용하는 기능. C++에서 모든 것을 내보냅니다.
인라인 함수를 개체 파일에 넣습니다.

-fkeep-static-const
최적화가 켜져 있지 않으면 "정적 const"로 선언된 변수를 내보냅니다.
변수는 참조되지 않습니다.

GCC는 기본적으로 이 옵션을 활성화합니다. 컴파일러가 강제로 확인하도록 하려면
최적화가 켜져 있는지 여부에 관계없이 변수가 참조되었습니다.
전에, -fno-keep-static-consts 옵션을 선택합니다.

-fmerge-상수
동일한 상수(문자열 상수 및 부동 소수점 상수) 병합 시도
컴파일 단위에 걸쳐.

이 옵션은 어셈블러와 링커가
그것을 지원하십시오. 사용하다 -fno-merge-상수 이 행동을 억제하기 위해.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-fmerge-all-상수
동일한 상수와 동일한 변수를 병합하려고 합니다.

이 옵션은 -fmerge-상수. 이외에 -fmerge-상수
예를 들어 상수 초기화 배열 또는 초기화 상수 변수를 다음과 같이 고려합니다.
정수 또는 부동 소수점 유형. C 또는 C++와 같은 언어에는 각 변수가 필요합니다.
재귀 호출에 동일한 변수의 여러 인스턴스를 포함하여 고유한
따라서 이 옵션을 사용하면 부적합한 동작이 발생합니다.

-fmodulo-sched
첫 번째 스케줄링 패스 직전에 스윙 모듈로 스케줄링을 수행합니다. 이것
pass는 가장 안쪽 루프를 살펴보고 서로 다른 루프를 겹쳐서 명령을 재정렬합니다.
반복.

-fmodulo-sched-allow-regmoves
레지스터 이동이 허용되는 보다 적극적인 SMS 기반 모듈로 스케줄링을 수행합니다. 에 의해
이 플래그를 설정하면 트리거되는 특정 반 의존성 에지가 삭제됩니다.
수명 범위 분석을 기반으로 하는 reg-moves 생성. 이 옵션은
에만 효과적 -fmodulo-sched 사용하도록 설정되었습니다.

-fno-브랜치-카운트-reg
카운트 레지스터에 "감소 및 분기" 명령을 사용하지 말고 대신
레지스터를 감소시키는 일련의 명령어를 생성하고 비교
XNUMX이고 결과에 따라 분기합니다. 이 옵션은 다음에서만 의미가 있습니다.
x86, PowerPC, IA-64 및
S/390.

디폴트는 -fbranch-count-reg.

-fno-기능-cse
레지스터에 함수 주소를 넣지 마십시오. 호출하는 각 명령을
상수 함수는 함수의 주소를 명시적으로 포함합니다.

이 옵션을 사용하면 코드 효율성이 떨어지지만
어셈블러 출력은 이 옵션이 있을 때 수행되는 최적화로 인해 혼동될 수 있습니다.
사용되지 않습니다.

디폴트는 -f함수-cse

-fno-zero-initialized-in-bss
대상이 BSS 섹션을 지원하는 경우 GCC는 기본적으로 다음과 같은 변수를 넣습니다.
BSS에 XNUMX으로 초기화됩니다. 이렇게 하면 결과 코드의 공간을 절약할 수 있습니다.

일부 프로그램은 명시적으로 변수에 의존하기 때문에 이 옵션은 이 동작을 끕니다.
데이터 섹션으로 이동합니다. 예를 들어 결과 실행 파일이
해당 섹션의 시작 부분 및/또는 이를 기반으로 가정합니다.

디폴트는 -fzero-초기화-BSS.

-fmudflap -fmudflapth -fmudflapir
이를 지원하는 프런트 엔드(C 및 C++)의 경우 모든 위험한 포인터/배열을 계측합니다.
역참조 작업, 일부 표준 라이브러리 문자열/힙 함수 및 기타
범위/유효성 테스트와 관련된 구성. 그렇게 계측된 모듈은 다음과 같아야 합니다.
버퍼 오버플로, 잘못된 힙 사용 및 기타 C/C++ 클래스에 면역
프로그래밍 오류. 계측은 별도의 런타임 라이브러리에 의존합니다.
(libmudflap), 다음과 같은 경우 프로그램에 연결됩니다. -fmudflap 링크 시간에 제공됩니다.
계측된 프로그램의 런타임 동작은 머드플랩_옵션
환경 변수. 옵션은 "env MUDFLAP_OPTIONS=-help.out"을 참조하십시오.

-fmudflapth 대신 -fmudflap 프로그램이 다중인 경우 컴파일 및 링크
스레드. 사용하다 -fmudflapir이외에도, -fmudflap or -fmudflapth만약
계측은 포인터 읽기를 무시해야 합니다. 이것은 더 적은 계측을 생성합니다(그리고
따라서 더 빠른 실행) 및 여전히 완전한 메모리에 대한 보호 기능을 제공합니다.
쓰기를 손상시키지만 프로그램 내에서 전파되는 데이터를 잘못 읽을 수 있습니다.

-fthread 점프
점프가 다음 위치로 분기되는지 확인하는 최적화를 수행합니다.
첫 번째에 포함된 다른 비교가 발견됩니다. 그렇다면 첫 번째 분기는
두 번째 분기의 대상 또는 즉시 지점으로 리디렉션됨
조건이 참인지 거짓인지에 따라 뒤따릅니다.

수준에서 활성화됨 -O2, -O3, - 오스.

-fsplit-와이드 유형
32비트에서 "long long"과 같이 여러 레지스터를 차지하는 유형을 사용하는 경우
시스템에서 레지스터를 분리하고 독립적으로 할당합니다. 이것은 일반적으로
이러한 유형에 대해 더 나은 코드를 생성하지만 디버깅을 더 어렵게 만들 수 있습니다.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-fcse-추종-점프
CSE(공통 부분식 제거)에서 점프 명령어를 스캔하면
점프의 목표는 다른 경로에 의해 도달되지 않습니다. 예를 들어 CSE가
"else" 절이 있는 "if" 문, CSE는 조건이 다음과 같을 때 점프를 따릅니다.
테스트한 것은 거짓입니다.

수준에서 활성화됨 -O2, -O3, - 오스.

-fcse-skip-blocks.
이것은 다음과 유사합니다. -fcse-추종-점프, 그러나 CSE가 다음 점프를 따르도록 합니다.
조건부로 블록을 건너뜁니다. CSE가 없는 단순한 "if" 문을 만나면
else 절, -fcse-skip-blocks. CSE는 몸 주위의 점프를 따라갑니다.
"만약".

수준에서 활성화됨 -O2, -O3, - 오스.

-frerun-cse-후-루프
루프 최적화가 수행된 후 공통 하위 표현식 제거를 다시 실행하십시오.

수준에서 활성화됨 -O2, -O3, - 오스.

-fgcse
전역 공통 부분식 제거 단계를 수행합니다. 이 패스도 수행합니다.
전역 상수 및 복사 전파.

참고 : GCC 확장인 계산된 gotos를 사용하여 프로그램을 컴파일할 때 다음을 얻을 수 있습니다.
전역 공통 하위 표현식 제거를 비활성화하면 런타임 성능 향상
추가하여 통과 -FNO-GCSE 명령 줄에.

수준에서 활성화됨 -O2, -O3, - 오스.

-fgcse-lm
인셀덤 공식 판매점인 -fgcse-lm 활성화된 경우 전역 공통 하위 표현식 제거는 다음을 시도합니다.
상점에서만 죽일 수 있는 로드를 자체로 이동합니다. 이것은 루프를 허용합니다
루프 외부의 로드로 변경될 로드/저장 시퀀스 및
루프 내에서 복사/저장합니다.

gcse가 활성화되면 기본적으로 활성화됩니다.

-fgcse-sm
인셀덤 공식 판매점인 -fgcse-sm 활성화되면 전역 공통 이후에 스토어 모션 패스가 실행됩니다.
하위 표현 제거. 이 패스는 상점을 루프 밖으로 이동하려고 시도합니다. 언제
와 함께 사용 -fgcse-lm, 로드/저장 시퀀스를 포함하는 루프는
루프 이전의 로드와 루프 이후의 저장소로 변경되었습니다.

어떤 최적화 수준에서도 활성화되지 않습니다.

-fgcse-las
인셀덤 공식 판매점인 -fgcse-las 활성화되면 전역 공통 하위 표현식 제거 패스
동일한 메모리 위치(둘 다
부분 및 전체 중복).

어떤 최적화 수준에서도 활성화되지 않습니다.

-fgcse-재로드 후
인셀덤 공식 판매점인 -fgcse-재로드 후 활성화되면 중복 로드 제거 패스가 수행됩니다.
재장전 후. 이 패스의 목적은 중복 유출을 정리하는 것입니다.

-펀세이프 루프 최적화
주어진 경우 루프 최적화 프로그램은 루프 인덱스가 오버플로되지 않는다고 가정하고
중요하지 않은 종료 조건이 있는 루프는 무한하지 않습니다. 이것은 더 넓은 범위를 가능하게 합니다
루프 최적화 프로그램 자체가 다음을 증명할 수 없는 경우에도 루프 최적화의
가정이 유효합니다. 사용 -Wunsafe 루프 최적화, 컴파일러가 경고합니다
이런 종류의 루프를 찾으면.

-크로스점프
크로스 점프 변환을 수행합니다. 이 변환은 동등한 코드를 통합하고
코드 크기를 절약하십시오. 결과 코드는 교차가 없는 것보다 더 나은 성능을 보일 수도 있고 그렇지 않을 수도 있습니다.
점프.

수준에서 활성화됨 -O2, -O3, - 오스.

-fauto-inc-dec
메모리 액세스와 주소의 증가 또는 감소를 결합합니다. 이 패스는
이를 지원하기 위한 지침이 없는 아키텍처에서는 항상 건너뛰었습니다.
기본적으로 활성화됨 -O 그리고 이것을 지원하는 아키텍처에서 더 높습니다.

-fdce
RTL에서 데드 코드 제거(DCE)를 수행합니다. 기본적으로 활성화됨 -O 이상.

-fdse
RTL에서 데드 스토어 제거(DSE)를 수행합니다. 기본적으로 활성화됨 -O 이상.

-fif 변환
조건부 점프를 분기가 없는 등가물로 변환하려고 시도합니다. 여기에는 사용이 포함됩니다.
조건부 이동, 최소, 최대, 플래그 및 복근 설정 명령 및 수행 가능한 몇 가지 트릭
표준 산술로. 칩에서 조건부 실행 사용
available은 "if-conversion2"에 의해 제어됩니다.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-fi-변환2
조건부 실행(사용 가능한 경우)을 사용하여 조건부 점프를 다음으로 변환합니다.
가지가 없는 등가물.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-fdelete-null-포인터 검사
프로그램이 널 포인터를 안전하게 역참조할 수 없고 코드나 데이터가 없다고 가정합니다.
요소가 거기에 있습니다. 이를 통해 간단한 일정한 접기 최적화가 가능합니다.
최적화 수준. 또한 GCC의 다른 최적화 단계에서는 이 플래그를 사용하여
널 포인터에 대한 불필요한 검사를 제거하는 전역 데이터 흐름 분석을 제어합니다.
이것은 포인터가 이미 역참조된 후에 검사되면
null일 수 없습니다.

그러나 일부 환경에서는 이 가정이 사실이 아닙니다. 사용하다
-fno-delete-null-포인터 검사 의존하는 프로그램에 대해 이 최적화를 비활성화하려면
그 행동에.

일부 대상, 특히 포함된 대상은 모든 수준에서 이 옵션을 비활성화합니다. 그렇지 않으면
모든 수준에서 활성화됩니다. -O0, -O1, -O2, -O3, - 오스. 정보를 사용하는 패스
다른 최적화 수준에서 독립적으로 활성화됩니다.

-f비가상화
가상 함수에 대한 호출을 직접 호출로 변환하려고 시도합니다. 이것은 둘 다 이루어집니다
절차 내에서 간접 인라인의 일부로 절차 간
("-findirect-inlining") 및 절차 간 상수 전파(-fipa-cp). 활성화됨
수준에서 -O2, -O3, - 오스.

-비싼 최적화
비교적 비용이 많이 드는 여러 가지 사소한 최적화를 수행합니다.

수준에서 활성화됨 -O2, -O3, - 오스.

-비어 있는
중복 확장 명령을 제거하려고 시도합니다. 이것은 특히 도움이 됩니다.
86비트 레지스터에서 암시적으로 64 확장되는 x64-XNUMX 아키텍처
하위 32비트 절반에 쓰기.

수준에서 x86에 대해 활성화됨 -O2, -O3.

-f최적화 등록 이동
-fregmove
이동 명령에서 레지스터 번호를 다른 피연산자로 재할당하려고 합니다.
레지스터 연결의 양을 최대화하기 위한 간단한 지침. 이것은
두 개의 피연산자 명령어가 있는 기계에서 특히 유용합니다.

주의 사항 -fregmove-f최적화 등록 이동 같은 최적화입니다.

수준에서 활성화됨 -O2, -O3, - 오스.

-피라 알고리즘=연산
통합 레지스터 할당자에 대해 지정된 색상 지정 알고리즘을 사용합니다. NS
연산 주장은 수 있습니다 우선, Chow의 우선 순위 색상 지정, 또는 CB,
Chaitin-Briggs 착색을 지정합니다. Chaitin-Briggs 착색이 구현되지 않았습니다.
모든 아키텍처에 대해 지원하지만 이를 지원하는 대상의 경우 기본값입니다.
더 나은 코드를 생성하기 때문입니다.

-피라 지역=지방
통합 레지스터 할당자에 대해 지정된 영역을 사용합니다. NS 지방 논의
다음 중 하나여야 합니다.

모든 모든 루프를 레지스터 할당 영역으로 사용하십시오. 이것은 최고의 결과를 줄 수 있습니다
작거나 불규칙한 레지스터 세트가 있는 기계.

혼합 된
영역으로 레지스터 압력이 작은 루프를 제외한 모든 루프를 사용합니다. 이것
값은 일반적으로 대부분의 경우 대부분의 아키텍처에서 최상의 결과를 제공합니다.
속도 최적화(-O, -O2, ...).

모든 기능을 단일 영역으로 사용합니다. 이것은 일반적으로 가장 작은 코드를 생성합니다.
크기이며 기본적으로 활성화되어 있습니다. - 오스 or -O0.

-피라 루프 압력
IRA를 사용하여 루프 불변량을 이동하기 위한 결정에 대한 루프의 레지스터 압력을 평가합니다.
이 옵션은 일반적으로 다음을 사용하는 시스템에서 더 빠르고 더 작은 코드를 생성합니다.
큰 레지스터 파일(>= 32 레지스터)이지만 컴파일러가 느려질 수 있습니다.

이 옵션은 수준에서 활성화됩니다. -O3 일부 대상에 대해.

-fno-ira-공유-저장-슬롯
호출 사용 하드 레지스터를 저장하는 데 사용되는 스택 슬롯 공유 비활성화
전화. 각 하드 레지스터는 별도의 스택 슬롯을 가지며 결과적으로 함수 스택
프레임이 더 큽니다.

-fno-ira-share-spill-slots
의사 레지스터에 할당된 스택 슬롯의 공유를 비활성화합니다. 각 의사 레지스터
하드 레지스터를 얻지 못하는 것은 별도의 스택 슬롯을 가져오고 결과적으로 함수
스택 프레임이 더 큽니다.

-Fira-장황한=n
통합 레지스터 할당자에 대한 덤프 파일의 자세한 정도를 제어합니다. NS
기본값은 5입니다. 값이 n 10보다 크거나 같으면 덤프 출력이 전송됩니다.
와 같은 형식을 사용하여 stderr로 n 마이너스 10.

-fdelayed-분기
대상 시스템에 대해 지원되는 경우 악용할 명령을 재정렬하십시오.
지연 분기 명령 이후에 사용 가능한 명령 슬롯.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-fschedule-insns
대상 시스템에 대해 지원되는 경우 명령을 재정렬하여 제거하십시오.
필요한 데이터를 사용할 수 없기 때문에 실행이 중단됩니다. 이것은 다음을 수행하는 기계를 돕습니다.
다른 명령어를 허용하여 느린 부동 소수점 또는 메모리 로드 명령어를
로드 또는 부동 소수점 명령어의 결과가 필요할 때까지 발행됩니다.

수준에서 활성화됨 -O2, -O3.

-fschedule-insns2
유사하게 -fschedule-insns, 그러나 명령 스케줄링의 추가 단계를 요청합니다.
레지스터 할당이 완료된 후. 이것은 특히 다음이 있는 기계에서 유용합니다.
상대적으로 적은 수의 레지스터와 메모리 로드 명령이
한 사이클.

수준에서 활성화됨 -O2, -O3, - 오스.

-fno-sched-인터블록
기본 블록 전체에 지침을 예약하지 마십시오. 이것은 일반적으로 기본적으로 활성화되어 있습니다.
레지스터 할당 전에 스케줄링할 때, 즉 -fschedule-insns 또는에서 -O2 or
더 높은.

-fno-sched-spec
무부하 명령어의 투기적 움직임을 허용하지 마십시오. 이것은 일반적으로 다음으로 활성화됩니다.
레지스터 할당 전에 스케줄링할 때 기본값, 즉 -fschedule-insns 또는에서
-O2 이상.

-fsched-압력
레지스터 할당 전에 레지스터 압력 감지 inn 스케줄링을 활성화하십시오.
이것은 레지스터 할당이 활성화되기 전에 스케줄링할 때만 의미가 있습니다.
-fschedule-insns 또는에서 -O2 또는 더 높게. 이 옵션을 사용하면 생성된
레지스터 압력이 숫자 이상으로 증가하는 것을 방지하여 크기를 줄입니다.
사용 가능한 하드 레지스터의 수 및 결과적으로 레지스터가 레지스터에 유출됨
배당.

-fsched-사양-로드
일부 로드 명령의 추측 모션을 허용합니다. 이것은 다음과 같은 경우에만 의미가 있습니다.
레지스터 할당 전에 스케줄링, 즉 -fschedule-insns 또는에서 -O2 이상.

-fsched-spec-load-위험한
더 많은 로드 명령의 추측 모션을 허용합니다. 이것은 다음과 같은 경우에만 의미가 있습니다.
레지스터 할당 전에 스케줄링, 즉 -fschedule-insns 또는에서 -O2 이상.

-fsched-staled-insns
-fsched-stalled-insns=n
지연 대기열에서 조기에 이동할 수 있는 숙박 시설(있는 경우)의 수를 정의합니다.
두 번째 스케줄링 단계에서 준비 목록에 insns를 추가합니다.
-fno-sched-staled-insns 어떤 여관도 조기에 이동되지 않음을 의미하며,
-fsched-stalled-insns=0 이동할 수 있는 대기열 수에 제한이 없음을 의미합니다.
너무 일찍. -fsched-staled-insns 값이 없는 것은 다음과 같습니다.
-fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
지연된 시스템에 대한 종속성에 대해 검사할 숙소 그룹(주기) 수를 정의합니다.
지연된 시설의 대기열에서 조기 제거 후보인 시설입니다. 이것
두 번째 스케줄링 패스 동안에만 효과가 있습니다.
-fsched-staled-insns 사용. -fno-sched-stalled-insns-dep 에 해당하는
-fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep 값이 없는 것은 동등하다
-fsched-stalled-insns-dep=1.

-fsched2-use-수퍼블록
레지스터 할당 후 스케줄링 시 슈퍼블록 스케줄링 알고리즘을 사용하십시오.
슈퍼블록 스케줄링은 기본 블록 경계를 넘어 더 빠른 움직임을 허용합니다.
일정. 이 옵션은 GCC에서 사용하는 모든 기계 설명이 아니기 때문에 실험적입니다.
알고리즘의 신뢰할 수 없는 결과를 피하기 위해 CPU를 가깝게 모델링합니다.

이것은 레지스터 할당 후 스케줄링할 때만 의미가 있습니다.
-fschedule-insns2 또는에서 -O2 이상.

-fsched-group-휴리스틱
스케줄러에서 그룹 휴리스틱을 활성화합니다. 이 휴리스틱은 명령을 선호합니다.
일정 그룹에 속해 있습니다. 일정이 다음과 같을 때 기본적으로 활성화됩니다.
활성화, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2 이상.

-fsched-critical-path-휴리스틱
스케줄러에서 임계 경로 휴리스틱을 활성화합니다. 이 휴리스틱 호의
중요한 경로에 대한 지침. 일정이 다음과 같을 때 기본적으로 활성화됩니다.
활성화, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2 이상.

-fsched-spec-insn-휴리스틱
스케줄러에서 추론적 명령어 휴리스틱을 활성화합니다. 이 휴리스틱 호의
의존성이 더 큰 투기적 명령. 기본적으로 활성화되어 있습니다.
스케줄링이 활성화된 경우, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2
이상.

-fsched-rank-휴리스틱
스케줄러에서 순위 휴리스틱을 활성화합니다. 이 휴리스틱은 명령을 선호합니다.
크기나 빈도가 더 큰 기본 블록에 속합니다. 기본적으로 활성화되어 있습니다.
스케줄링이 활성화된 경우, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2
이상.

-fsched-last-insn-휴리스틱
스케줄러에서 마지막 명령 휴리스틱을 활성화합니다. 이 휴리스틱은
예정된 마지막 명령에 덜 의존하는 명령. 이것은 활성화되어 있습니다
예약이 활성화된 경우 기본적으로 -fschedule-insns or -fschedule-insns2
또는에서 -O2 이상.

-fsched-dep-count-휴리스틱
스케줄러에서 종속 계수 휴리스틱을 활성화합니다. 이 휴리스틱은
그에 따라 더 많은 지침이 있는 지침. 기본적으로 활성화되어 있습니다.
스케줄링이 활성화된 경우, 즉 -fschedule-insns or -fschedule-insns2 또는에서 -O2
이상.

-freschedule-modulo-scheduled-loops
모듈로 스케줄링은 루프가 모듈로인 경우 기존 스케줄링보다 먼저 옵니다.
예정된 우리는 나중의 스케줄링 패스가 변경되는 것을 방지하고자 할 수 있습니다.
일정, 우리는 그것을 제어하기 위해 이 옵션을 사용합니다.

-f선택적 스케줄링
선택적 스케줄링 알고리즘을 사용하여 명령을 스케줄링하십시오. 선택적 스케줄링 실행
첫 번째 스케줄러 패스 대신.

-f선택적-스케줄링2
선택적 스케줄링 알고리즘을 사용하여 명령을 스케줄링하십시오. 선택적 스케줄링 실행
두 번째 스케줄러 패스 대신.

-fsel-sched-파이프라이닝
선택적 스케줄링 중에 가장 안쪽 루프의 소프트웨어 파이프라이닝을 활성화합니다. 이것
옵션은 다음 중 하나가 될 때까지 효과가 없습니다. -f선택적 스케줄링 or -f선택적-스케줄링2 is
켜져있다.

-fsel-sched-파이프라인-외부 루프
선택적 스케줄링 중에 루프를 파이프라이닝할 때 외부 루프도 파이프라인합니다. 이것
옵션은 다음까지 적용되지 않습니다. -fsel-sched-파이프라이닝 켜져 있습니다.

-fshrink-wrap
함수 프롤로그를 필요로 하는 부분이 아니라 함수의 일부 전에만 내보냅니다.
기능의 상단. 이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.

-fcaller 저장
함수 호출에 의해 차단될 레지스터에 값을 할당할 수 있습니다.
그러한 호출 주변의 레지스터를 저장하고 복원하기 위한 추가 명령을 내보냄으로써.
이러한 할당은 예상보다 더 나은 코드를 생성하는 것처럼 보일 때만 수행됩니다.
그렇지 않으면 생산됩니다.

이 옵션은 일반적으로 다음이 있는 특정 시스템에서 기본적으로 항상 활성화되어 있습니다.
대신 사용할 호출 보존 레지스터가 없습니다.

수준에서 활성화됨 -O2, -O3, - 오스.

-fcombin-stack-adjustments
스택 조정(푸시 및 팝) 및 스택 메모리 참조를 추적한 다음 시도합니다.
그것들을 결합하는 방법을 찾기 위해.

기본적으로 활성화됨 -O1 이상.

-fconserve-스택
스택 사용을 최소화하려고 합니다. 컴파일러는 더 적은 스택 공간을 사용하려고 시도합니다.
프로그램이 느려지더라도. 이 옵션은 설정을 의미합니다. 대용량-
액자 매개변수를 100으로 설정하고 대형 스택 프레임 성장 매개변수를 400으로 설정합니다.

-fttree-재연결
나무에서 재결합을 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.

-fttree-pre
트리에서 부분 중복 제거(PRE)를 수행합니다. 이 플래그는 다음에 의해 활성화됩니다.
기본값 -O2-O3.

-ftree-부분 사전
부분 중복 제거(PRE)를 보다 적극적으로 만듭니다. 이 플래그는 다음에 의해 활성화됩니다.
기본값 -O3.

-fttree-forwprop
트리에서 순방향 전파를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O
더 높은.

-fttree-fre
트리에서 전체 중복 제거(FRE)를 수행합니다. FRE와 FRE의 차이점
PRE는 FRE가 다음으로 이어지는 모든 경로에서 계산된 표현식만 고려한다는 것입니다.
중복 계산. 이 분석은 PRE보다 빠르지만 노출 횟수는 적습니다.
중복. 이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.

-fttree-phiprop
나무의 조건부 포인터에서 부하를 끌어올립니다. 이 패스는 다음에 의해 활성화됩니다.
기본값 -O 이상.

-ftree 복사 소품
트리에서 복사 전파를 수행합니다. 이 패스는 불필요한 복사 작업을 제거합니다.
이 플래그는 기본적으로 활성화되어 있습니다. -O 이상.

-fipa-순수-const
어떤 함수가 순수하거나 상수인지 알아보십시오. 기본적으로 활성화됨 -O 이상.

-fipa-참조
이스케이프하지 않는 정적 변수가 컴파일 단위를 벗어날 수 없는지 확인하십시오.
기본적으로 활성화됨 -O 이상.

-fipa-pta
절차 간 포인터 분석 및 절차 간 수정을 수행하고
참조 분석. 이 옵션은 과도한 메모리 및 컴파일 시간 사용을 유발할 수 있습니다.
큰 컴파일 단위. 어떤 최적화 수준에서도 기본적으로 활성화되어 있지 않습니다.

-fipa 프로필
절차 간 프로파일 전파를 수행합니다. Cold에서만 호출되는 함수
기능은 콜드로 표시됩니다. 또한 한 번 실행된 기능(예: "콜드",
"noreturn", 정적 생성자 또는 소멸자)가 식별됩니다. 콜드 기능 및
한 번 실행된 함수의 루프가 적은 부분은 크기에 맞게 최적화됩니다. 에 의해 활성화됨
기본값 -O 이상.

-fipa-cp
절차간 상수 전파를 수행합니다. 이 최적화는 프로그램을 분석합니다
함수에 전달된 값이 상수인지 확인한 다음 최적화
따라서. 이 최적화는 다음과 같은 경우 성능을 크게 향상시킬 수 있습니다.
응용 프로그램에 함수에 전달된 상수가 있습니다. 이 플래그는 기본적으로 활성화되어 있습니다.
-O2, - 오스-O3.

-fipa-cp-클론
프로시저 간 상수 전파를 더 강하게 만들기 위해 함수 복제를 수행합니다. 언제
활성화된 경우 절차 간 상수 전파가 기능 복제를 수행합니다.
외부에서 볼 수 있는 함수는 상수 인수로 호출할 수 있습니다. 왜냐하면 이건
최적화는 기능의 여러 복사본을 생성할 수 있으므로 크게 증가할 수 있습니다.
코드 크기(참조 --매개변수 ipcp 단위 성장 =가치). 이 플래그는 기본적으로 활성화되어 있습니다.
-O3.

-fipa-매트릭스-reorg
행렬 병합 및 전치를 수행합니다. Matrix Flattening은 대체를 시도합니다.
n < m인 해당 n차원 행렬이 있는 m차원 행렬입니다. 이것
행렬의 요소에 액세스하는 데 필요한 간접 참조 수준을 줄입니다. NS
두 번째 최적화는 행렬 전치로, 행렬의 순서를 변경하려고 시도합니다.
캐시 지역성을 개선하기 위해 행렬의 차원. 두 최적화 모두
-전체 프로그램 깃발. 프로파일링 정보가 다음과 같은 경우에만 조옮김이 활성화됩니다.
사용할 수 있습니다.

-ftree-싱크대
나무에서 앞으로 저장 동작을 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O
더 높은.

-ftree-bit-ccp
트리에서 희소 조건부 비트 상수 전파 수행 및 포인터 전파
얼라인먼트 정보. 이 패스는 로컬 스칼라 변수에서만 작동하며 다음과 같습니다.
기본적으로 활성화됨 -O 그리고 더 높은. 그것은 그것을 요구한다 -fttree-ccp 사용 가능합니다.

-fttree-ccp
트리에서 희소 조건부 상수 전파(CCP)를 수행합니다. 이 패스만
로컬 스칼라 변수에서 작동하며 기본적으로 다음에서 활성화됩니다. -O 이상.

-ftree 스위치 변환
스위치에서 단순 초기화를 a에서 초기화로 변환
스칼라 배열. 이 플래그는 기본적으로 활성화되어 있습니다. -O2 이상.

-fttree-tail-merge
동일한 코드 시퀀스를 찾습니다. 발견되면 하나를 다른 하나의 점프로 교체하십시오.
이 최적화를 꼬리 병합 또는 교차 점프라고 합니다. 이 플래그는 다음에 의해 활성화됩니다.
기본값 -O2 그리고 더 높은. 이 패스의 컴파일 시간은 다음을 사용하여 제한할 수 있습니다.
최대 꼬리 병합 비교 매개 변수 및 최대 꼬리 병합 반복 매개 변수입니다.

-fttree-dce
트리에서 데드 코드 제거(DCE)를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O
이상.

-ftree-내장 호출-dce
내장 함수 호출에 대해 조건부 데드 코드 제거(DCE) 수행
"errno"를 설정할 수 있지만 그렇지 않으면 부작용이 없습니다. 이 플래그는 기본적으로 활성화되어 있습니다.
at -O2 그리고 더 높은 경우 - 오스 도 지정되지 않습니다.

-ftree-지배자-opts
다양한 단순 스칼라 정리 수행(상수/복사 전파, 이중화
도미네이터 기반 제거, 범위 전파 및 표현 단순화)
트리 순회. 이것은 또한 점프 스레딩을 수행합니다(점프에 대한 점프를 줄이기 위해). 이것
플래그는 기본적으로 활성화되어 있습니다. -O 이상.

-fttree-dse
나무에서 죽은 저장소 제거(DSE)를 수행합니다. 죽은 가게는 추억의 가게다
중간 로드 없이 나중에 다른 저장소에서 덮어쓰는 위치입니다. 에
이 경우 이전 저장소를 삭제할 수 있습니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O
더 높은.

-fttree-ch
트리에서 루프 헤더 복사를 수행합니다. 증가하기 때문에 유리합니다.
코드 모션 최적화의 효율성. 그것은 또한 한 점프를 저장합니다. 이 깃발은
기본적으로 활성화됨 -O 그리고 더 높은. 에 대해 활성화되어 있지 않습니다. - 오스, 일반적으로
코드 크기를 늘립니다.

-ftree 루프 최적화
트리에서 루프 최적화를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O
더 높은.

-ftree 루프 선형
트리에서 루프 교환 변환을 수행합니다. 와 동일 - 루프 교환. 쓰다
이 코드 변환에서 GCC는 다음과 같이 구성되어야 합니다. --with-ppl--클루그와 함께
Graphite 루프 변환 인프라를 활성화합니다.

- 루프 교환
루프에서 루프 교환 변환을 수행합니다. 두 개의 중첩 루프 교환
내부 및 외부 루프를 전환합니다. 예를 들어 다음과 같은 루프가 있다고 가정합니다.

DO J = 1, M
내가 = 1, N
A(J, I) = A(J, I) * C
엔도
엔도

루프 교환은 사용자가 다음과 같이 작성한 것처럼 루프를 변환합니다.

내가 = 1, N
DO J = 1, M
A(J, I) = A(J, I) * C
엔도
엔도

Fortran에서는 "N"이 캐시보다 클 때 유용할 수 있습니다.
배열의 요소는 열별로 연속적으로 메모리에 저장되며 원본
루프는 행을 반복하여 액세스할 때마다 잠재적으로 캐시 누락을 생성합니다. 이것
최적화는 GCC에서 지원하는 모든 언어에 적용되며 이에 국한되지 않습니다.
포트란. 이 코드 변환을 사용하려면 GCC를 다음과 같이 구성해야 합니다. --with-ppl
--클루그와 함께 Graphite 루프 변환 인프라를 활성화합니다.

-floop-스트립-광산
루프에서 루프 스트립 마이닝 변환을 수행합니다. 스트립 마이닝은 루프를 다음으로 분할합니다.
두 개의 중첩 루프. 외부 루프는 스트립 크기와 동일한 보폭을 가지며 내부 루프는
루프에는 스트립 내에서 원래 루프의 스트라이드가 있습니다. 스트립 길이 변경 가능
를 사용하여 루프 블록 타일 크기 매개변수. 예를 들어 다음과 같은 루프가 있다고 가정합니다.

내가 = 1, N
A(I) = A(I) + C
엔도

루프 스트립 마이닝은 사용자가 다음과 같이 작성한 것처럼 루프를 변환합니다.

DO II = 1, N, 51
DO I = II, 최소(II + 50, N)
A(I) = A(I) + C
엔도
엔도

이 최적화는 GCC에서 지원하는 모든 언어에 적용되며 이에 국한되지 않습니다.
포트란. 이 코드 변환을 사용하려면 GCC를 다음과 같이 구성해야 합니다. --with-ppl
--클루그와 함께 Graphite 루프 변환 인프라를 활성화합니다.

-floop-블록
루프에서 루프 차단 변환을 수행합니다. 블로킹 스트립은 각 루프를 채굴합니다.
요소 루프의 메모리 액세스가 캐시 내부에 맞도록 루프 중첩. NS
스트립 길이는 다음을 사용하여 변경할 수 있습니다. 루프 블록 타일 크기 매개변수. 예를 들어,
다음과 같은 루프가 주어집니다.

내가 = 1, N
DO J = 1, M
A(J, I) = B(I) + C(J)
엔도
엔도

루프 차단은 사용자가 다음과 같이 작성한 것처럼 루프를 변환합니다.

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, 최소(II + 50, N)
DO J = JJ, 최소(JJ + 50, M)
A(J, I) = B(I) + C(J)
엔도
엔도
엔도
엔도

"M"이 캐시보다 클 때 유용할 수 있습니다.
캐시에 보관할 수 있는 더 적은 양의 데이터를 반복합니다. 이것
최적화는 GCC에서 지원하는 모든 언어에 적용되며 이에 국한되지 않습니다.
포트란. 이 코드 변환을 사용하려면 GCC를 다음과 같이 구성해야 합니다. --with-ppl
--클루그와 함께 Graphite 루프 변환 인프라를 활성화합니다.

-fgraphite-정체성
흑연에 대한 ID 변환을 활성화합니다. 모든 SCoP에 대해
다면체 표현을 다시 gimple로 변환합니다. 사용 -fgraphite-정체성
GIMPLE -> GRAPHITE -> GIMPLE 변환의 비용 또는 이점을 확인할 수 있습니다.
index
루프에서 분할 및 데드 코드 제거.

-floop-평평화
루프 중첩 구조 제거: 루프 중첩을 단일 루프로 변환합니다. 이것
변환은 벡터화 및
병렬화. 이 기능은 실험적입니다. 이 코드 변환을 사용하려면 GCC
로 구성해야 합니다 --with-ppl--클루그와 함께 흑연 루프를 활성화하려면
변환 인프라.

-floop-병렬화-모두
흑연 데이터 종속성 분석을 사용하여 병렬화할 수 있는 루프를 식별합니다.
루프 전달 종속성을 포함하지 않도록 분석할 수 있는 모든 루프를 병렬화
루프를 병렬화하는 것이 수익성이 있는지 확인하지 않고.

-fcheck-데이터-deps
여러 데이터 종속성 분석기의 결과를 비교합니다. 이 옵션은 다음 용도로 사용됩니다.
데이터 의존성 분석기 디버깅.

-ftree-loop-if-변환
가장 안쪽 루프에서 조건부 점프를 분기 없는 것으로 변환 시도
등가물. 의도는 순서대로 가장 안쪽 루프에서 제어 흐름을 제거하는 것입니다.
이러한 루프를 처리하는 벡터화 패스의 기능을 개선합니다. 이것은
벡터화가 활성화된 경우 기본적으로 활성화됩니다.

-ftree-loop-if-convert-stores
메모리 쓰기를 포함하는 if-convert 조건부 점프도 시도합니다. 이것
변환은 조건부를 변환하므로 다중 스레드 프로그램에 안전하지 않을 수 있습니다.
무조건 메모리 쓰기에 메모리 쓰기. 예를 들어,

(i = 0, i < N, i++)
만약 (조건)
A[i] = expr;

변형 될 것입니다

(i = 0, i < N, i++)
A[i] = 조건 ? expr : A[i];

잠재적으로 데이터 레이스를 생성합니다.

-ftree-loop-분포
루프 분배를 수행합니다. 이 플래그는 큰 루프 본문에서 캐시 성능을 향상시킬 수 있습니다.
병렬화 또는 벡터화와 같은 추가 루프 최적화를 허용합니다.
장소. 예를 들어, 루프

내가 = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
엔도

로 변형됩니다

내가 = 1, N
A(I) = B(I) + C
엔도
내가 = 1, N
D(I) = E(I) * F
엔도

-ftree-루프-배포-패턴
에 대한 호출로 코드를 생성할 수 있는 패턴의 루프 배포를 수행합니다.
도서관. 이 플래그는 기본적으로 활성화되어 있습니다. -O3.

이 패스는 초기화 루프를 분산하고 memset XNUMX에 대한 호출을 생성합니다.
예를 들어, 루프

내가 = 1, N
A(I) = 0
B(I) = A(I) + 나
엔도

로 변형됩니다

내가 = 1, N
A(I) = 0
엔도
내가 = 1, N
B(I) = A(I) + 나
엔도

초기화 루프는 memset XNUMX에 대한 호출로 변환됩니다.

-ftree-루프-im
나무에서 루프 불변 동작을 수행합니다. 이 패스는 다음과 같은 불변량만 이동합니다.
RTL 수준에서 처리하기 어려운(함수 호출, 중요하지 않은 작업으로 확장되는 작업
여관의 순서). 와 함께 -펀스위치 루프 또한 다음 조건의 피연산자를 이동합니다.
사소한 불변성 분석을 사용할 수 있도록 루프 외부에서 불변합니다.
루프 해제에서. 패스에는 스토어 모션도 포함됩니다.

-ftree-루프-ivcanon
결정하는 루프의 반복 횟수에 대한 표준 카운터를 만듭니다.
반복 횟수는 복잡한 분석이 필요합니다. 이후 최적화는
수를 쉽게 결정하십시오. 특히 언롤링과 관련하여 유용합니다.

-fivopts
유도 변수 최적화 수행(강도 감소, 유도 변수
병합 및 유도 변수 제거).

-ftree 병렬화 루프=n
루프를 병렬화합니다. 즉, 반복 공간을 분할하여 n개의 스레드에서 실행합니다. 이것은
반복이 독립적이고 임의로 수행될 수 있는 루프에서만 가능
재정렬. 최적화는 루프에 대한 다중 프로세서 시스템에서만 수익성이 있습니다.
예를 들어 메모리 대역폭에 의해 제약을 받기보다는 CPU 집약적입니다. 이 옵션
의미하다 -pthread, 따라서 다음을 지원하는 대상에서만 지원됩니다.
-pthread.

-fttree-pta
나무에 대한 기능 로컬 지점 분석을 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다.
at -O 이상.

-fttree-sra
집계의 스칼라 교체를 수행합니다. 이 패스는 구조 참조를 대체합니다.
구조를 너무 일찍 메모리에 커밋하는 것을 방지하기 위해 스칼라를 사용합니다. 이 깃발은
기본적으로 활성화됨 -O 이상.

-ftree-copy이름 바꾸기
나무에 복사본 이름 바꾸기를 수행합니다. 이 패스는 컴파일러 임시 이름을 다음으로 바꾸려고 시도합니다.
복사 위치에 있는 다른 변수, 일반적으로 더 많은 변수 이름이 생성됩니다.
원래 변수와 매우 유사합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O
더 높은.

-ftree-coalesce-inlined-vars
copyrename 패스를 알려주세요(참조 -ftree-copy이름 바꾸기) 소규모 사용자를 결합하려고 시도합니다.
정의된 변수도 있지만 다른 함수에서 인라인된 경우에만 해당됩니다. 이것은
보다 제한된 형태의 -ftree-coalesce-vars. 이것은 그러한 디버그 정보에 해를 끼칠 수 있습니다.
인라인된 변수이지만 인라인된 함수의 변수를 다음과 별도로 유지합니다.
예상 값을 포함할 가능성이 더 높도록
디버깅 세션. 이것은 4.7 이전의 GCC 버전에서 기본값이었습니다.

-ftree-coalesce-vars
copyrename 패스를 알려주세요(참조 -ftree-copy이름 바꾸기) 소규모 사용자를 결합하려고 시도합니다.
컴파일러 임시 대신 정의된 변수도 있습니다. 이것은 심각하게 제한할 수 있습니다
다음으로 컴파일된 최적화된 프로그램을 디버그하는 기능 -fno-var-추적-할당.
부정 형식에서 이 플래그는 다음을 포함한 사용자 변수의 SSA 병합을 방지합니다.
인라인 된 것. 이 옵션은 기본적으로 활성화되어 있습니다.

-fttree-ter
SSA->정상 단계에서 임시 표현식 교체를 수행합니다. 하나의
use/single def 임시는 사용 위치에서 정의된 값으로 대체됩니다.
표현. 이는 GIMPLE 코드가 아닌 결과를 가져오지만 확장자에게 훨씬 더 많은 것을 제공합니다.
복잡한 트리를 사용하여 더 나은 RTL 생성이 가능합니다. 이것은 다음에 의해 활성화됩니다.
기본값 -O 이상.

-ftree 벡터화
트리에서 루프 벡터화를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O3.

-ftree-slp-벡터화
나무에서 기본 블록 벡터화를 수행합니다. 이 플래그는 기본적으로 활성화되어 있습니다. -O3
언제 -ftree 벡터화 사용 가능합니다.

-ftree-vect-loop-버전
트리에서 루프 벡터화를 수행할 때 루프 버전 관리를 수행합니다. 루프가 나타날 때
데이터 정렬 또는 데이터 종속성을 결정할 수 없다는 점을 제외하고 벡터화 가능
컴파일 타임에 루프의 벡터화 버전과 벡터화되지 않은 버전이 생성됩니다.
어떤 버전이 어떤 버전인지 제어하기 위한 정렬 또는 종속성에 대한 런타임 검사와 함께
실행. 이 옵션은 수준을 제외하고 기본적으로 활성화되어 있습니다. - 오스 비활성화된 곳입니다.

-fvect-비용 모델
벡터화를 위한 비용 모델을 활성화합니다.

-fttree-vrp
트리에서 값 범위 전파를 수행합니다. 이것은 일정한 전파와 유사합니다.
전달하지만 값 대신 값 범위가 전파됩니다. 이것은 허용
배열 바운드 검사 및 널 포인터와 같은 불필요한 범위 검사를 제거하기 위한 옵티마이저
체크 무늬. 이것은 기본적으로 활성화되어 있습니다. -O2 그리고 더 높은. 널 포인터 검사 제거
경우에만 수행됩니다 -fdelete-null-포인터 검사 사용 가능합니다.

-추적자
꼬리 복제를 수행하여 수퍼 블록 크기를 확대합니다. 이 변환은 단순화
다른 최적화가 더 나은 작업을 수행할 수 있도록 하는 기능의 제어 흐름.

-펀롤 루프
반복 횟수가 컴파일 시간 또는 컴파일 시간에 결정될 수 있는 루프를 풉니다.
루프 진입. -펀롤 루프 의미하다 -frerun-cse-후-루프. 이 옵션은
코드를 더 크게 만들고 더 빠르게 실행할 수도 있고 그렇지 않을 수도 있습니다.

-Funroll-All-루프
루프가 다음과 같을 때 반복 횟수가 불확실하더라도 모든 루프를 풉니다.
들어갔다. 이렇게 하면 일반적으로 프로그램이 더 느리게 실행됩니다. -Funroll-All-루프 를 의미한다
같은 옵션 -펀롤 루프,

-fsplit-ivs-in-unroller
이후의 반복에서 유도 변수의 값을 표현할 수 있습니다.
첫 번째 반복의 값을 사용하여 펼쳐진 루프. 이것은 긴 의존성을 깨뜨립니다.
따라서 스케줄링 패스의 효율성이 향상됩니다.

조합 -fweb CSE는 종종 동일한 효과를 얻기에 충분합니다. 하지만
루프 본문이 단일 기본 블록보다 복잡한 경우에는 그렇지 않습니다.
믿을 수있는. 또한 다음으로 인해 일부 아키텍처에서는 전혀 작동하지 않습니다.
CSE 통과 제한.

이 최적화는 기본적으로 활성화되어 있습니다.

-f변수 확장-언롤러
이 옵션을 사용하면 컴파일러는 일부 로컬 변수의 복사본을 여러 개 만듭니다.
루프를 풀 때 우수한 코드를 생성할 수 있습니다.

-f부분 인라인
함수의 인라인 부분. 이 옵션은 자신을 인라인할 때만 효과가 있습니다.
에 의해 켜졌다 -finline-함수 or -finline-작은 기능 옵션을 제공합니다.

수준에서 활성화됨 -O2.

-f예측-공통
예측 커머닝 최적화, 즉 계산 재사용(특히
메모리 로드 및 저장) 루프의 이전 반복에서 수행되었습니다.

이 옵션은 수준에서 활성화됩니다. -O3.

-fprefetch 루프 배열
대상 머신에서 지원하는 경우 메모리를 프리페치하기 위한 명령을 생성합니다.
큰 배열에 액세스하는 루프의 성능을 향상시킵니다.

이 옵션은 더 좋거나 더 나쁜 코드를 생성할 수 있습니다. 결과는 에 크게 의존
소스 코드 내의 루프 구조.

수준에서 비활성화됨 - 오스.

-fno 엿보기
-fno-구멍2
머신별 엿보기 구멍 최적화를 비활성화합니다. 차이점
-fno 엿보기-fno-구멍2 컴파일러에서 구현되는 방식에 있습니다. 일부
대상은 하나를 사용하고 일부는 다른 하나를 사용하고 일부는 둘 다 사용합니다.

-f구멍 기본적으로 활성화되어 있습니다. -fpeephole2 수준에서 활성화됨 -O2, -O3, - 오스.

-fno-추측-분기-확률
휴리스틱을 사용하여 분기 확률을 추측하지 마십시오.

GCC는 분기 확률이 제공되지 않는 경우 발견적 방법을 사용하여 분기 확률을 추측합니다.
프로파일링 피드백(-fprofile-호). 이러한 휴리스틱은 제어 흐름을 기반으로 합니다.
그래프. 일부 분기 확률이 다음으로 지정되는 경우 __builtin_expect, 그 다음에
휴리스틱은 나머지 제어 흐름에 대한 분기 확률을 추측하는 데 사용됩니다.
그래프, 복용 __builtin_expect 정보를 고려합니다. 사이의 상호 작용
휴리스틱과 __builtin_expect 복잡할 수 있으며 경우에 따라 다음을 수행하는 것이 유용할 수 있습니다.
휴리스틱을 비활성화하여 __builtin_expect 더 쉽다
알다.

디폴트는 -fguess-분기 확률 수준에서 -O, -O2, -O3, - 오스.

-freorder-블록
취하는 수를 줄이기 위해 컴파일된 함수에서 기본 블록을 재정렬합니다.
분기하고 코드 지역성을 개선합니다.

수준에서 활성화됨 -O2, -O3.

-freeorder-blocks-and-partition
컴파일된 함수에서 기본 블록을 재정렬하는 것 외에도
취한 분기의 수, 핫 및 콜드 기본 블록을 별도의 섹션으로 분할
어셈블리 및 .o 파일의 페이징 및 캐시 지역 성능을 향상시킵니다.

이 최적화는 예외 처리가 있는 경우 자동으로 해제됩니다.
linkonce 섹션, 사용자 정의 섹션 속성이 있는 함수 및 모든
명명된 섹션을 지원하지 않는 아키텍처

-freorder-함수
코드 지역성을 개선하기 위해 개체 파일에서 함수를 재정렬합니다. 이것은
가장 자주 실행되는 특수 하위 섹션 ".text.hot"을 사용하여 구현
기능 및 실행되지 않는 기능에 대한 ".text.unlikely". 재정렬은 다음과 같이 수행됩니다.
링커는 개체 파일 형식이 명명된 섹션을 지원해야 하므로 링커는
합리적인 방법으로.

또한 이 옵션을 적용하려면 프로필 피드백을 사용할 수 있어야 합니다. 보다
-fprofile-호 자세한 내용은.

수준에서 활성화됨 -O2, -O3, - 오스.

-fstrict-앨리어싱
컴파일러가 언어에 적용할 수 있는 가장 엄격한 앨리어싱 규칙을 가정하도록 허용
컴파일 중입니다. C(및 C++)의 경우 유형에 따라 최적화가 활성화됩니다.
표현. 특히, 한 유형의 객체는 절대
유형이 거의 동일하지 않는 한 다른 유형의 객체와 동일한 주소입니다.
예를 들어, "unsigned int"는 "int"의 별칭을 지정할 수 있지만 "void*" 또는 "double"은 별칭을 지정할 수 없습니다. NS
문자 유형은 다른 유형의 별칭을 지정할 수 있습니다.

다음과 같은 코드에 특히 주의하십시오.

노동조합 {
int i;
더블 d;
};

정수 f() {
연합 a_union t;
td = 3.0;
반환 티;
}

가장 최근의 조합원과 다른 조합원의 글을 읽는 습관
("type-punning"이라고 함) 쓰는 것이 일반적입니다. 와도 -fstrict-앨리어싱, 유형-
유니온 유형을 통해 메모리에 액세스하는 경우 말장난이 허용됩니다. 그래서
위의 코드는 예상대로 작동합니다. 그러나 이 코드는 다음을 수행하지 않을 수 있습니다.

정수 f() {
연합 a_union t;
정수* ip;
td = 3.0;
아이피 = &t.i;
반환 *ip;
}

마찬가지로 주소를 가져와 결과 포인터를 캐스팅하고
캐스트가 공용체 유형을 사용하더라도 결과를 역참조하면 정의되지 않은 동작이 있습니다.
예 :

정수 f() {
이중 d = 3.0;
return ((union a_union *) &d)->i;
}

XNUMXD덴탈의 -fstrict-앨리어싱 옵션이 수준에서 활성화됨 -O2, -O3, - 오스.

-fstrict-오버플로
컴파일러가 언어에 따라 엄격한 서명된 오버플로 규칙을 가정하도록 허용
컴파일 중입니다. C(및 C++)의 경우 이는 다음을 사용하여 산술을 수행할 때 오버플로를 의미합니다.
부호 있는 숫자는 정의되지 않습니다. 즉, 컴파일러는 그렇지 않을 것이라고 가정할 수 있습니다.
일어나 다. 이를 통해 다양한 최적화가 가능합니다. 예를 들어 컴파일러는 다음을 가정합니다.
"i + 10 > i"와 같은 표현식은 서명된 "i"에 대해 항상 참입니다. 이것
표현식이 거짓이므로 부호 있는 오버플로가 정의되지 않은 경우에만 가정이 유효합니다.
10의 보수 산술을 사용할 때 "i + XNUMX"이 오버플로되는 경우. 이 옵션이 있을 때
부호 있는 숫자에 대한 연산이 오버플로되는지 여부를 결정하려는 모든 시도에 영향을 줍니다.
실제로 오버플로가 발생하지 않도록 주의해서 작성해야 합니다.

이 옵션을 사용하면 컴파일러가 엄격한 포인터 의미를 가정할 수도 있습니다.
객체에 대한 포인터(해당 포인터에 오프셋을 추가해도 포인터가 생성되지 않는 경우)
동일한 객체에 대한 추가는 정의되지 않습니다. 이렇게 하면 컴파일러가 결론을 내릴 수 있습니다.
"p + u > p"는 포인터 "p"와 부호 없는 정수 "u"에 대해 항상 참입니다. 이것
표현식이 다음과 같이 포인터 랩어라운드가 정의되지 않았기 때문에 가정은 유효합니다.
XNUMX의 보수 산술을 사용하여 "p + u"가 오버플로되면 false입니다.

참조 항목 -fwrapv 옵션. 사용 -fwrapv 정수 부호 있는 오버플로는 다음을 의미합니다.
완전히 정의됨: 랩핑됩니다. 언제 -fwrapv 가 사용되며 차이가 없습니다.
-fstrict-오버플로-fno-strict-오버플로 정수의 경우. 와 함께 -fwrapv 특정 유형
오버플로가 허용됩니다. 예를 들어 컴파일러가 다음을 수행할 때 오버플로가 발생하면
상수에 대한 산술, 오버플로된 값은 여전히 ​​다음과 함께 사용할 수 있습니다. -fwrapv, 하지만
그렇지 않으면.

XNUMXD덴탈의 -fstrict-오버플로 옵션이 수준에서 활성화됨 -O2, -O3, - 오스.

-falign-함수
-falign-기능=n
함수의 시작을 다음보다 큰 XNUMX의 거듭제곱에 맞춥니다. n, 다음으로 건너뛰기 n
바이트. 예를 들어, -falign-기능=32 함수를 다음 32바이트에 정렬합니다.
경계하지만 -falign-기능=24 다음 경우에만 다음 32바이트 경계에 정렬됩니다.
이것은 23바이트 이하를 건너뛰어 수행할 수 있습니다.

-fno-정렬-기능-falign-기능=1 동등하고 기능을 의미합니다
정렬되지 않습니다.

일부 어셈블러는 다음 경우에만 이 플래그를 지원합니다. n XNUMX의 거듭제곱입니다. 그 경우, 그것은
반올림.

If n 지정되지 않았거나 XNUMX이면 시스템 종속 기본값을 사용합니다.

수준에서 활성화됨 -O2, -O3.

-falign-라벨
-falign-레이블=n
모든 분기 대상을 XNUMX의 거듭제곱 경계에 정렬하고 n 다음과 같은 바이트
-falign-함수. 이 옵션은
코드의 일반적인 흐름에서 분기 대상에 도달했을 때의 더미 작업입니다.

-fno-정렬-레이블-falign-레이블=1 동일하며 레이블이
정렬.

If -정렬 루프 or -정렬 점프 적용 가능하고 이 값보다 큰 경우
대신 해당 값이 사용됩니다.

If n 지정되지 않았거나 XNUMX인 경우 기계 종속 기본값을 사용합니다.
1, 정렬이 없음을 의미합니다.

수준에서 활성화됨 -O2, -O3.

-정렬 루프
-정렬 루프=n
루프를 XNUMX의 거듭제곱 경계로 정렬하고 다음으로 건너뜁니다. n 다음과 같은 바이트 -falign-함수.
루프가 여러 번 실행되기를 바랍니다.
더미 작업의 실행.

-fno-align 루프-falign 루프=1 동일하며 루프가
정렬.

If n 지정되지 않았거나 XNUMX이면 시스템 종속 기본값을 사용합니다.

수준에서 활성화됨 -O2, -O3.

-정렬 점프
-falign-점프=n
목표가 있는 분기 목표에 대해 분기 목표를 XNUMX의 거듭제곱 경계에 맞춥니다.
점프를 통해서만 도달할 수 있습니다. n 다음과 같은 바이트 -falign-함수. 에
이 경우 더미 작업을 실행할 필요가 없습니다.

-fno-align-점프-falign-점프=1 동일하며 루프가
정렬.

If n 지정되지 않았거나 XNUMX이면 시스템 종속 기본값을 사용합니다.

수준에서 활성화됨 -O2, -O3.

-한 번에 단위
이 옵션은 호환성을 위해 남겨둡니다. -한 번에 단위 효과가 없는 반면
-fno-한 번에 단위 의미하다 -fno-최상위-재주문-fno-섹션 앵커.

기본적으로 활성화됩니다.

-fno-최상위-재주문
최상위 함수, 변수 및 "asm" 문을 재정렬하지 마십시오. 출력
입력 파일에 나타나는 순서와 동일합니다. 이 옵션을 사용할 때,
참조되지 않은 정적 변수는 제거되지 않습니다. 이 옵션은 다음을 지원하기 위한 것입니다.
특정 순서에 의존하는 기존 코드. 새 코드의 경우 다음을 사용하는 것이 좋습니다.
속성.

수준에서 활성화됨 -O0. 명시적으로 비활성화하면 다음을 의미하기도 합니다. -fno-섹션 앵커,
그렇지 않으면 활성화됩니다. -O0 일부 대상에.

-fweb
레지스터 할당 목적으로 일반적으로 사용되는 웹을 구성하고 각 웹을 할당합니다.
개별 의사 레지스터 이를 통해 레지스터 할당 패스가 작동할 수 있습니다.
유사하지만 CSE,
루프 옵티마이저 및 사소한 데드 코드 제거기. 그러나 디버깅을 할 수 있습니다.
변수가 더 이상 "홈 레지스터"에 머물지 않기 때문에 불가능합니다.

기본적으로 활성화됨 -펀롤 루프.

-전체 프로그램
현재 컴파일 단위가 컴파일되는 전체 프로그램을 나타낸다고 가정합니다.
"main"과 병합된 것을 제외한 모든 공용 함수 및 변수
속성 "externally_visible"은 정적 함수가 되고 실제로 최적화됩니다.
절차 간 최적화 프로그램에 의해 보다 적극적으로. 만약에 링커 플러그인으로 사용되며,
"externally_visible" 속성은 자동으로 함수에 추가됩니다(아직 가변적이지 않음
전류로 인해 문제)에 따라 LTO 객체 외부에서 액세스
에 의해 생성된 해상도 파일 . 해상도를 생성할 수 없는 다른 링커의 경우
파일에서 명시적인 "externally_visible" 속성은 여전히 ​​필요합니다. 이 옵션을 사용하는 동안
다음으로 구성된 프로그램에 대해 "정적" 키워드를 적절하게 사용하는 것과 같습니다.
옵션과 함께 단일 파일 -flto 이 플래그는 많은 것을 컴파일하는 데 사용할 수 있습니다.
함수와 변수가 전체에 대해 지역적이 되기 때문에 소규모 프로그램
단일 소스 파일 자체가 아닌 결합된 컴파일 단위입니다.

이 옵션은 -f전체 파일 포트란 프로그램용.

-flto[=n]
이 옵션은 표준 링크 시간 최적화 프로그램을 실행합니다. 소스 코드와 함께 호출될 때
GIMPLE(GCC의 내부 표현 중 하나)을 생성하고 특수 ELF에 씁니다.
개체 파일의 섹션. 오브젝트 파일이 함께 링크되면 모든
함수 본문은 이러한 ELF 섹션에서 읽고 마치 이전에 있었던 것처럼 인스턴스화됩니다.
동일한 번역 단위의 일부입니다.

링크 타임 옵티마이저를 사용하려면, -flto 컴파일 시간과 도중에 지정해야 합니다.
마지막 링크. 예를 들어:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

GCC에 대한 처음 두 번의 호출은 GIMPLE의 바이트 코드 표현을 특수 파일에 저장합니다.
내부 ELF 섹션 푸.오바오. 최종 호출은 GIMPLE 바이트 코드를 읽습니다.
푸.오바오, 두 파일을 단일 내부 이미지로 병합하고 컴파일합니다.
평소와 같은 결과. 둘 다 이후로 푸.오바오 이것은 하나의 이미지로 병합됩니다.
GCC의 모든 절차 간 분석 및 최적화가
두 개의 파일이 하나의 파일처럼 보입니다. 이것은 예를 들어 내부가 다음과 같다는 것을 의미합니다.
함수를 인라인할 수 있는 바오 기능으로 푸.오 그 반대.

링크 시간 최적화를 활성화하는 또 다른 (간단한) 방법은 다음과 같습니다.

gcc -o myprog -flto -O2 foo.c bar.c

위의 바이트 코드 생성 foo.c바.씨, 그것들을 하나로 병합합니다.
GIMPLE 표현 및 평소와 같이 최적화하여 생성 마이프로그.

염두에 두어야 할 유일한 중요한 사항은 링크 시간 최적화를 활성화한다는 것입니다.
-flto 플래그는 컴파일 및 링크 명령 모두에 전달되어야 합니다.

전체 프로그램 최적화를 효과적으로 수행하려면 특정 전체 프로그램을
프로그램 가정. 컴파일러는 어떤 함수와 변수가 될 수 있는지 알아야 합니다.
링크 시간에 최적화된 단위 외부의 라이브러리 및 런타임에서 액세스합니다. 언제
링커에서 지원하는 링커 플러그인(참조 -퓨즈-링커-플러그인) 통과
사용된 기호와 외부에서 볼 수 있는 기호에 대한 정보를 컴파일러에 제공합니다. 때
링커 플러그인을 사용할 수 없습니다. -전체 프로그램 컴파일러를 허용하는 데 사용해야 합니다.
이러한 가정을 하면 보다 적극적인 최적화 결정이 내려집니다.

파일이 다음으로 컴파일될 때 주의하십시오. -flto, 생성된 오브젝트 파일이 다음보다 큽니다.
GIMPLE 바이트 코드와 일반적인 최종 코드가 포함되어 있기 때문에 일반 개체 파일입니다.
이는 LTO 정보가 있는 오브젝트 파일을 일반 오브젝트로 링크할 수 있음을 의미합니다.
파일; 만약 -flto 링커에 전달되지 않고 절차 간 최적화가 수행되지 않습니다.
적용된.

또한 개별 파일을 컴파일하는 데 사용되는 최적화 플래그는
링크 타임에 사용되는 것과 반드시 ​​관련이 있습니다. 예를 들어,

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

이렇게 하면 최적화되지 않은 어셈블러 코드가 포함된 개별 개체 파일이 생성되지만
결과 바이너리 마이프로그 에 최적화되어 있습니다. -O3. 대신 최종 바이너리가
없이 생성 -flto다음, 마이프로그 최적화되어 있지 않습니다.

로 최종 바이너리를 생성할 때 -flto, GCC는 링크 시간 최적화만 적용합니다.
바이트코드가 포함된 파일에. 따라서 개체 파일을 혼합 및 일치시킬 수 있습니다.
및 GIMPLE 바이트 코드 및 최종 개체 코드가 있는 라이브러리. GCC가 자동으로 선택
LTO 모드에서 최적화할 파일과 추가 없이 연결할 파일
처리.

다음과 같이 바이트 코드를 생성할 때 GCC에 의해 보존되는 일부 코드 생성 플래그가 있습니다.
최종 연결 단계에서 사용해야 합니다. 현재 다음 옵션
GIMPLE 바이트코드 파일에 저장됩니다. -fPIC, -f공통 그리고 모든 -m 타겟 플래그.

링크 시간에 이러한 옵션을 읽고 다시 적용합니다. 참고로 현재
구현에서는 이러한 옵션에 대해 충돌하는 값을 인식하려고 시도하지 않습니다. 만약에
다른 파일에는 충돌하는 옵션 값이 있습니다(예: 한 파일은 다음으로 컴파일됩니다. -fPIC
다른 하나는 그렇지 않음), 컴파일러는 단순히 바이트 코드에서 읽은 마지막 값을 사용합니다.
파일. 그런 다음 프로젝트에 참여하는 모든 파일을 컴파일하는 것이 좋습니다.
동일한 옵션이 있는 동일한 링크.

LTO가 별도의 호환되지 않는 유형으로 선언된 C 연결이 있는 객체를 만나는 경우
함께 연결될 번역 단위(ISO C99에 따른 정의되지 않은 동작
6.2.7), 비치명적 진단이 내려질 수 있습니다. 동작은 실행 시 여전히 정의되지 않습니다.
시간.

LTO의 또 다른 특징은 절차간 최적화를 적용할 수 있다는 것입니다.
다른 언어로 작성된 파일에 이를 위해서는 언어 전면의 지원이 필요합니다
끝. 현재 C, C++ 및 Fortran 프런트 엔드는 GIMPLE을 방출할 수 있습니다.
바이트코드이므로 다음과 같이 작동해야 합니다.

gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

최종 링크는 다음으로 완료됩니다. g ++ C++ 런타임 라이브러리를 가져오고
-lgfortran Fortran 런타임 라이브러리를 가져오기 위해 추가되었습니다. 일반적으로 혼합할 때
LTO 모드에서 언어를 혼합할 때와 동일한 링크 명령 옵션을 사용해야 합니다.
일반(비 LTO) 컴파일의 언어 추가해야 할 것은 -flto 에 대한 모든
컴파일 및 링크 명령.

GIMPLE 바이트코드가 포함된 객체 파일이 라이브러리 아카이브에 저장되어 있는 경우 다음과 같이 말하십시오.
libfoo.a, 사용중인 경우 LTO 링크에서 추출하여 사용할 수 있습니다.
플러그인을 지원하는 링커. 이 기능을 사용하려면 플래그를 사용하세요. -퓨즈-링커-플러그인
링크 시간:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

링커 플러그인이 활성화된 상태에서 링커는 다음에서 필요한 GIMPLE 파일을 추출합니다.
libfoo.a 실행 중인 GCC에 전달하여 집계된 일부로 만듭니다.
최적화할 GIMPLE 이미지입니다.

플러그인을 지원하는 링커를 사용하지 않거나 링커를 활성화하지 않는 경우
플러그인 다음 내부 개체 libfoo.a 평소와 같이 추출되고 연결되지만
LTO 최적화 프로세스에 참여하지 마십시오.

링크 타임 최적화는 전체 프로그램이 작동할 필요가 없습니다.
프로그램에서 내보낼 기호가 필요하지 않은 경우 다음을 결합할 수 있습니다.
-flto-전체 프로그램 절차 간 최적화 프로그램이 더 많은 것을 사용할 수 있도록
개선된 최적화 기회로 이어질 수 있는 공격적인 가정. 사용
-전체 프로그램 링커 플러그인이 활성화된 경우 필요하지 않습니다(참조 -퓨즈-링커-플러그인).

LTO의 현재 구현은 다음과 같은 바이트코드를 생성하려고 시도하지 않습니다.
서로 다른 유형의 호스트 간에 이식 가능합니다. 바이트코드 파일은 버전이 지정되어 있습니다.
엄격한 버전 검사이므로 한 버전의 GCC에서 생성된 바이트코드 파일은
이전/최신 버전의 GCC로 작업합니다.

링크 시간 최적화는 디버깅 정보 생성과 잘 작동하지 않습니다.
결합 -flto-g 현재 실험 중이며 잘못된 결과를 생성할 것으로 예상됨
결과.

옵션을 지정하면 n, 링크 타임에 수행되는 최적화 및 코드 생성
를 사용하여 병렬로 실행됩니다. n 설치된 병렬 작업을 활용하여 확인 프로그램)
환경 변수 MAKE 사용된 프로그램을 재정의하는 데 사용할 수 있습니다. 기본값
가치 n 1입니다.

지정할 수도 있습니다. -flto=작업 서버 GNU make의 작업 서버 모드를 사용하여
병렬 작업의 수. 이것은 GCC를 호출하는 Makefile이 이미
병렬로 실행합니다. 다음을 추가해야 합니다. + 부모의 명령 레시피에
이 작업을 수행하려면 Makefile이 필요합니다. 이 옵션은 다음과 같은 경우에만 작동합니다. MAKE GNU make입니다.

이 옵션은 기본적으로 비활성화되어 있습니다.

-flto-파티션=ALG
링크 시간 최적화 프로그램에서 사용하는 분할 알고리즘을 지정합니다. 값은
원본 소스 파일을 미러링하는 파티션을 지정하려면 "1to1"을 사용하거나
"균형"을 사용하여 가능한 경우 동일한 크기의 청크로 분할을 지정합니다.
알고리즘으로 "없음"을 지정하면 분할 및 스트리밍이 완전히 비활성화됩니다. NS
기본값은 "균형"입니다.

-flto-압축 수준=n
이 옵션은 작성된 중간 언어에 사용되는 압축 수준을 지정합니다.
LTO 오브젝트 파일에 적용되며 LTO 모드(-flto).
유효한 값은 0(압축 없음)에서 9(최대 압축)까지입니다. 이 밖의 값
범위는 0 또는 9로 고정됩니다. 옵션이 제공되지 않으면 기본 균형
압축 설정이 사용됩니다.

-flto-보고
링크 시간 최적화 프로그램의 작동에 대한 내부 세부 정보가 포함된 보고서를 인쇄합니다. NS
이 보고서의 내용은 버전에 따라 다릅니다. GCC에 유용하기 위한 것입니다.
개발자는 LTO 모드에서 개체 파일을 처리할 때(통해 -flto).

기본적으로 사용하지 않도록 설정되어 있습니다.

-퓨즈-링커-플러그인
링크 시간 최적화 중에 링커 플러그인을 사용할 수 있습니다. 이 옵션은
골드 또는 GNU ld 2.21 또는
더 새로운.

이 옵션을 사용하면 라이브러리에서 GIMPLE 바이트 코드가 있는 개체 파일을 추출할 수 있습니다.
아카이브. 이것은 링크에 더 많은 코드를 노출시켜 최적화 품질을 향상시킵니다.
시간 최적화기. 이 정보는 외부에서 액세스할 수 있는 기호를 지정합니다.
(비 LTO 개체에 의해 또는 동적 연결 중에). 결과 코드 품질 향상
바이너리(및 숨겨진 가시성을 사용하는 공유 라이브러리)는 다음과 유사합니다.
"-전체 프로그램". 보다 -flto 이 플래그의 효과에 대한 설명과
그걸 써.

이 옵션은 GCC에서 LTO 지원이 활성화되고 GCC가 활성화된 경우 기본적으로 활성화됩니다.
링커 지원 플러그인(GNU ld 2.21 이상 또는 골드)과 함께 사용하도록 구성됩니다.

-ffat-lto-객체
Fat LTO 개체는 중간 언어와
개체 코드. 이를 통해 LTO 연결 및 일반 연결 모두에 사용할 수 있습니다. 이것
옵션은 다음으로 컴파일할 때만 유효합니다. -flto 링크 시간에는 무시됩니다.

-fno-fat-lto-객체 일반 LTO에 비해 컴파일 시간이 향상되지만
LTO를 인식할 수 있는 완전한 도구 체인. 링커 플러그인을 지원하는 링커가 필요합니다.
기본 기능을 위해. 또한 nm, ar 및 ranlib는 링커를 지원해야 합니다.
모든 기능을 갖춘 빌드 환경을 허용하는 플러그인(정적 빌드 가능
도서관 등).

디폴트는 -ffat-lto-객체 그러나 이 기본값은 향후 변경될 예정입니다.
링커 플러그인 사용 환경이 일반화되면 릴리스됩니다.

-f비교-제거
레지스터 할당 및 사후 레지스터 할당 명령 분할 후 식별
비교 연산과 유사한 프로세서 플래그를 계산하는 산술 명령어
그 산술을 기반으로 합니다. 가능하면 명시적 비교 작업을 제거하십시오.

이 패스는 명시적으로 나타낼 수 없는 특정 대상에만 적용됩니다.
레지스터 할당이 완료되기 전에 비교 작업을 수행합니다.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-fuse-ld=금
사용 기본 링커 대신 링커.

-퓨즈-ld=bfd
사용 ld.bfd 기본 링커 대신 링커.

-fcprop 레지스터
레지스터 할당 및 사후 레지스터 할당 명령 분할 후
스케줄링 종속성을 줄이기 위해 복사 전파 단계를 수행하고
때때로 사본을 제거하십시오.

수준에서 활성화됨 -O, -O2, -O3, - 오스.

-fprofile-수정
다중 스레드 프로그램에 대해 계측된 바이너리를 사용하여 수집된 프로필은 다음과 같을 수 있습니다.
누락된 카운터 업데이트로 인해 일관성이 없습니다. 이 옵션이 지정되면 GCC는
이러한 불일치를 수정하거나 완화하기 위해 휴리스틱을 사용합니다. 기본적으로 GCC는
일치하지 않는 프로필이 감지되면 오류 메시지를 내보냅니다.

-f프로필-디렉토리=통로
프로필 데이터 파일을 검색할 디렉터리를 다음으로 설정합니다. 통로. 이 옵션
에 의해 생성된 프로필 데이터에만 영향을 미칩니다. -fprofile 생성, -최후 범위,
-fprofile-호 그리고 사용 -fprofile-사용-f분기 확률 및 관련
옵션. 절대 경로와 상대 경로를 모두 사용할 수 있습니다. 기본적으로 GCC는
현재 디렉토리 통로, 따라서 프로필 데이터 파일은
디렉터리를 개체 파일로 사용합니다.

-fprofile 생성
-fprofile 생성=통로
유용한 프로필을 생성하기 위해 응용 프로그램을 계측하는 데 일반적으로 사용되는 옵션을 활성화합니다.
프로필 피드백 기반 최적화로 나중에 다시 컴파일하기 위해. 당신은 사용해야합니다
-fprofile 생성 프로그램을 컴파일할 때와 링크할 때 모두.

"-fprofile-arcs", "-fprofile-values", "-fvpt" 옵션이 활성화됩니다.

If 통로 가 지정되면 GCC는 통로 프로필 피드백 데이터를 찾으려면
파일. 보다 -f프로필-디렉터리.

-fprofile-사용
-f프로필 사용=통로
프로필 피드백 지향 최적화 및 일반적으로 수익성 있는 최적화 활성화
프로필 피드백이 있는 경우에만 가능합니다.

다음 옵션이 활성화됩니다: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

기본적으로 GCC는 피드백 프로필이 일치하지 않으면 오류 메시지를 내보냅니다.
소스 코드. 이 오류는 다음을 사용하여 경고로 전환할 수 있습니다. -Wcoverage-불일치.
이로 인해 최적화되지 않은 코드가 발생할 수 있습니다.

If 통로 가 지정되면 GCC는 통로 프로필 피드백 데이터를 찾으려면
파일. 보다 -f프로필-디렉터리.

다음 옵션은 부동 소수점 산술과 관련된 컴파일러 동작을 제어합니다.
이러한 옵션은 속도와 정확성 사이에서 절충합니다. 모두 구체적으로 활성화해야 합니다.

-fffloat-store
부동 소수점 변수를 레지스터에 저장하지 말고 다른 옵션을 금지하십시오.
부동 소수점 값을 레지스터 또는 메모리에서 가져오는지 여부를 변경할 수 있습니다.

이 옵션은 68000과 같은 기계에서 바람직하지 않은 과도한 정밀도를 방지합니다.
부동 레지스터(68881 중)는 "더블"이 가정하는 것보다 더 높은 정밀도를 유지합니다.
가지고. x86 아키텍처에서도 마찬가지입니다. 대부분의 프로그램에서 초과 정밀도
좋은 일만 할 수 있지만 일부 프로그램은 IEEE 플로팅의 정확한 정의에 의존합니다.
가리키다. 사용하다 -fffloat-store 이러한 프로그램의 경우 모든 파일을 저장하도록 수정한 후
변수에 적절한 중간 계산.

-fexcess-정밀도=스타일
이 옵션을 사용하면 부동 상태의 기계에서 과도한 정밀도를 추가로 제어할 수 있습니다.
포인트 레지스터는 IEEE "float" 및 "double" 유형보다 정밀도가 높으며
프로세서는 이러한 유형으로 반올림하는 작업을 지원하지 않습니다. 기본적으로,
-fexcess-정밀도=빠름 유효하다; 이것은 작업이 수행된다는 것을 의미합니다.
레지스터의 정밀도 및 유형으로 반올림할 때 예측할 수 없음
소스 코드에 지정된 작업이 수행됩니다. C를 컴파일할 때,
-fexcess-정밀도=표준 지정되면 초과 정밀도가 규칙을 따릅니다.
ISO C99에 명시됨; 특히 캐스트와 할당 모두 값이
의미론적 유형으로 반올림됩니다(반면 -fffloat-store 할당에만 영향을 미칩니다).
이 옵션은 다음과 같은 엄격한 준수 옵션이 있는 경우 C에 대해 기본적으로 활성화됩니다.
-표준=c99 사용.

-fexcess-정밀도=표준 C 이외의 언어에는 구현되지 않으며
효과가 있다면 -재미있는 수학 최적화 or -빠른 수학 지정됩니다. x86에서는
경우에도 효과가 없습니다. -mfpmath=sse or -mfpmath=sse+387 지정됨; 이전에
이 경우 IEEE 의미론은 과도한 정밀도 없이 적용되며 후자의 경우 반올림은 다음과 같습니다.
예측할 수없는.

-빠른 수학
설정 -fno-수학-errno, -재미있는 수학 최적화, - 유한 수학 전용,
-fno 반올림 수학, -fno-시그널링-nans-fcx 제한 범위.

이 옵션을 사용하면 전처리기 매크로 "__FAST_MATH__"가 정의됩니다.

이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 이외의 옵션 -오파스트 결과를 초래할 수 있기 때문에
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램에 대한 잘못된 출력
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램.

-fno-수학-errno
단일 함수로 실행되는 수학 함수를 호출한 후 ERRNO를 설정하지 마십시오.
명령(예: sqrt). 수학 오류에 대한 IEEE 예외에 의존하는 프로그램
처리는 IEEE 산술을 유지하면서 속도를 위해 이 플래그를 사용하기를 원할 수 있습니다.
호환성.

이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 잘못된 출력을 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램의 경우
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램.

디폴트는 -fmath-errno.

Darwin 시스템에서 수학 라이브러리는 "errno"를 설정하지 않습니다. 그러므로 이유가 없다.
컴파일러가 그럴 가능성을 고려하고, -fno-수학-errno 이다
태만.

-재미있는 수학 최적화
(a) 인수 및
결과가 유효하고 (b) IEEE 또는 ANSI 표준을 위반할 수 있습니다. 링크 타임에 사용하면,
기본 FPU 제어 단어를 변경하는 라이브러리 또는 시작 파일이 포함될 수 있습니다.
다른 유사한 최적화.

이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 잘못된 출력을 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램의 경우
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램. 활성화
-fno 부호 있는 XNUMX, -fno 트래핑 수학, -연관 수학- 분수 수학.

디폴트는 -fno-안전하지 않은-수학 최적화.

-연관 수학
일련의 부동 소수점 연산에서 피연산자의 재연결을 허용합니다. 이것
계산 결과를 변경하여 ISO C 및 C++ 언어 표준을 위반할 수 있습니다.
참고: 재정렬은 XNUMX의 부호를 변경하고 NaN을 무시하고 금지 또는
언더플로 또는 오버플로 생성(따라서 반올림에 의존하는 코드에서는 사용할 수 없습니다.
"(x + 2**52) - 2**52"와 같은 동작. 또한 부동 소수점 비교를 재정렬하고
따라서 순서 비교가 필요한 경우에는 사용할 수 없습니다. 이 옵션에는 다음이 필요합니다.
-fno 부호 있는 XNUMX-fno 트래핑 수학 유효하다. 게다가 하지 않는다.
많은 의미 - 반올림 수학. Fortran의 경우 옵션은 다음과 같은 경우 자동으로 활성화됩니다.
-fno 부호 있는 XNUMX-fno 트래핑 수학 유효합니다.

디폴트는 -fno 연관 수학.

- 분수 수학
다음과 같은 경우 값으로 나누는 대신 값의 역수를 사용할 수 있습니다.
최적화를 가능하게 합니다. 예를 들어 "x / y"는 "x * (1/y)"로 대체될 수 있습니다.
"(1/y)"가 공통 하위 표현식 제거 대상인 경우 유용합니다. 이
정밀도를 잃고 값에서 작동하는 플롭 수를 늘립니다.

디폴트는 -fno-역수-수학.

- 유한 수학 전용
인수 및
결과는 NaN 또는 +-Infs가 아닙니다.

이 옵션은 어떤 사람도 켜져 있지 않습니다. -O 잘못된 출력을 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램의 경우
수학 함수에 대한 규칙/사양. 그러나 더 빠른 코드를 생성할 수 있습니다.
이러한 사양의 보증이 필요하지 않은 프로그램.

디폴트는 -fno-finite-math-only.

-fno 부호 있는 XNUMX
XNUMX의 부호를 무시하는 부동 소수점 산술에 대한 최적화를 허용합니다.
IEEE 산술은 고유한 +0.0 및 -0.0 값의 동작을 지정합니다.
x+0.0 또는 0.0*x와 같은 표현식의 단순화를 금지합니다.
- 유한 수학 전용). 이 옵션은 XNUMX 결과의 부호가
중요한.

디폴트는 -f부호가 붙은 XNUMX.

-fno 트래핑 수학
부동 소수점 연산이 사용자에게 표시되는 것을 생성할 수 없다고 가정하는 컴파일 코드
트랩. 이러한 트랩에는 XNUMX으로 나누기, 오버플로, 언더플로, 부정확한 결과 및
잘못된 작업. 이 옵션에는 다음이 필요합니다. -fno-시그널링-nans 유효하다.
이 옵션을 설정하면 "논스톱" IEEE 산술에 의존하는 경우 더 빠른 코드를 허용할 수 있습니다.
예를 들어.

이 옵션은 절대로 켜서는 안 됩니다. -O 결과를 초래할 수 있으므로 옵션
IEEE 또는 ISO의 정확한 구현에 의존하는 프로그램에 대한 잘못된 출력
수학 함수에 대한 규칙/사양.

디폴트는 -프래핑-수학.

- 반올림 수학
기본 부동 소수점 반올림을 가정하는 변환 및 최적화 비활성화
행동. 이것은 모든 부동 소수점에서 정수로의 변환에 대해 XNUMX으로 반올림되며,
다른 모든 산술 절단에 대해 가장 가까운 값으로 반올림합니다. 이 옵션은
FP 반올림 모드를 동적으로 변경하거나
기본이 아닌 반올림 모드로 실행됩니다. 이 옵션은
컴파일 시 부동 소수점 표현식(반올림 모드의 영향을 받을 수 있음)
및 부호 종속 존재 시 안전하지 않은 산술 변환
반올림 모드.

디폴트는 -fno 반올림 수학.

이 옵션은 실험적이며 현재 모든 GCC 비활성화를 보장하지 않습니다.
반올림 모드의 영향을 받는 최적화 GCC의 향후 버전은 다음을 제공할 수 있습니다.
C99의 "FENV_ACCESS" pragma를 사용하여 이 설정을 미세하게 제어합니다. 이 명령줄
옵션은 "FENV_ACCESS"의 기본 상태를 지정하는 데 사용됩니다.

-fsignaling-nans
IEEE 시그널링 NaN이 동안 사용자가 볼 수 있는 트랩을 생성할 수 있다고 가정하고 코드를 컴파일하십시오.
부동 소수점 연산. 이 옵션을 설정하면 변경될 수 있는 최적화가 비활성화됩니다.
신호 NaN으로 볼 수 있는 예외의 수입니다. 이 옵션은 다음을 의미합니다.
-프래핑-수학.

이 옵션을 사용하면 전처리기 매크로 "__SUPPORT_SNAN__"이 정의됩니다.

디폴트는 -fno-시그널링-nans.

이 옵션은 실험적이며 현재 모든 GCC 비활성화를 보장하지 않습니다.
신호 NaN 동작에 영향을 주는 최적화.

-fsingle-precision-상수
암시적으로 변환하는 대신 부동 소수점 상수를 단정밀도로 처리합니다.
배정밀도 상수로 변환합니다.

-fcx 제한 범위
활성화되면 이 옵션은 다음과 같은 경우 범위 축소 단계가 필요하지 않음을 나타냅니다.
복잡한 분할을 수행합니다. 또한 결과에 대한 확인이 없습니다.
복잡한 곱셈 또는 나눗셈은 "NaN + I*NaN"이며,
그 경우의 상황. 기본값은 -fno-cx-제한된 범위에 의해 활성화되지만
-빠른 수학.

이 옵션은 ISO C99 "CX_LIMITED_RANGE" pragma의 기본 설정을 제어합니다.
그럼에도 불구하고 이 옵션은 모든 언어에 적용됩니다.

-fcx-fortran-규칙
복잡한 곱셈과 나눗셈은 Fortran 규칙을 따릅니다. 범위 감소는 다음과 같이 수행됩니다.
복잡한 분할의 일부이지만 복잡한 분할의 결과가
곱셈 또는 나눗셈은 "NaN + I*NaN"이며 상황을 구하려는 시도입니다.
그 경우.

디폴트는 -fno-cx-fortran-규칙.

다음 옵션은 성능을 향상시킬 수 있지만 그렇지 않은 최적화를 제어합니다.
누구에 의해 활성화 -O 옵션. 이 섹션에는 다음을 생성할 수 있는 실험적 옵션이 포함되어 있습니다.
깨진 코드.

-f분기 확률
로 컴파일된 프로그램을 실행한 후 -fprofile-호, 두 번째로 컴파일할 수 있습니다.
사용 -f분기 확률, 횟수에 따라 최적화를 개선하기 위해
각 지점을 가져갔다. 프로그램을 컴파일할 때 -fprofile-호 저장을 종료합니다.
호 실행은 다음과 같은 파일로 계산됩니다. 소스 이름.gcda 각 소스 파일에 대해 NS
이 데이터 파일의 정보는 생성된
코드이므로 둘 다에 대해 동일한 소스 코드와 동일한 최적화 옵션을 사용해야 합니다.
편집.

-f분기 확률, GCC는 REG_BR_PROB 각각에 대한 참고 JUMP_INSN
CALL_INSN. 최적화를 개선하는 데 사용할 수 있습니다. 현재, 그들은 만 사용됩니다
한 곳에서: 에서 reorg.c, 분기가 가장 가능성이 높은 경로를 추측하는 대신
받아, REG_BR_PROB 값은 어떤 경로가 더 많이 사용되는지 정확하게 결정하는 데 사용됩니다.
자주.

-fprofile-값
와 결합하면 -fprofile-호, 코드를 추가하여 값에 대한 일부 데이터가
프로그램의 표현을 수집합니다.

-f분기 확률, 프로파일링 값에서 수집한 데이터를 다시 읽습니다.
최적화에 사용하기 위한 표현식입니다.

다음으로 활성화됨 -fprofile 생성-fprofile-사용.

-fvpt
와 결합하면 -fprofile-호, 수집할 코드를 추가하도록 컴파일러에 지시합니다.
표현식의 값에 대한 정보.

-f분기 확률, 수집된 데이터를 다시 읽고 실제로 수행합니다.
이를 기반으로 최적화합니다. 현재 최적화에는 전문화가 포함됩니다.
분모 값에 대한 지식을 사용하는 나눗셈 연산.

-frename 레지스터
남아 있는 레지스터를 사용하여 예약된 코드에서 잘못된 종속성을 피하려고 시도합니다.
레지스터 할당 후 오버. 이 최적화는
많은 레지스터. 대상이 채택한 디버그 정보 형식에 따라,
그러나 변수가 더 이상
"홈 레지스터".

기본적으로 활성화됨 -펀롤 루프-필 루프.

-추적자
꼬리 복제를 수행하여 수퍼 블록 크기를 확대합니다. 이 변환은 단순화
다른 최적화가 더 나은 작업을 수행할 수 있도록 하는 기능의 제어 흐름.

다음으로 활성화됨 -fprofile-사용.

-펀롤 루프
반복 횟수가 컴파일 시간 또는 컴파일 시간에 결정될 수 있는 루프를 풉니다.
루프 진입. -펀롤 루프 의미하다 -frerun-cse-후-루프, -fweb
-frename 레지스터. 또한 완전한 루프 필링(즉,
반복 횟수가 적은 루프). 이 옵션은 코드를 더 크게 만들고
더 빠르게 실행할 수도 있고 그렇지 않을 수도 있습니다.

다음으로 활성화됨 -fprofile-사용.

-Funroll-All-루프
루프가 다음과 같을 때 반복 횟수가 불확실하더라도 모든 루프를 풉니다.
들어갔다. 이렇게 하면 일반적으로 프로그램이 더 느리게 실행됩니다. -Funroll-All-루프 를 의미한다
같은 옵션 -펀롤 루프.

-필 루프
많이 롤링되지 않는 충분한 정보가 있는 루프를 벗깁니다(
프로필 피드백). 또한 완전한 루프 필링(즉,
반복 횟수가 적은 루프).

다음으로 활성화됨 -fprofile-사용.

-fmove-loop-불변
RTL 루프 옵티마이저에서 루프 불변 모션 패스를 활성화합니다. 수준에서 활성화됨
-O1

-펀스위치 루프
루프 불변 조건이 있는 분기를 루프 외부로 이동합니다.
두 가지의 루프(조건의 결과에 따라 수정됨).

-ffunction-섹션
-fdata 섹션
대상이
임의의 섹션을 지원합니다. 함수 이름 또는 데이터 항목 이름
출력 파일에서 섹션의 이름을 결정합니다.

링커가 최적화를 수행하여 개선할 수 있는 시스템에서 이 옵션을 사용하십시오.
명령 공간에서 참조의 위치. ELF 객체를 사용하는 대부분의 시스템
형식 및 Solaris 2를 실행하는 SPARC 프로세서에는 이러한 최적화가 포함된 링커가 있습니다.
AIX는 미래에 이러한 최적화를 가질 수 있습니다.

그렇게 함으로써 상당한 이점이 있는 경우에만 이 옵션을 사용하십시오. 때를
이러한 옵션을 지정하면 어셈블러와 링커가 더 큰 개체를 만들고
실행 파일도 느려집니다. 모든 항목에서 "gprof"를 사용할 수는 없습니다.
이 옵션을 지정하면 시스템에서 디버깅에 문제가 발생할 수 있습니다.
이 옵션과 -g.

-fbranch-대상-로드-최적화
프롤로그/에필로그 스레딩 전에 분기 대상 레지스터 로드 최적화를 수행합니다.
대상 레지스터의 사용은 일반적으로 다시 로드하는 동안에만 노출될 수 있으므로 호이스팅
루프 밖으로 로드하고 블록 간 스케줄링을 수행하려면 별도의 최적화가 필요합니다.
패스.

-fbranch-대상-로드-최적화2
프롤로그/에필로그 스레딩 후 분기 대상 레지스터 로드 최적화를 수행합니다.

-fbtr-bb-독점
분기 대상 레지스터 로드 최적화를 수행할 때 분기 대상을 재사용하지 마십시오.
모든 기본 블록 내에 등록합니다.

-fstack 보호기
스택 스매싱 공격과 같은 버퍼 오버플로를 확인하기 위해 추가 코드를 내보냅니다. 이것
취약한 개체가 있는 함수에 가드 변수를 추가하여 수행됩니다. 이것
alloca를 호출하는 함수와 8바이트보다 큰 버퍼가 있는 함수를 포함합니다.
가드는 함수가 입력될 때 초기화되고
기능이 종료됩니다. 가드 체크가 실패하면 오류 메시지가 출력되고 프로그램이
출구.

참고: Ubuntu 6.10 이상 버전에서는 이 옵션이 기본적으로 C, C++,
ObjC, ObjC++, 해당 사항이 없는 경우 -fno-스택 보호기, -nostdlib,도 아니다 -프리스탠딩 are
녹이다.

-fstack-프로텍터-all
처럼 -fstack 보호기 모든 기능이 보호된다는 점을 제외하고.

-f섹션 앵커
공유 "앵커"를 사용하여 기호 주소 계산의 수를 줄이십시오.
주변 물체를 나타내는 기호. 이 변환은 숫자를 줄이는 데 도움이 될 수 있습니다.
일부 대상에 대한 GOT 항목 및 GOT 액세스 수.

예를 들어 다음 함수 "foo"의 구현:

정적 int, b, c;
int foo (void) { return + b + c; }

일반적으로 세 변수의 주소를 모두 계산하지만 컴파일하면
-f섹션 앵커, 공통 앵커 포인트에서 변수에 액세스합니다.
대신에. 효과는 다음 의사 코드(유효한 C가 아님)와 유사합니다.

int foo(무효)
{
레지스터 int *xr = &x;
반환 xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

모든 대상이 이 옵션을 지원하는 것은 아닙니다.

--매개변수 name=가치
어떤 곳에서는 GCC가 다양한 상수를 사용하여 최적화의 양을 제어합니다.
수행. 예를 들어, GCC는 특정 이상을 포함하는 함수를 인라인하지 않습니다.
지시의 수. 명령줄에서 이러한 상수 중 일부를 제어할 수 있습니다.
를 사용하여 --매개변수 옵션을 선택합니다.

특정 매개변수의 이름과 값의 의미는
컴파일러의 내부이며 향후 예고 없이 변경될 수 있습니다.
출시.

각각의 경우, 가치 정수입니다. 허용되는 선택 name 주어진다
다음 표 :

예측 가능한 분기 결과
이 임계값보다 낮은 확률로 분기를 취할 것으로 예상되는 경우
(백분율로), 잘 예측 가능한 것으로 간주됩니다. 기본값은 10입니다.

최대 크로스 점프 에지
크로스점핑을 위해 고려할 최대 들어오는 에지 수입니다. 알고리즘
에 의해 사용되는 -크로스점프 각 블록으로 들어오는 에지의 수는 O(N^2)입니다.
값을 늘리면 최적화가 더 적극적으로 수행되어 컴파일 시간이 늘어납니다.
실행 파일 크기가 약간 개선되면 증가합니다.

min-crossjump-inns
두 블록의 끝에서 일치해야 하는 최소 명령어 수
크로스 점프하기 전에 그들에 대해 수행됩니다. 이 값은 다음과 같은 경우 무시됩니다.
여기서 교차점핑되는 블록의 모든 명령어가 일치합니다. NS
기본값은 5입니다.

최대 성장 복사-bb-insns
대신 기본 블록을 복사할 때 최대 코드 크기 확장 계수
점프. 확장은 점프 명령을 기준으로 합니다. 기본값은
8.

최대-고토-중복-insns
로 점프하는 블록에 복제할 최대 명령어 수
계산된 고토. 여러 패스에서 O(N^2) 동작을 피하기 위해 GCC 요인
컴파일 프로세스 초기에 goto를 계산하고 최대한 늦게 분해합니다.
가능한. 최대값 이하의 기본 블록 끝에서만 계산된 점프
goto-duplication-insns는 팩터링되지 않습니다. 기본값은 8입니다.

최대 지연-슬롯-insn-검색
명령을 찾을 때 고려해야 할 최대 명령 수
지연 슬롯을 채웁니다. 이 임의의 명령 수보다 많은 경우
검색하면 지연 슬롯을 채우는 데 따른 시간 절약이 최소화되므로 중지
수색. 값을 높이면 더 적극적인 최적화를 의미하므로
실행 시간의 약간의 개선으로 컴파일 시간이 증가합니다.

최대 지연 슬롯 라이브 검색
지연 슬롯을 채우려고 할 때 고려해야 할 최대 명령 수
유효한 라이브 레지스터 정보가 있는 블록을 검색할 때. 이것을 증가
임의로 선택한 값은 보다 적극적인 최적화를 의미하며,
컴파일 시간. 지연 슬롯 코드가 다음과 같을 때 이 매개변수를 제거해야 합니다.
제어 흐름 그래프를 유지하기 위해 다시 작성되었습니다.

최대 gcse 메모리
다음을 수행하기 위해 할당될 대략적인 최대 메모리 양
전역 공통 부분식 제거 최적화를 수행합니다. 메모리가 더 많으면
지정된 것보다 필요한 경우 최적화가 수행되지 않습니다.

최대 gcse 삽입 비율
삭제에 대한 표현식 삽입의 비율이 이 값보다 클 경우
어떤 표현식이든 RTL PRE는 표현식을 삽입하거나 제거하여 그대로 둡니다.
명령 스트림에서 부분적으로 중복된 계산. 기본값은
20.

최대 보류 목록 길이
플러시 전에 스케줄링이 허용하는 보류 중인 종속성의 최대 수
현재 상태와 다시 시작합니다. 분기 또는 호출이 거의 없는 대규모 함수
불필요하게 메모리와 리소스를 소비하는 지나치게 큰 목록을 만들 수 있습니다.

최대 모듈로 역추적 시도
모듈로일 때 스케줄러가 수행해야 하는 최대 역추적 시도 횟수
루프 스케줄링. 값이 클수록 컴파일 시간이 기하급수적으로 늘어날 수 있습니다.

최대 인라인-insns-단일
여러 매개변수가 gcc에서 사용되는 트리 인라이너를 제어합니다. 이 숫자는
최대 명령어 수(GCC의 내부 표현으로 계산)
트리 인라이너가 인라이닝을 위해 고려할 단일 함수. 이것만
인라인으로 선언된 함수와 클래스 선언에서 구현된 메서드에 영향을 줍니다.
(C++). 기본값은 400입니다.

최대 인라인-insns-자동
때 사용 -finline-함수 (포함 된 -O3), 많은 기능
그렇지 않으면 컴파일러에서 인라인으로 고려되지 않는 경우 조사됩니다. NS
이러한 기능, 기능에 비해 다른(더 제한적인) 제한
선언된 인라인을 적용할 수 있습니다. 기본값은 40입니다.

대기능 여관
정말 큰 기능을 지정하는 제한. 이 제한보다 큰 기능의 경우
인라인 후 인라인은 다음으로 제한됩니다. --매개변수 큰 기능 성장. 이
매개변수는 주로
백엔드에서 사용하는 선형 알고리즘. 기본값은 2700입니다.

큰 기능 성장
인라인으로 인한 대형 함수의 최대 증가를 백분율로 지정합니다. NS
기본값은 100으로 큰 기능 증가를 원래의 2.0배로 제한합니다.
크기.

대형 여관
큰 번역 단위를 지정하는 제한입니다. 단위 인라인으로 인한 성장
이 제한보다 큰 것은 다음으로 제한됩니다. --매개변수 인라인 단위 성장. 소형 유닛용
이것은 너무 빡빡할 수 있습니다(인라인이고
A를 세 번만 부르는 B. B가 A에 비해 작은 경우 단위의 성장
300\%이지만 이러한 인라인은 매우 제정신입니다. 다음으로 구성된 매우 큰 단위의 경우
작은 인라인 가능 함수이지만 전체 단위 성장 제한이 필요합니다.
코드 크기의 기하급수적인 폭발을 방지하십시오. 따라서 더 작은 단위의 경우 크기는
증가 --매개변수 대형 여관 신청하기 전에 --매개변수 인라인 단위 성장.
기본값은 10000입니다.

인라인 단위 성장
인라인으로 인한 컴파일 단위의 최대 전체 증가를 지정합니다. NS
기본값은 단위 증가를 원래 크기의 30배로 제한하는 1.3입니다.

ipcp 단위 성장
프로시저 간으로 인한 컴파일 단위의 최대 전체 증가를 지정합니다.
지속적인 전파. 기본값은 10이며 단위 성장을 1.1로 제한합니다.
원래 크기의 배.

대형 스택 프레임
큰 스택 프레임을 지정하는 제한입니다. 알고리즘을 인라인하는 동안
이 한계를 너무 많이 초과하지 않도록. 기본값은 256바이트입니다.

대형 스택 프레임 성장
인라인으로 인한 대형 스택 프레임의 최대 증가를 백분율로 지정합니다.
기본값은 1000으로 큰 스택 프레임 증가를 11배로 제한합니다.
원래 크기.

최대 인라인-insns-재귀
최대 인라인-insns-재귀-자동
자기 재귀 인라인의 인라인 복사본의 최대 명령어 수를 지정합니다.
함수는 재귀 인라인을 수행하여 성장할 수 있습니다.

인라인으로 선언된 함수의 경우 --매개변수 최대 인라인-insns-재귀 에 취해진다
계정. 인라인으로 선언되지 않은 함수의 경우 재귀 인라인은 다음 경우에만 발생합니다.
-finline-함수 (포함 된 -O3)이 활성화되고 --매개변수 최대-인라인-insns-
재귀 자동 사용. 기본값은 450입니다.

최대 인라인 재귀 깊이
최대 인라인 재귀 깊이 자동
재귀 인라인에서 사용되는 최대 재귀 깊이를 지정합니다.

인라인으로 선언된 함수의 경우 --매개변수 최대 인라인 재귀 깊이 에 취해진다
계정. 인라인으로 선언되지 않은 함수의 경우 재귀 인라인은 다음 경우에만 발생합니다.
-finline-함수 (포함 된 -O3)이 활성화되고 --매개변수 최대 인라인 재귀
깊이 자동 사용. 기본값은 8입니다.

최소 인라인 재귀 확률
재귀 인라인은 깊은 재귀가 있는 함수에 대해서만 수익성이 있습니다.
평균을 내고 재귀 깊이가 적은 함수에 손상을 줄 수 있습니다.
다른 옵티마이저에 대한 프롤로그 크기 또는 함수 본문의 복잡성.

프로필 피드백을 사용할 수 있는 경우(참조 -fprofile 생성) 실제 재귀
주어진 호출을 통해 함수가 재귀할 확률에서 깊이를 추측할 수 있습니다.
표현. 이 매개변수는 인라인을 호출 표현식으로만 제한합니다.
확률이 주어진 임계값(퍼센트)을 초과합니다. 기본값은 10입니다.

얼리 인라이닝 인스
초기 인라이너가 만들 수 있는 성장을 지정합니다. 사실상 양을 증가시킨다.
추상화 페널티가 큰 코드를 인라인합니다. 기본값은 10입니다.

최대 초기 인라이너 반복
최대 초기 인라이너 반복
초기 인라이너의 반복 제한. 이것은 기본적으로 중첩된 수를 제한합니다.
간접 호출은 초기 내부자가 해결할 수 있습니다. 더 깊은 사슬은 여전히 ​​늦게 처리됩니다.
인라이닝.

comdat 공유 확률
comdat 공유 확률
comdat 가시성이 있는 C++ 인라인 함수가 다음과 같이 될 확률(퍼센트)
여러 컴파일 단위에서 공유됩니다. 기본값은 20입니다.

최소 벡터 루프 경계
루프가 벡터화되지 않는 최소 반복 횟수
-ftree 벡터화 사용. 벡터화 후 반복 횟수는 다음과 같아야 합니다.
벡터화를 허용하려면 이 옵션에서 지정한 값보다 커야 합니다. NS
기본값은 0입니다.

gcse 비용 거리 비율
식을 이동할 수 있는 최대 거리 계산의 배율 인수
GCSE 최적화. 이것은 현재 코드 호이스팅 패스에서만 지원됩니다.
비율이 클수록 간단한 코드 호이스팅이 더 공격적입니다.
표현식, 즉 비용이 다음보다 작은 표현식 gcse-무제한-
비용. 0을 지정하면 단순 표현식의 호이스팅이 비활성화됩니다. 기본값
값은 10입니다.

gcse-무제한 비용
비용은 대략 하나의 일반적인 기계 명령 비용으로 측정됩니다.
GCSE 최적화는 표현식이 이동할 수 있는 거리를 제한하지 않습니다.
이것은 현재 코드 호이스팅 패스에서만 지원됩니다. 비용이 적게 들수록,
더 공격적인 코드 호이스팅이 될 것입니다. 0을 지정하면 모든
무제한 거리를 여행하는 표현. 기본값은 3입니다.

최대 호이스트 깊이
호이스트할 표현식에 대한 도미네이터 트리의 검색 깊이입니다. 이것은 사용
호이스팅 알고리즘에서 0차 동작을 피하기 위해. XNUMX의 값은 피할 것입니다
검색을 제한하지만 거대한 기능의 컴파일 속도를 늦출 수 있습니다. 기본값
값은 30입니다.

최대 꼬리 병합 비교
bb를 비교할 유사한 bb의 최대량입니다. 이것은 피하기 위해 사용됩니다
트리 테일 병합의 10차 동작. 기본값은 XNUMX입니다.

최대 꼬리 병합 반복
함수에 대한 전달의 최대 반복 횟수입니다. 이것은 사용됩니다
트리 테일 병합에서 컴파일 시간을 제한합니다. 기본값은 2입니다.

최대 언롤링된 기능
루프가 다음과 같은 경우 루프가 가져야 하는 최대 명령어 수
unrolled, 루프가 펼쳐진 경우 루프 코드의 횟수를 결정합니다.
펼쳐집니다.

최대-평균-unrolled-insns
실행 확률에 따라 편향된 최대 명령어 수
루프가 풀린 경우 루프가 있어야 하고 루프가 풀린 경우 루프가 있어야 합니다.
루프 코드가 펼쳐지는 횟수를 결정합니다.

최대 언롤 시간
단일 루프의 최대 언롤링 수입니다.

최대 껍질을 벗긴 기능
루프가 벗겨지면 루프가 가져야 하는 최대 명령어 수,
루프가 벗겨지면 루프 코드가 벗겨지는 횟수가 결정됩니다.

최대 필 시간
단일 루프의 최대 필링 수입니다.

최대-완전-필링-insns
완전히 벗겨진 루프의 최대 인스 수입니다.

최대 완전 박리 시간
완전한 필링에 적합한 루프의 최대 반복 횟수입니다.

최대 완전 껍질 루프 중첩 깊이
완전한 필링에 적합한 루프 네스트의 최대 깊이.

최대-unswitch-insns
전환되지 않은 루프의 최대 insns 수입니다.

최대 스위치 해제 수준
단일 루프에서 전환되지 않은 최대 분기 수입니다.

비싸다
루프 불변 모션에서 값비싼 표현식의 최소 비용.

iv-모든 후보를 고려
모든 후보보다 낮은 유도 변수 후보의 수에 구속됨
유도 변수 최적화의 각 용도에 대해 고려됩니다. 가장
더 많은 후보자가 있는 경우 관련 후보자를 고려하여
XNUMX차 시간 복잡도.

iv-최대 고려 용도
유도 변수 최적화는 더 많은 유도를 포함하는 루프를 포기합니다.
변수 사용.

iv-항상 정리할 수 있습니다.
집합의 후보 수가 이 값보다 작으면 항상 다음을 시도합니다.
새로운 iv가 추가될 때 최적화하는 동안 세트에서 불필요한 iv를 제거합니다.
세트에.

scev-max-expr-크기
스칼라 진화 분석기에서 사용되는 표현식의 크기에 따라 달라집니다. 크기가 큰
표현은 분석기를 느리게 합니다.

scev-max-expr-복잡도
스칼라 진화 분석기의 표현식의 복잡성에 구속됩니다.
복잡한 표현식은 분석기를 느리게 만듭니다.

오메가 최대 변수
Omega 제약 시스템의 최대 변수 수입니다. 기본값
128입니다.

Omega-max-geqs
Omega 제약 시스템의 최대 부등식 수입니다. 기본값
값은 256입니다.

오메가-맥스-eqs
Omega 제약 시스템의 최대 등식 수입니다. 기본값
128입니다.

오메가-맥스-와일드 카드
Omega 솔버가 처리할 수 있는 최대 와일드카드 변수 수
끼워 넣다. 기본값은 18입니다.

오메가 해시 테이블 크기
Omega 솔버의 해시 테이블 크기입니다. 기본값은 550입니다.

오메가 맥스 키
Omega 솔버가 사용하는 최대 키 수입니다. 기본값은 500입니다.

오메가 제거 중복 제약
1로 설정하면 비용이 많이 드는 방법을 사용하여 모든 중복 제약 조건을 제거합니다. NS
기본값은 0입니다.

vect-max-version-for-alignment-checks
루프를 수행할 때 수행할 수 있는 런타임 검사의 최대 수
벡터라이저에서 정렬을 위한 버전 관리. ftree-vect-loop-version 옵션 참조


vect-max-version-별칭-검사
루프를 수행할 때 수행할 수 있는 런타임 검사의 최대 수
벡터라이저에서 별칭에 대한 버전 관리. ftree-vect-loop-version 옵션을 참조하십시오.
자세한 정보.

추적할 최대 반복 횟수
분석을 위한 무차별 대입 알고리즘 루프의 최대 반복 횟수
루프 반복 횟수가 평가를 시도합니다.

뜨거운 bb 계수 분수
프로그램에서 기본 블록의 최대 반복 횟수의 비율을 선택합니다.
주어진 기본 블록은 핫으로 간주되어야 합니다.

핫 bb 주파수 분수
기본 블록 실행의 진입 블록 빈도의 비율을 선택하십시오.
기본 블록이 주어진 기능은 핫으로 간주되어야 합니다.

최대 예측 반복
정적으로 예측하는 최대 루프 반복 횟수입니다. 이것은 유용합니다
함수에 알려진 경계가 있는 단일 루프와 다음이 있는 다른 루프가 포함된 경우
알려지지 않은. 알려진 반복 횟수를 올바르게 예측하는 반면 알려지지 않은
반복 횟수의 평균은 대략 10입니다.
경계는 다른 경계에 비해 인위적으로 차갑게 나타납니다.

정렬 임계값
기능에서 기본 블록의 최대 실행 빈도의 비율을 선택합니다.
주어진 기본 블록이 정렬됩니다.

정렬 루프 반복
선택한 반복 횟수만큼 반복될 것으로 예상되는 루프
정렬.

추적자 동적 범위
추적자 동적 적용 범위 피드백
이 값은 주어진 비율의 슈퍼블록 형성을 제한하는 데 사용됩니다.
실행된 명령어를 다룹니다. 이것은 불필요한 코드 크기 확장을 제한합니다.

XNUMXD덴탈의 추적자 동적 적용 범위 피드백 프로필 피드백이 다음과 같은 경우에만 사용됩니다.
사용 가능. 실제 프로필(정적으로 추정된 프로필과 대조적으로)은
임계값이 더 큰 값을 허용하는 덜 균형.

추적자 최대 코드 성장
코드 성장이 주어진 백분율에 도달하면 꼬리 중복을 중지하십시오. 이것은
대부분의 중복이 나중에 크로스에서 제거될 것이기 때문에 다소 엉터리 주장
점핑하므로 원하는 코드 증가보다 훨씬 높은 값으로 설정할 수 있습니다.

추적자 최소 분기 비율
최상의 에지의 역확률이 이보다 작으면 역성장을 중지합니다.
임계값(퍼센트).

추적자 최소 분기 비율
추적기 최소 분기 비율 피드백
최상의 가장자리가 이보다 낮은 확률을 가지면 앞으로 성장을 중지합니다.
문지방.

비슷하게 추적자 동적 범위 두 개의 값이 있으며 하나는 컴파일용입니다.
프로필 피드백용과 없는 컴파일용 하나. 컴파일 값
프로필 피드백은 더 보수적이어야 합니다.
효과적인 추적자.

최대 cse 경로 길이
cse가 고려하는 경로의 최대 기본 블록 수입니다. 기본값은 10입니다.

최대 cse-insns
최대 명령어 CSE는 플러시 전에 처리합니다. 기본값은 1000입니다.

ggc-분-확장
GCC는 가비지 수집기를 사용하여 자체 메모리 할당을 관리합니다. 이 매개변수
가비지 수집기의 힙이 있어야 하는 최소 백분율을 지정합니다.
컬렉션 간에 확장할 수 있습니다. 이것을 조정하면 컴파일 속도가 향상될 수 있습니다.
코드 생성에는 영향을 미치지 않습니다.

기본값은 30% + 70% * (RAM/1GB)이며 RAM >= 100GB인 경우 상한은 1%입니다.
"getrlimit"를 사용할 수 있는 경우 "RAM"이라는 개념은 실제 RAM 중 가장 작은 것이며
"RLIMIT_DATA" 또는 "RLIMIT_AS". GCC가 특정 메모리에서 RAM을 계산할 수 없는 경우
플랫폼에서는 30%의 하한이 사용됩니다. 이 매개변수를 설정하고 gc-분-
쌓다 XNUMX으로 설정하면 모든 기회에서 전체 수집이 발생합니다. 이것은
매우 느리지만 디버깅에 유용할 수 있습니다.

ggc-분-힙 크기
귀찮게 수집을 시작하기 전의 가비지 수집기 힙의 최소 크기
쓰레기. 힙이 확장된 후 첫 번째 컬렉션이 발생합니다. ggc-분-확장%
그 너머 ggc-분-힙 크기. 다시 말하지만, 이것을 조정하면 컴파일 속도가 향상될 수 있으며,
코드 생성에 영향을 미치지 않습니다.

기본값은 RAM/8, RLIMIT_RSS 또는
RLIMIT_DATA 또는 RLIMIT_AS는 초과되지 않지만 하한은 4096입니다.
(131072MB) 및 상한 128(XNUMXMB). GCC가 불가능한 경우
특정 플랫폼에서 RAM을 계산하기 위해 하한이 사용됩니다. 이것을 설정
매우 큰 매개변수는 가비지 수집을 효과적으로 비활성화합니다. 이것을 설정
매개 변수 및 ggc-분-확장 XNUMX으로 설정하면 매 시간마다 전체 수집이 발생합니다.
기회를 제공합니다.

최대 다시 로드 검색-insns
명령어 재로드의 최대 횟수는 동등한 항목을 역으로 찾아야 합니다.
등록하다. 값을 높이면 더 적극적인 최적화를 의미하므로
약간 더 나은 성능으로 컴파일 시간이 증가합니다. 기본값
값은 100입니다.

최대 cselib 메모리 위치
cselib가 고려해야 하는 최대 메모리 위치 수.
값을 늘리면 최적화가 더 적극적으로 수행되어 컴파일 시간이 늘어납니다.
약간 더 나은 성능으로 증가합니다. 기본값은 500입니다.

재정렬 블록 복제
재정렬-블록-중복-피드백
무조건 분기 사용 여부를 결정하기 위해 기본 블록 재정렬 패스에서 사용
또는 대상에 코드를 복제하십시오. 예상되는 코드가 중복됩니다.
크기는 이 값에 무조건의 예상 크기를 곱한 것보다 작습니다.
프로그램의 핫스팟에 뛰어든다.

XNUMXD덴탈의 재정렬-블록-복제-피드백 프로필 피드백이 다음과 같은 경우에만 사용됩니다.
사용 가능하며 다음보다 높은 값으로 설정할 수 있습니다. 재정렬-블록-복제 이후
핫스팟에 대한 정보가 더 정확합니다.

최대-sched-ready-insns
스케줄러를 발행할 준비가 된 최대 명령어 수는 다음과 같아야 합니다.
첫 번째 스케줄링 패스 동안 주어진 시간에 고려하십시오. 값 증가
더 철저한 검색을 의미하므로 아마도 컴파일 시간이 증가할 것입니다.
작은 이익. 기본값은 100입니다.

최대 일정 지역 블록
블록 간 고려 대상 영역의 최대 블록 수
일정. 기본값은 10입니다.

최대 파이프라인 영역 블록
파이프라이닝을 위해 고려되는 지역의 최대 블록 수
선택적 스케줄러 기본값은 15입니다.

최대-sched-지역-insns
Interblock 고려 대상 지역 내 최대 숙소 수
일정. 기본값은 100입니다.

최대 파이프라인-지역-insns
파이프라이닝을 위해 고려되는 지역의 최대 여관 수
선택적 스케줄러 기본값은 200입니다.

최소 사양 문제
인터블록의 소스 블록에 도달할 최소 확률(백분율)
추측성 일정. 기본값은 40입니다.

최대-sched-확장-지역-iters
영역을 확장하기 위해 CFG를 통한 최대 반복 횟수입니다. 0 - 비활성화
영역 확장, N - 최대 N 반복 수행. 기본값은 0입니다.

최대-sched-insn-충돌-지연
투기적 움직임에 대해 고려되는 여관의 최대 충돌 지연입니다.
기본값은 3입니다.

일정-사양-문제-컷오프
투기 성공의 최소 확률(백분율), 따라서 투기적
여관이 예정되어 있습니다. 기본값은 40입니다.

sched-mem-true-dep-비용
동일한 메모리를 대상으로 하는 저장소와 로드 사이의 최소 거리(CPU 주기)
위치. 기본값은 1입니다.

selsched-max-lookahead
선택적 스케줄링의 미리보기 창의 최대 크기입니다. 깊이이다
사용 가능한 지침을 검색합니다. 기본값은 50입니다.

selsched-최대-sched-시간
선택 기간 동안 지침이 예약되는 최대 횟수
일정. 이것은 반복 횟수에 대한 제한입니다.
명령이 파이프라인될 수 있습니다. 기본값은 2입니다.

selsched-max-insns-이름 바꾸기
준비 목록에서 고려되는 최상의 명령의 최대 수
선택적 스케줄러에서 이름 바꾸기. 기본값은 2입니다.

SMS-min-sc
스윙 모듈로 스케줄러가 생성할 스테이지 수의 최소값입니다. NS
기본값은 2입니다.

최대 마지막 값 rtl
표현식에 기록될 수 있는 RTL의 수로 측정된 최대 크기
의사 레지스터에 대한 결합기에서 해당 레지스터의 마지막으로 알려진 값으로. NS
기본값은 10000입니다.

정수 공유 제한
작은 정수 상수는 공유 데이터 구조를 사용하여 컴파일러의
메모리 사용 및 속도 증가. 이것은 공유의 최대값을 설정합니다.
정수 상수. 기본값은 256입니다.

최소 가상 매핑
증분 SSA 업데이터에서 가상 매핑의 최소 수를 지정합니다.
에 의해 정의된 가상 매핑 휴리스틱을 트리거하기 위해 등록되어야 합니다.
가상 매핑 비율. 기본값은 100입니다.

가상 매핑 비율
virtual mappings의 개수가 virtual-mappings-ratio보다 큰 경우
업데이트할 가상 기호의 수가 증가하면 증분 SSA 업데이트 프로그램이
해당 기호에 대한 전체 업데이트. 기본 비율은 3입니다.

ssp 버퍼 크기
스택 스매싱을 수신할 버퍼(예: 배열)의 최소 크기
때 보호 -fstack 보호 사용.

Ubuntu 10.10 이전의 이 기본값은 "8"이었습니다. 현재 "4"입니다.
스택 보호기에 의해 보호되는 기능의 수.

최대-점프-스레드-중복-stmts
다음과 같은 경우 복제해야 하는 블록에 허용되는 최대 명령문 수
스레딩 점프.

최대 필드 대 필드 감지
필드에 민감한 방식으로 처리할 구조의 최대 필드 수
포인터 분석 중. 기본값은 -O0의 경우 1이고 -Os의 경우 -O100 및 XNUMX입니다.
-O2 및 -O3.

프리페치 대기 시간
프리페치 전에 실행되는 평균 명령어 수 추정
완료. 미리 가져오는 거리는 이 상수에 비례합니다.
이 수를 늘리면 미리 가져오는 스트림이 줄어들 수도 있습니다(참조
동시 프리페치).

동시 프리페치
동시에 실행할 수 있는 최대 프리페치 수입니다.

l1-캐시-라인-크기
L1 캐시의 캐시 라인 크기(바이트)입니다.

l1 캐시 크기
L1 캐시의 크기(KB)입니다.

l2 캐시 크기
L2 캐시의 크기(KB)입니다.

최소 insn 대 프리페치 비율
명령어 수와 프리페치 수 사이의 최소 비율
루프에서 프리페치를 활성화합니다.

prefetch-min-insn-to-mem 비율
명령어 수와 메모리 수 사이의 최소 비율
루프에서 프리페치를 활성화하기 위한 참조.

표준 유형 사용
컴파일러가 "표준" 유형 시스템을 사용해야 하는지 여부입니다. 기본적으로 이
항상 1이어야 하며, 비교를 위해 보다 효율적인 내부 메커니즘을 사용합니다.
C++ 및 Objective-C++의 유형. 그러나 표준 유형 시스템의 버그가
컴파일 실패를 일으키는 경우 이 값을 0으로 설정하여 표준 유형을 비활성화합니다.

스위치 변환 최대 분기 비율
스위치 초기화 변환은 다음보다 큰 어레이 생성을 거부합니다.
스위치 변환 최대 분기 비율 스위치의 분기 수를 곱합니다.

최대 부분 길이
트리 부분 동안 계산된 부분적 익스트림 집합의 최대 길이
중복 제거 최적화(-fttree-pre)에서 최적화할 때 -O3 이상.
일부 소스 코드의 경우 향상된 부분 중복 제거
최적화가 실행되어 호스트에서 사용 가능한 모든 메모리를 소모할 수 있습니다.
기계. 이 매개변수는 계산되는 세트의 길이에 대한 제한을 설정합니다.
가출 행동을 방지합니다. 이 매개변수의 값을 0으로 설정하면
무제한 설정 길이를 허용합니다.

sccvn-max-scc-크기
SCCVN 처리 중 SCC(강력하게 연결된 구성 요소)의 최대 크기입니다. 만약에
이 제한에 도달하면 전체 기능에 대한 SCCVN 처리가 수행되지 않으며
그에 따른 최적화가 비활성화됩니다. 기본 최대 SCC 크기는
10000.

ira-최대-루프-번호
IRA는 기본적으로 지역 레지스터 할당을 사용합니다. 함수에 더 많은 내용이 포함된 경우
루프는 이 매개변수에 의해 주어진 수보다 많아야 주어진 수의
가장 자주 실행되는 루프는 지역 레지스터 할당을 위한 영역을 형성합니다.
매개변수의 기본값은 100입니다.

ira-max-충돌-테이블-크기
IRA는 복잡한 알고리즘을 사용하여 충돌 테이블을 압축하지만,
테이블은 여전히 ​​거대한 기능을 위해 과도한 양의 메모리를 필요로 할 수 있습니다. 만약
함수에 대한 충돌 테이블은 다음에서 지정한 크기(MB)보다 클 수 있습니다.
매개변수 대신 레지스터 할당자는 더 빠르고 간단하며 더 낮은 값을 사용합니다.
의사 레지스터 충돌 테이블을 구축할 필요가 없는 품질 알고리즘.
매개변수의 기본값은 2000입니다.

ira-루프-예약-regs
IRA는 결정을 위한 루프에서 보다 정확한 레지스터 압력을 평가하는 데 사용할 수 있습니다.
루프 불변량을 이동하려면(참조 -O3). 예약된 사용 가능한 레지스터 수
이 매개변수는 몇 가지 다른 목적을 제공합니다. 기본 값
매개변수는 2이며, 이는 일반적으로 필요한 최소 레지스터 수입니다.
지침. 이 값은 수많은 실험에서 발견된 가장 좋은 값입니다.

루프 불변 최대-bbs-in-loop
루프 불변 동작은 컴파일 시간과 컴파일 시간 모두에서 매우 비쌀 수 있습니다.
매우 큰 루프와 함께 필요한 컴파일 시간 메모리의 양. 더 많은 루프
이 매개변수보다 기본 블록에는 루프 불변 모션 최적화가 없습니다.
그들에 수행. 매개변수의 기본값은 -O1000 및 1의 경우 10000입니다.
-O2 이상용.

루프-최대-datarefs-for-datadeps
데이터 종속성을 구축하는 것은 매우 큰 루프의 경우 비용이 많이 듭니다. 이 매개변수
데이터에 대해 고려되는 루프의 데이터 참조 수를 제한합니다.
의존성 분석. 이러한 큰 루프는 다음으로 처리되지 않습니다.
루프 데이터 종속성을 사용한 최적화. 기본값은 1000입니다.

최대 변수 트랙 크기
변수 추적 데이터 흐름 중에 사용할 해시 테이블 슬롯의 최대 수를 설정합니다.
어떤 기능의 분석. 에서 변수 추적으로 이 제한을 초과하는 경우
할당이 활성화되면 해당 기능에 대한 분석이 할당 없이 재시도됩니다.
함수에서 모든 디버그 인스턴스를 제거합니다. 없이도 한도를 초과한 경우
debug insns, var 추적 분석은 기능에 대해 완전히 비활성화됩니다.
매개변수를 XNUMX으로 설정하면 무제한이 됩니다.

max-vartrack-expr-깊이
변수 이름을 매핑하거나
값 표현식에 대한 디버그 임시. 이것은 더 많은 것을 위해 컴파일 시간을 교환합니다
완전한 디버그 정보. 너무 낮게 설정하면 값 표현식이
사용 가능하고 디버그 정보로 표시될 수 있으며 결국 사용되지 않을 수 있습니다.
이 값을 높게 설정하면 컴파일러가 더 복잡한 디버그를 찾을 수 있습니다.
표현식이지만 컴파일 시간과 메모리 사용량이 늘어날 수 있습니다. 기본값은 12입니다.

최소-nondebug-insn-uid
nondebug insns에 대해 이 매개변수에서 시작하는 uid를 사용하십시오. 이하의 범위
매개변수는
-fvar-추적 할당, 그러나 디버그 insns는 위의 (중첩되지 않은) uid를 얻을 수 있습니다.
예약된 범위가 소진된 경우입니다.

ipa-sra-ptr-성장 인자
IPA-SRA는 집계에 대한 포인터를 하나 이상의 새 매개변수로 대체합니다.
누적 크기가 다음보다 작거나 같을 때만 ipa-sra-ptr-성장 인자
원래 포인터 매개변수의 크기를 곱합니다.

tm-최대 집계 크기
트랜잭션에서 스레드 로컬 변수의 복사본을 만들 때 이 매개변수는
변수가 로깅과 함께 저장될 이후의 크기를 바이트 단위로 지정합니다.
코드 시퀀스 쌍을 저장/복원하는 것과는 대조적으로 기능합니다. 이 옵션만
사용할 때 적용 -fgnu-tm.

흑연-최대-nb-scop-params
흑연 루프 변환에서 기하급수적인 영향을 피하기 위해
SCoP(Static Control Part)의 매개변수는 제한적입니다. 기본값은 10입니다.
매개변수. 컴파일 시 값을 알 수 없고 정의된 변수
SCoP 외부는 SCoP의 매개변수입니다.

기능당 graphite-max-bbs
SCoP 탐지 시 기하급수적인 영향을 피하기 위해 함수의 크기
Graphite에 의해 분석됩니다. 기본값은 100 기본 블록입니다.

루프 블록 타일 크기
루프 차단 또는 스트립 마이닝 변환, 사용 가능 -floop-블록 or
-floop-스트립-광산, 주어진 수만큼 루프 네스트의 각 루프를 제거합니다.
반복. 스트립 길이는 다음을 사용하여 변경할 수 있습니다. 루프 블록 타일 크기
매개변수. 기본값은 51회 반복입니다.

ipa-cp-값-목록-크기
IPA-CP는 함수에 전달된 가능한 모든 값과 유형을 추적하려고 시도합니다.
매개변수를 전파하고 가상화를 수행합니다. ipa-cp-값-
목록 크기 하나의 형식당 저장하는 값 및 유형의 최대 수입니다.
함수의 매개변수.

lto 파티션
WHOPR 컴파일 중에 생성되는 원하는 파티션 수를 지정합니다. NS
파티션 수는 컴파일에 사용되는 CPU 수를 초과해야 합니다. NS
기본값은 32입니다.

lto-최소 파티션
WHOPR에 대한 최소 파티션 크기(예상 지침). 이것은 방지
아주 작은 프로그램을 너무 많은 파티션으로 분할하는 비용.

cxx-max-네임스페이스-for-diagnostic-help
C++ 이름 조회 시 제안을 참조할 최대 네임스페이스 수
식별자에 대해 실패합니다. 기본값은 1000입니다.

싱크 주파수 임계값
대상 블록의 최대 상대 실행 빈도(백분율)
명령문 싱킹을 허용하기 위해 명령문의 원래 블록에 상대적
성명. 숫자가 클수록 더 공격적인 문 싱크가 발생합니다. NS
기본값은 75입니다.
메모리 피연산자는 훨씬 더 수익성이 높기 때문에 가라앉습니다.

최대 매장 수
매몰될 수 있는 조건부 저장소 쌍의 최대 수입니다. 경우 0으로 설정
벡터화(-ftree 벡터화) 또는 if 변환(-ftree-loop-if-변환)
비활성화됩니다. 기본값은 2입니다.

허용 로드 데이터 레이스
옵티마이저가 로드 시 새로운 데이터 경쟁을 도입하도록 허용합니다. 허용하려면 1로 설정하고,
그렇지 않으면 0으로 설정합니다. 이 옵션은
-f메모리 모델= 옵션을 선택합니다.

허용 저장 데이터 레이스
최적화 프로그램이 상점에 새로운 데이터 경쟁을 도입하도록 허용합니다. 허용하려면 1로 설정하고,
그렇지 않으면 0으로 설정합니다. 이 옵션은
-f메모리 모델= 옵션을 선택합니다.

허용-포장-로드-데이터 레이스
최적화 프로그램이 압축된 데이터 로드에 대해 새로운 데이터 경쟁을 도입하도록 허용합니다. 1로 설정
허용, 그렇지 않으면 0. 이 옵션은 다음에서 암시적으로 설정하지 않는 한 기본적으로 활성화됩니다.
전에, -f메모리 모델= 옵션을 선택합니다.

허용 포장 저장 데이터 경주
최적화 프로그램이 압축된 데이터 저장소에 새로운 데이터 경쟁을 도입할 수 있도록 합니다. 1로 설정
허용, 그렇지 않으면 0. 이 옵션은 다음에서 암시적으로 설정하지 않는 한 기본적으로 활성화됩니다.
전에, -f메모리 모델= 옵션을 선택합니다.

케이스 값 임계값
점프 테이블을 사용하는 것이 가장 좋은 서로 다른 값의 최소 수
조건부 가지의 나무 대신. 값이 0이면 기본값을 사용합니다.
기계. 기본값은 0입니다.

트리 재연결 너비
재연관 트리에서 병렬로 실행되는 최대 명령어 수를 설정합니다.
이 매개변수는 다음이 아닌 경우 기본적으로 사용되는 대상 종속 휴리스틱을 재정의합니다.
제로 값.

옵션 제어 전에, 전 처리기
이 옵션은 실제 실행 전에 각 C 소스 파일에서 실행되는 C 전처리기를 제어합니다.
편집.

당신이 사용하는 경우 -E 옵션을 선택하면 전처리 외에는 아무 것도 수행되지 않습니다. 이러한 옵션 중 일부
함께 만 의미 -E 전처리기 출력이
실제 컴파일에는 적합하지 않습니다.

-워,선택권
당신이 사용할 수 -워,선택권 컴파일러 드라이버를 우회하고 통과 선택권 직접적으로
전처리기에. 만약에 선택권 쉼표가 포함되어 있으며 다음 위치에서 여러 옵션으로 나뉩니다.
쉼표. 그러나 많은 옵션이 수정, 번역 또는 해석됩니다.
전처리기로 전달되기 전에 컴파일러 드라이버, -Wp 강제로 우회
이 단계. 전처리기의 직접 인터페이스는 문서화되지 않았으며
변경하므로 가능하면 사용을 피해야 합니다. -Wp 그리고 운전자가 핸들을 잡도록 하십시오.
대신 옵션.

-엑스프리프로세서 선택권
패스 선택권 전처리기에 대한 옵션으로. 이것을 사용하여 시스템에 공급할 수 있습니다.
GCC가 인식하지 못하는 특정 전처리기 옵션.

인수를 취하는 옵션을 전달하려면 다음을 사용해야 합니다. -엑스프리프로세서
두 번, 옵션에 대해 한 번, 인수에 대해 한 번.

-D name
사전 정의 name 매크로로 정의 1.

-D name=정의
내용 정의 토큰화 및 처리됩니다.
번역 단계 XNUMX #밝히다 지령. 특히, 정의는
포함된 개행 문자로 잘립니다.

쉘 또는 쉘과 유사한 프로그램에서 전처리기를 호출하는 경우 다음이 필요할 수 있습니다.
쉘의 인용 구문을 사용하여 공백과 같은 문자를 보호합니다.
쉘 구문의 의미.

명령줄에서 함수와 같은 매크로를 정의하려면 해당 인수를 작성하십시오.
등호(있는 경우) 앞에 괄호가 있는 목록. 괄호는
대부분의 쉘에 의미가 있으므로 옵션을 인용해야 합니다. 와 함께 shCSH,
-NS'name(인수...)=정의' 작동합니다.

-D-U 옵션은 명령줄에 제공된 순서대로 처리됩니다. 모두
-매크로 파일-포함 파일 옵션은 결국 처리됩니다 -D-U 옵션을 제공합니다.

-U name
이전 정의 취소 name, 내장 또는 제공 -D 옵션을 선택합니다.

-언데프
시스템 특정 또는 GCC 특정 매크로를 미리 정의하지 마십시오. 미리 정의된 표준
매크로는 정의된 상태로 유지됩니다.

-I DIR
디렉토리 추가 DIR 헤더 파일을 검색할 디렉토리 목록으로 이동합니다.
이름이 지정된 디렉토리 -I 표준 시스템이 디렉토리를 포함하기 전에 검색됩니다.
디렉토리의 경우 DIR 표준 시스템 포함 디렉토리인 경우 옵션이 무시됩니다.
시스템 디렉토리에 대한 기본 검색 순서와 특수 처리가
의 시스템 헤더는 패배하지 않습니다. 만약에 DIR "="로 시작하면 "="가 됩니다.
sysroot 접두사로 대체됩니다. 보다 --sysroot-isysroot.

-o 파일
에 출력 쓰기 파일. 지정하는 것과 같습니다. 파일 두 번째 옵션으로
인수 CPP. GCC 옵션이 아닌 두 번째 인수에 대해 다른 해석이 있는 경우
그래서 당신은 사용해야합니다 -o 출력 파일을 지정합니다.

-벽
일반 코드에 필요한 모든 선택적 경고를 켭니다. 현재 이
is -댓글, -저서, -W멀티문자 및 정수 승격에 대한 경고로 인해
"#if" 표현의 기호 변경. 많은 전처리기의 경고가
기본적으로 켜져 있으며 제어할 수 있는 옵션이 없습니다.

-댓글
-W댓글
주석 시작 시퀀스 때마다 경고 /* 에 나타납니다 /* 댓글 또는 언제든지
백슬래시-개행 문자가 나타납니다. // 논평. (두 형태 모두 동일한 효과를 가집니다.)

-저서
주석에 있는 대부분의 삼중자는 프로그램의 의미에 영향을 줄 수 없습니다. 그러나
이스케이프된 개행 문자(??/ 줄 끝에서) 할 수 있습니다.
주석이 시작되거나 끝나는 위치를 변경합니다. 따라서,
이스케이프된 줄 바꿈은 주석 내부에 경고를 생성합니다.

이 옵션은 -벽. 면 -벽 이 옵션은 여전히 ​​활성화되어 있습니다.
trigraphs가 활성화되지 않는 한. 경고 없이 trigraph 변환을 얻으려면
다른 -벽 경고, 사용 -삼각형 -벽 -Wno-trigraphs.

-전통적인
기존 및 ISO C에서 다르게 동작하는 특정 구성에 대해 경고합니다. 또한
기존의 C에 해당하는 항목이 없고 문제가 있는 ISO C 구성에 대해 경고합니다.
피해야 할 구조.

-분데프
매크로가 아닌 식별자가 #만약 지시문
밖의 한정된. 이러한 식별자는 XNUMX으로 대체됩니다.

-사용하지 않은 매크로
사용하지 않는 기본 파일에 정의된 매크로에 대해 경고합니다. 매크로는 익숙한 그렇다면
적어도 한 번은 확장되거나 존재 여부를 테스트했습니다. 전처리기는 다음과 같은 경우에도 경고합니다.
매크로가 재정의되거나 정의되지 않은 시점에 사용되지 않았습니다.

기본 제공 매크로, 명령줄에 정의된 매크로 및 에 정의된 매크로는 다음을 포함합니다.
파일에 대해 경고하지 않습니다.

참고 : 매크로가 실제로 사용되지만 건너뛴 조건부 블록에서만 사용되는 경우
CPP는 이를 사용하지 않은 것으로 보고합니다. 이러한 경우 경고를 피하기 위해 다음을 개선할 수 있습니다.
예를 들어 매크로 정의의 범위를 건너뛴 첫 번째 항목으로 이동합니다.
블록. 또는 다음과 같이 더미 사용을 제공할 수 있습니다.

#the_macro_causing_the_warning을 정의한 경우
#endif

-웬디프 라벨
언제든지 경고 #그밖에 또는 #endif 텍스트가 뒤따릅니다. 이것은 일반적으로 다음에서 발생합니다.
형식의 코드

#만약 FOO라면
...
#else 푸
...
#endif foo

두 번째와 세 번째 "FOO"는 주석에 있어야 하지만 이전 프로그램에는 없는 경우가 많습니다.
이 경고는 기본적으로 켜져 있습니다.

-워러
모든 경고를 하드 오류로 만듭니다. 경고를 트리거하는 소스 코드는 다음과 같습니다.
거부되었습니다.

-Wsystem 헤더
시스템 헤더의 코드에 대한 경고를 발행합니다. 이것들은 일반적으로 찾는 데 도움이 되지 않습니다.
따라서 자신의 코드에 있는 버그를 억제합니다. 시스템에 대한 책임이 있는 경우
도서관, 당신은 그들을보고 싶을 수 있습니다.

-w GNU CPP가 기본적으로 발행하는 경고를 포함하여 모든 경고를 표시하지 않습니다.

-페단 틱
C 표준에 나열된 모든 필수 진단을 발행하십시오. 그들 중 일부는 남아 있습니다
무해한 코드에서 자주 트리거되기 때문에 기본적으로 out.

- 현학적 오류
모든 필수 진단을 실행하고 모든 필수 진단을 오류로 만듭니다.
여기에는 GCC가 다음 없이 발행하는 필수 진단이 포함됩니다. -페단 틱 그러나 다음과 같이 취급합니다.
경고.

-M 전처리 결과를 출력하는 대신에 적합한 규칙을 출력 확인
기본 소스 파일의 종속성을 설명합니다. 전처리기는 하나를 출력합니다.
확인 해당 소스 파일에 대한 개체 파일 이름, 콜론 및 이름을 포함하는 규칙
다음에서 오는 파일을 포함하여 포함된 모든 파일의 -포함 or -매크로 명령
라인 옵션.

명시적으로 지정하지 않는 한( -산 or -MQ), 개체 파일 이름은
접미사가 개체 파일 접미사로 대체되고 임의의 접미사가 있는 소스 파일의 이름
선행 디렉토리 부분이 제거되었습니다. 포함된 파일이 많은 경우 규칙은 다음과 같습니다.
사용하여 여러 줄로 분할 \- 개행. 규칙에는 명령이 없습니다.

이 옵션은 다음과 같은 전처리기의 디버그 출력을 억제하지 않습니다. -dM. 피하려면
이러한 디버그 출력을 종속성 규칙과 혼합하여 명시적으로 지정해야 합니다.
종속성 출력 파일 -MF, 또는 다음과 같은 환경 변수를 사용하십시오.
DEPENDENCIES_OUTPUT. 디버그 출력은 다음과 같이 일반 출력 스트림으로 계속 전송됩니다.
정상입니다.

통과 -M 운전자에게 의미 -E, 그리고 암시적으로 경고를 억제합니다. -w.

-MM 처럼 -M 그러나 시스템 헤더 디렉토리에 있는 헤더 파일은 언급하지 마십시오.
이러한 헤더에서 직접 또는 간접적으로 포함된 헤더 파일도 없습니다.

이것은 꺾쇠 괄호 또는 큰 따옴표를 선택하는 것을 의미합니다. #포함
지시문 자체는 해당 헤더가 다음에 나타날지 여부를 결정하지 않습니다. -MM
의존성 출력. 이것은 GCC 버전 3.0 및
일찍이.

-MF 파일
함께 사용할 때 -M or -MM, 종속성을 쓸 파일을 지정합니다. 그렇지 않은 경우 -MF
스위치는 전처리기가 전송했을 동일한 위치로 규칙을 보냅니다.
전처리된 출력.

드라이버 옵션과 함께 사용하는 경우 -MD or -MMD, -MF 기본 종속성을 재정의합니다.
결과물 파일.

-mg 다음과 같은 옵션과 함께 -M 의존성 생성 요청, -mg 가정하다
누락된 헤더 파일은 생성된 파일이며 이를 제외하고 종속성 목록에 추가합니다.
오류를 발생시킵니다. 종속성 파일 이름은 "#include"에서 직접 가져옵니다.
경로를 추가하지 않고 지시문. -mg 또한 전처리된 출력을 억제합니다.
누락된 헤더 파일은 이것을 쓸모없게 만듭니다.

이 기능은 makefile의 자동 업데이트에 사용됩니다.

- MP 이 옵션은 CPP가 다음 이외의 각 종속성에 대해 가짜 대상을 추가하도록 지시합니다.
메인 파일을 생성하여 각각이 아무것도 의존하지 않게 합니다. 이 더미 규칙은 오류를 해결합니다.
확인 업데이트하지 않고 헤더 파일을 제거하면 제공 Makefile 일치합니다.

다음은 일반적인 출력입니다.

test.o: test.c test.h

test.h :

-산 목표
종속성 생성에서 내보낸 규칙의 대상을 변경합니다. 기본적으로 CPP는
기본 입력 파일의 이름, 모든 디렉토리 구성 요소 및 파일 접미사 삭제
.c, 플랫폼의 일반적인 개체 접미사를 추가합니다. 결과는 목표입니다.

An -산 옵션은 대상을 정확히 지정한 문자열로 설정합니다. 네가 원한다면
여러 대상을 단일 인수로 지정할 수 있습니다. -산, 또는 여러
-산 옵션을 제공합니다.

예를 들어, -산 '$(objpfx)foo.o' 줄 수도

$(objpfx)foo.o: foo.c

-MQ 목표
과 동일 -산, 그러나 Make에 특별한 모든 문자를 인용합니다.
-MQ '$(objpfx)foo.o' 제공

$$(objpfx)foo.o: foo.c

기본 대상은 다음과 같이 제공된 것처럼 자동으로 인용됩니다. -MQ.

-MD -MD 에 해당하는 -M -MF 파일제외하고 -E 암시되지 않습니다. 운전사
결정하다 파일 여부에 따라 -o 옵션이 주어집니다. 그렇다면 드라이버는
인수이지만 접미사 .d, 그렇지 않으면 입력 파일의 이름을 사용합니다.
모든 디렉토리 구성 요소와 접미사를 제거하고 .d 접미사.

If -MD 와 함께 사용됩니다 -E, 어떤 -o 스위치는 다음을 지정하는 것으로 이해됩니다.
종속성 출력 파일이지만 없이 사용되는 경우 -E, 각각 -o 지정하는 것으로 이해된다
대상 개체 파일.

이후 -E 암시되지 않으며, -MD 종속성 출력 파일을 생성하는 데 사용할 수 있습니다.
컴파일 과정의 부작용

-MMD
처럼 -MD 시스템 헤더 파일이 아닌 사용자 헤더 파일만 언급하는 것을 제외하고.

-fpch-deps
미리 컴파일된 헤더를 사용할 때 이 플래그로 인해 종속성 출력 플래그가
또한 미리 컴파일된 헤더의 종속성에서 파일을 나열합니다. 지정되지 않은 경우에만
미리 컴파일된 헤더가 나열되고 헤더를 만드는 데 사용된 파일이 나열되지 않습니다.
미리 컴파일된 헤더를 사용할 때 해당 파일을 참조하지 않기 때문입니다.

-fpch-전처리
이 옵션을 사용하면 미리 컴파일된 헤더를 다음과 함께 사용할 수 있습니다. -E. 특수문자를 삽입합니다
"#pragma", "#pragma GCC pch_preprocess "파일 이름"" 장소를 표시하기 위해 출력에서
미리 컴파일된 헤더가 발견된 위치 및 파일 이름. 언제 -f전처리
사용하면 GCC가 이 "#pragma"를 인식하고 PCH를 로드합니다.

이 옵션은 기본적으로 꺼져 있습니다. 사전 처리된 결과 출력은
GCC에 대한 입력으로 정말 적합합니다. 에 의해 켜져 있습니다. - 임시 저장.

이 "#pragma"를 자신의 코드에 작성해서는 안 되지만 편집하는 것이 안전합니다.
PCH 파일이 다른 위치에서 사용 가능한 경우 filename. 파일 이름은 다음과 같을 수 있습니다.
절대 또는 GCC의 현재 디렉토리에 상대적일 수 있습니다.

-x c
-x C ++
-x 목적 -c
-x cpp 어셈블러
소스 언어(C, C++, Objective-C 또는 어셈블리)를 지정합니다. 이건 할말이 없다
표준 준수 또는 확장 어떤 기본 구문을
예상하다. 이 옵션 중 아무 것도 제공하지 않으면 cpp는 다음에서 언어를 추론합니다.
소스 파일의 확장자: .c, .CC, .m.S. 몇 가지 다른 일반적인 확장
C++ 및 어셈블리도 인식됩니다. cpp가 확장자를 인식하지 못하면
파일을 C로 취급합니다. 이것은 가장 일반적인 모드입니다.

참고 : 이전 버전의 cpp가 허용됨 -랑 둘 다 선택한 옵션
언어 및 표준 준수 수준. 이 옵션은 제거되었습니다.
와 충돌한다 -l 옵션을 선택합니다.

-표준=표준
-안시
코드가 준수해야 하는 표준을 지정합니다. 현재 CPP는 C에 대해 알고 있습니다.
및 C++ 표준; 다른 사람들은 미래에 추가될 수 있습니다.

표준 다음 중 하나일 수 있습니다.

"c90"
"c89"
"iso9899:1990"
1990년부터 ISO C 표준입니다. c90 이 버전의 관례적인 약어입니다.
표준.

XNUMXD덴탈의 -안시 옵션은 다음과 같습니다. -표준=c90.

"iso9899:199409"
1990년에 개정된 1994년 C 표준.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
1999년 XNUMX월에 출판된 개정된 ISO C 표준.
C9X로 알려졌습니다.

"iso9899:2011"
"c11"
"c1x"
2011년 XNUMX월에 출판된 개정된 ISO C 표준.
C1X로 알려졌습니다.

"그누90"
"그누89"
1990 C 표준과 GNU 확장. 이것이 기본값입니다.

"그누99"
"gnu9x"
1999 C 표준과 GNU 확장.

"그누11"
"gnu1x"
2011 C 표준과 GNU 확장.

"C++98"
1998 ISO C++ 표준 및 수정 사항.

"그누++98"
같은 -std = c ++ 98 플러스 GNU 확장. 이것은 C++ 코드의 기본값입니다.

-나는- 포함 경로를 분할합니다. 다음으로 지정된 모든 디렉토리 -I 전에 옵션 -나는- are
"#include "로 요청된 헤더만 검색합니다.파일""; 그들은 검색되지 않습니다
"#포함하다파일>". 추가 디렉토리가 지정된 경우 -I 이후의 옵션
-나는-, 해당 디렉토리는 모두 검색됩니다. #포함 가이드 라인.

또한, -나는- 현재 파일 디렉토리의 디렉토리를 다음과 같이 사용하는 것을 금지합니다.
"#include "에 대한 첫 번째 검색 디렉토리파일"". 이 옵션은 더 이상 사용되지 않습니다.

-Nostdinc
헤더 파일에 대한 표준 시스템 디렉토리를 검색하지 마십시오. 디렉토리만
당신은 로 지정했습니다 -I 옵션(및 현재 파일의 디렉토리가 있는 경우
해당)이 검색됩니다.

-nostdinc++
C++ 관련 표준 디렉토리에서 헤더 파일을 검색하지 마십시오.
다른 표준 디렉토리를 검색하십시오. (이 옵션은 C++를 빌드할 때 사용됩니다.
도서관.)

-포함 파일
방법 파일 "#include "file""이 기본 소스의 첫 번째 줄에 나타난 것처럼
파일. 그러나 검색한 첫 번째 디렉토리는 파일 전처리기의 작동입니다
예배 규칙서 를 받아야 하는 미국 여행자 of 기본 소스 파일이 포함된 디렉토리. 찾을 수 없는 경우
거기에서 "#include "..."" 검색 체인의 나머지 부분에서 다음과 같이 검색됩니다.
정상입니다.

여러 경우 -포함 옵션이 주어지면 파일은 순서대로 포함됩니다.
명령줄에 나타납니다.

-매크로 파일
정확히 같은 -포함, 스캔에 의해 생성된 모든 출력은 제외 파일 던져진다
떨어져있는. 정의한 매크로는 정의된 상태로 유지됩니다. 이를 통해 모든 매크로를 획득할 수 있습니다.
선언을 처리하지 않고 헤더에서.

에 의해 지정된 모든 파일 -매크로 에 의해 지정된 모든 파일보다 먼저 처리됩니다. -포함.

-idirafter DIR
검색 DIR 헤더 파일의 경우 시간 내에 로 지정된 모든 디렉토리 -I 그리고
표준 시스템 디렉토리가 소진되었습니다. DIR 다음을 포함하는 시스템으로 처리됩니다.
예배 규칙서. 만약에 DIR "="로 시작하면 "="는 sysroot로 대체됩니다.
접두사; 보다 --sysroot-isysroot.

-ipprefix 접두사
지정 접두사 후속 접두사로 -iwith 접두사 옵션. 접두어의 경우
디렉토리를 나타내므로 최종 /.

-iwith 접두사 DIR
-앞에 접두사가 있는 경우 DIR
추가 DIR 이전에 지정된 접두사에 -ipprefix, 결과를 추가하십시오
디렉토리를 포함 검색 경로로 이동합니다. -앞에 접두사가 있는 경우 같은 장소에 둔다. -I
일 것이다; -iwith 접두사 그것을 어디에 둔다 -idirafter 할 것이다.

-isysroot DIR
이 옵션은 다음과 같습니다. --sysroot 옵션이지만 헤더 파일에만 적용됩니다(예외
헤더 파일과 라이브러리 모두에 적용되는 Darwin 대상). 참조
--sysroot 자세한 내용은 옵션을 참조하십시오.

-imultilib DIR
DIR 대상별 C++ 헤더를 포함하는 디렉토리의 하위 디렉토리로 사용됩니다.

-아이시스템 DIR
검색 DIR 헤더 파일의 경우 다음으로 지정된 모든 디렉토리 뒤에 -I 그러나 전에
표준 시스템 디렉토리. 시스템 디렉토리로 표시하여 동일하게 가져옵니다.
표준 시스템 디렉토리에 적용되는 특별한 취급. 만약에 DIR 시작
"="를 사용하면 "="가 sysroot 접두사로 바뀝니다. 보다 --sysroot
-isysroot.

- 인용 DIR
검색 DIR "#include "로 요청된 헤더 파일에만 해당파일""; 그들은 아니다
"#포함"을 검색했습니다.파일>", 다음에 의해 지정된 모든 디렉토리 앞에 -I 그리고 전에
표준 시스템 디렉토리. 만약에 DIR "="로 시작하면 "="로 대체됩니다.
sysroot 접두사; 보다 --sysroot-isysroot.

-f 지시문 전용
전처리할 때 지시문을 처리하되 매크로를 확장하지 마십시오.

옵션의 동작은 -E-f전처리 옵션을 제공합니다.

-E, 전처리는 "#define"과 같은 지시문 처리로 제한됩니다.
"#ifdef" 및 "#오류". 매크로 확장 및
trigraph 변환은 수행되지 않습니다. 또한, -dD 옵션은 암시적으로
사용하도록 설정되었습니다.

-f전처리, 명령줄 및 대부분의 내장 매크로의 사전 정의는
장애가있는. 컨텍스트에 따라 달라지는 "__LINE__"과 같은 매크로가 처리됩니다.
보통. 이렇게 하면 이전에 "-E"로 사전 처리된 파일을 컴파일할 수 있습니다.
-f지시어 전용".

둘이 함께 -E-f전처리, 규칙 -f전처리 우선권을 가지다. 이것
이전에 "-E"로 전처리된 파일의 전체 전처리를 가능하게 합니다.
-f지시어 전용".

-fdollars-in-식별자
수락 $ 식별자에.

-fextended-식별자
식별자에 범용 문자 이름을 허용합니다. 이 옵션은 실험적입니다. 안에
GCC의 향후 버전에서는 C99 및 C++에 대해 기본적으로 활성화됩니다.

-f전처리
입력 파일이 이미 전처리되었음을 전처리기에 표시합니다. 이것
매크로 확장, 삼중 그래프 변환, 이스케이프된 개행 연결,
및 대부분의 지시문 처리. 전처리기는 여전히 인식하고 제거합니다.
주석으로 사전 처리된 파일을 전달할 수 있습니다. -C 없이 컴파일러에
문제. 이 모드에서 통합 전처리기는 토크나이저에 불과합니다.
프론트 엔드를 위해.

-f전처리 입력 파일에 확장자 중 하나가 있으면 암시적입니다. .i, .ii or .미.
다음은 GCC가 생성한 전처리된 파일에 사용하는 확장자입니다. - 임시 저장.

-ftabstop=
탭 정지 사이의 거리를 설정합니다. 이것은 전처리기가 올바른 열을 보고하는 데 도움이 됩니다.
줄에 탭이 나타나더라도 경고 또는 오류의 숫자. 값이 작을 경우
1보다 크거나 100보다 크면 옵션이 무시됩니다. 기본값은 8입니다.

-fdebug-cpp
이 옵션은 GCC 디버깅에만 유용합니다. 와 함께 사용할 때 -E, 덤프 디버깅
위치 지도에 대한 정보입니다. 출력의 모든 토큰 앞에는 덤프가 옵니다.
그 위치가 속한 지도. 토큰의 위치를 ​​담고 있는 맵의 덤프
다음과 같습니다.

{"P":F ;"F":F ;"엘": ;"씨": ;"NS": ;"미디엄": ;"이자형": ,"위치": }

없이 사용할 때 -E, 이 옵션은 효과가 없습니다.

-ftrack 매크로 확장[=수평]
매크로 확장에서 토큰의 위치를 ​​추적합니다. 이를 통해 컴파일러는
컴파일 오류가 발생할 때 현재 매크로 확장 스택에 대한 진단
매크로 확장. 이 옵션을 사용하면 전처리기와 컴파일러가
더 많은 메모리. NS 수평 매개변수는 토큰의 정밀도 수준을 선택하는 데 사용할 수 있습니다.
위치 추적을 통해 필요한 경우 메모리 소비를 줄입니다. 값 0 of
수평 이 옵션을 비활성화합니다. -ftrack 매크로 확장 에 있었다
명령줄. 값 1 를 위해 저하된 모드에서 토큰 위치를 추적합니다.
최소한의 메모리 오버헤드. 이 모드에서는 확장으로 인한 모든 토큰
함수와 같은 매크로의 인수는 동일한 위치를 갖습니다. 값 2 추적 토큰
위치를 완전히. 이 값은 가장 많은 메모리를 소모합니다. 이 옵션이 주어졌을 때
인수가 없으면 기본 매개변수 값은 다음과 같습니다. 2.

-fexec-문자셋=문자셋
문자열 및 문자 상수에 사용되는 실행 문자 집합을 설정합니다. 기본값
UTF-8입니다. 문자셋 시스템의 "iconv" 라이브러리에서 지원하는 모든 인코딩일 수 있습니다.
일상.

-fwide-exec-charset=문자셋
와이드 문자열 및 문자 상수에 사용되는 와이드 실행 문자 세트를 설정합니다.
기본값은 "wchar_t"의 너비에 해당하는 UTF-32 또는 UTF-16입니다. 같이
-fexec-문자셋, 문자셋 시스템의 "iconv"에서 지원하는 모든 인코딩일 수 있습니다.
라이브러리 루틴; 그러나 적합하지 않은 인코딩에는 문제가 있습니다.
정확히 "wchar_t"에 있습니다.

-finput-문자셋=문자셋
입력의 문자 집합에서 번역에 사용되는 입력 문자 집합을 설정합니다.
파일을 GCC에서 사용하는 소스 문자 세트로 변환합니다. 로케일이 지정되지 않은 경우 또는 GCC
로케일에서 이 정보를 가져올 수 없으며 기본값은 UTF-8입니다. 이것은 될 수있다
로케일 또는 이 명령줄 옵션에 의해 재정의됩니다. 현재 명령
충돌이 있는 경우 line 옵션이 우선합니다. 문자셋 모든 인코딩이 될 수 있습니다
시스템의 "iconv" 라이브러리 루틴에서 지원합니다.

-fworking-디렉토리
컴파일러가 허용하는 전처리기 출력에서 ​​라인 마커 생성을 활성화
전처리 시점의 현재 작업 디렉토리를 알고 있습니다. 이 옵션이
활성화되면 전처리기가 초기 라인 마커 다음에 두 번째 라인 마커를 내보냅니다.
현재 작업 디렉토리 뒤에 두 개의 슬래시가 있습니다. GCC는 이것을 사용할 것입니다
디렉토리, 사전 처리된 입력에 있는 경우 다음과 같이 내보낸 디렉토리로
일부 디버깅 정보 형식의 현재 작업 디렉토리. 이 옵션은
디버깅 정보가 활성화된 경우 암시적으로 활성화되지만 다음으로 금지할 수 있습니다.
부정형 -fno-작업 디렉터리. 경우 -P 플래그가 명령에 있습니다.
line에서 "#line" 지시문이 전혀 생성되지 않기 때문에 이 옵션은 효과가 없습니다.

-fno-show-열
진단에서 열 번호를 인쇄하지 마십시오. 진단이 필요한 경우 필요할 수 있습니다.
다음과 같이 열 번호를 이해하지 못하는 프로그램에 의해 스캔되고 있습니다.
데자누.

-A 술부=답변
술어로 주장하기 술부 대답 답변. 이 양식은
구형보다 선호 -A 술부(답변), 여전히 지원됩니다.
쉘 특수 문자를 사용하지 않습니다.

-A -술부=답변
술어로 어설션 취소 술부 대답 답변.

-dCHARS
문자 다음 문자 중 하나 이상의 시퀀스이며 다음 문자가 아니어야 합니다.
공백이 앞에 옵니다. 다른 문자는 컴파일러에 의해 적절하게 해석되거나
GCC의 향후 버전을 위해 예약되어 있으므로 자동으로 무시됩니다. 지정하는 경우
행동이 충돌하는 캐릭터, 결과는 정의되지 않습니다.

M 일반 출력 대신 다음 목록을 생성하십시오. #밝히다 모든 지침
미리 정의된 것을 포함하여 전처리기 실행 중에 정의된 매크로
매크로. 이것은 당신의 버전에 사전 정의된 것을 찾는 방법을 제공합니다.
전처리기. 파일이 없다고 가정 푸.h, 명령

터치 foo.h; cpp -dM foo.h

미리 정의 된 모든 매크로가 표시됩니다.

당신이 사용하는 경우 -dM ~없이 -E 선택권, -dM 의 동의어로 해석됩니다.
-fdump-rtl-마하.

D 처럼 M 두 가지 측면을 제외하고: 지원 미리 정의된 매크로를 포함하고
출력 전에, #밝히다 지시문 및 전처리 결과. 두 종류
출력의 표준 출력 파일로 이동합니다.

N 처럼 D, 그러나 확장이 아닌 매크로 이름만 내보냅니다.

I 산출 #포함 전처리 결과 외에 지시문.

U 처럼 D 확장되거나 정의가 테스트된 매크로만 제외
전처리기 지시문에서 출력됩니다. 사용할 때까지 출력이 지연되거나
매크로 테스트; 그리고 #언데프 지시문은 테스트된 매크로에 대해서도 출력되지만
당시 정의되지 않은.

-P 전처리기의 출력에서 ​​라인마커 생성을 금지합니다. 이것은 아마도
C 코드가 아닌 무언가에서 전처리기를 실행할 때 유용하며 전송될 것입니다.
linemarkers에 의해 혼동될 수 있는 프로그램에.

-C 댓글을 버리지 마세요. 다음을 제외한 모든 주석은 출력 파일로 전달됩니다.
지시문과 함께 삭제되는 처리된 지시문에 있는 주석의 경우.

사용 시 부작용에 대비해야 합니다. -C; 그것은 전처리기가
댓글을 자체적으로 토큰으로 취급합니다. 예를 들어, 게시판에 표시되는 댓글은
지시 행이 될 것의 시작은 그 행을 다음으로 바꾸는 효과가 있습니다.
라인의 첫 번째 토큰이 더 이상 a가 아니기 때문에 일반 소스 라인 #.

-CC 매크로 확장 중을 포함하여 주석을 삭제하지 마십시오. 이것은 마치 -C제외
매크로에 포함된 주석도 출력 파일로 전달됩니다.
매크로가 확장됩니다.

부작용 뿐만 아니라 -C 옵션, -CC 옵션은 모든 C++ 스타일을 유발합니다.
매크로 내부의 주석을 C 스타일 주석으로 변환합니다. 이것은 나중에 방지하기 위해
실수로 소스 행의 나머지 부분을 주석으로 처리하여 해당 매크로를 사용합니다.

XNUMXD덴탈의 -CC 옵션은 일반적으로 린트 주석을 지원하는 데 사용됩니다.

-전통적인 cpp
ISO C와 달리 구식 C 전처리기의 동작을 모방하십시오.
전처리기.

-삼각형
삼중 그래프 시퀀스를 처리합니다. 이들은 모두 로 시작하는 세 문자 시퀀스입니다.
??, 단일 문자를 나타내기 위해 ISO C에서 정의합니다. 예를 들어, ??/
for \그래서 '??/N' 개행 문자 상수입니다. 기본적으로 GCC는 무시합니다.
trigraphs, 그러나 표준 준수 모드에서는 변환합니다. 참조 -표준-안시
옵션을 제공합니다.

XNUMX개의 삼극자와 그 대체품은 다음과 같습니다.

삼중 그래프: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
대체: [ ] { } # \ ^ | ~

-다시 매핑
매우 짧은 파일만 허용하는 파일 시스템에서 작동하는 특수 코드 활성화
MS-DOS와 같은 이름.

--도움
-타겟 홀프
아무 것도 사전 처리하는 대신 모든 명령줄 옵션을 설명하는 텍스트를 인쇄합니다.

-v 상세 모드. 실행 시작 시 GNU CPP의 버전 번호를 출력하고,
포함 경로의 최종 형식을 보고합니다.

-H 다른 일반 활동과 함께 사용된 각 헤더 파일의 이름을 인쇄하십시오. 각
이름은 들여 쓰기가 얼마나 깊은지 보여줍니다. #포함 스택입니다. 미리 컴파일된 헤더
유효하지 않은 것으로 판명된 경우에도 파일도 인쇄됩니다. 잘못된 미리 컴파일된
헤더 파일은 다음과 같이 인쇄됩니다. ...NS 그리고 유효한 ...! .

-번역
--번역
GNU CPP의 버전 번호를 출력하십시오. 대시 한 번으로 평소와 같이 전처리를 진행합니다.
두 개의 대시로 즉시 종료하십시오.

통과 옵션 전에, 어셈블러
어셈블러에 옵션을 전달할 수 있습니다.

-와,선택권
패스 선택권 어셈블러에 대한 옵션으로. 만약에 선택권 쉼표가 포함되어 있으며 분할됩니다.
쉼표에서 여러 옵션으로.

-X어셈블러 선택권
패스 선택권 어셈블러에 대한 옵션으로. 이를 사용하여 시스템별
GCC가 인식하지 못하는 어셈블러 옵션.

인수를 취하는 옵션을 전달하려면 다음을 사용해야 합니다. -X어셈블러 두번,
옵션에 대해 한 번, 인수에 대해 한 번.

옵션 for 연결
이러한 옵션은 컴파일러가 개체 파일을 실행 파일에 연결할 때 작동합니다.
결과물 파일. 컴파일러가 링크 단계를 수행하지 않으면 의미가 없습니다.

개체 파일 이름
특수 인식 접미사로 끝나지 않는 파일 이름은 이름으로 간주됩니다.
개체 파일 또는 라이브러리. (객체 파일은 링커에 의해 라이브러리와 구별됩니다.
파일 내용에 따릅니다.) 링크가 완료되면 이러한 오브젝트 파일은 다음과 같이 사용됩니다.
링커에 입력합니다.

-c
-S
-E 이러한 옵션 중 하나를 사용하면 링커가 실행되지 않고 개체 파일 이름이
인수로 사용해서는 안됩니다.

-l도서관
-l 도서관
이름이 지정된 라이브러리 검색 도서관 링크할 때. (두 번째 대안은
라이브러리를 별도의 인수로 사용하는 것은 POSIX 준수만을 위한 것이며 권장되지 않습니다.)

명령에서 이 옵션을 작성하는 위치에 차이가 있습니다. 링커 검색
지정된 순서대로 라이브러리와 오브젝트 파일을 처리합니다. 따라서, 푸.오
-lz 바오 검색 라이브러리 z 파일 후 푸.오 하지만 전에 바오. 면 바오 를 의미
~에있는 기능들 z, 해당 기능이 로드되지 않을 수 있습니다.

링커는 라이브러리에 대한 표준 디렉토리 목록을 검색합니다.
이름이 지정된 파일 도서관. 그런 다음 링커는 이 파일을 지정된 것처럼 사용합니다.
정확히는 이름으로.

검색된 디렉토리에는 여러 표준 시스템 디렉토리와 사용자가 지정한 모든 디렉토리가 포함됩니다.
로 지정 -L.

일반적으로 이 방법으로 찾은 파일은 라이브러리 파일---구성원이 다음과 같은 아카이브 파일입니다.
개체 파일. 링커는 아카이브 파일을 통해 구성원을 검색하여 처리합니다.
지금까지 참조되었지만 정의되지 않은 기호를 정의합니다. 하지만 만약
발견된 파일은 일반 오브젝트 파일이며 일반적인 방식으로 링크됩니다. NS
사용의 유일한 차이점 -l 옵션을 선택하고 파일 이름을 지정하는 것은 -l
서라운드 도서관lib.a 여러 디렉토리를 검색합니다.

-lobjc
이 특별한 경우가 필요합니다. -l Objective-C 또는
오브젝티브-C++ 프로그램.

-nostart파일
연결할 때 표준 시스템 시작 파일을 사용하지 마십시오. 표준 시스템
라이브러리는 일반적으로 사용됩니다. -nostdlib or -nodefaultlibs 사용.

-nodefaultlibs
링크할 때 표준 시스템 라이브러리를 사용하지 마십시오. 지정한 라이브러리만
시스템 라이브러리의 연결을 지정하는 옵션인 링커로 전달됩니다.
"-static-libgcc" 또는 "-shared-libgcc"로 무시됩니다. 표준 시작 파일
제외하고는 정상적으로 사용됩니다. -nostart파일 사용. 컴파일러는 다음 호출을 생성할 수 있습니다.
"memcmp", "memset", "memcpy" 및 "memmove". 이러한 항목은 일반적으로 다음으로 해결됩니다.
libc의 항목. 이러한 진입점은 다른 메커니즘을 통해 제공되어야 합니다.
이 옵션이 지정된 경우.

-nostdlib
링크할 때 표준 시스템 시작 파일이나 라이브러리를 사용하지 마십시오. 시작하지 않음
파일과 지정한 라이브러리만 링커, 옵션에 전달됩니다.
"-static-libgcc" 또는
"-shared-libgcc"는 무시됩니다. 컴파일러는 "memcmp"에 대한 호출을 생성할 수 있습니다.
"memset", "memcpy" 및 "memmove". 이러한 항목은 일반적으로 다음 항목에 의해 해결됩니다.
라이브러리 이러한 진입점은 다음과 같은 경우 다른 메커니즘을 통해 제공되어야 합니다.
옵션이 지정되었습니다.

바이패스된 표준 라이브러리 중 하나 -nostdlib-nodefaultlibs is libgcc.a
GCC가 특정 단점을 극복하기 위해 사용하는 내부 서브루틴 라이브러리
기계 또는 일부 언어에 대한 특별한 요구 사항.

대부분의 경우 필요한 libgcc.a 다른 표준 라이브러리를 사용하지 않으려는 경우에도 마찬가지입니다.
즉, 지정할 때 -nostdlib or -nodefaultlibs 당신은 일반적으로
지정하다 -lgcc 또한. 이렇게 하면 에 대한 해결되지 않은 참조가 없습니다.
내부 GCC 라이브러리 서브루틴. (예를 들어, __기본, C++를 보장하는 데 사용
생성자가 호출됩니다.)

-파이
지원하는 대상에서 위치 독립적인 실행 파일을 생성합니다. 예측 가능한
코드를 생성하는 데 사용된 것과 동일한 옵션 세트도 지정해야 합니다.
(-파이, -fPIE, 또는 모델 하위 옵션) 이 옵션을 지정할 때.

-역동적
깃발을 넘기다 -수출-동적 ELF 링커를 지원하는 대상에서. 이것
링커에 사용된 기호뿐만 아니라 모든 기호를 동적 기호에 추가하도록 지시합니다.
테이블. 이 옵션은 "dlopen"을 일부 사용하거나
프로그램 내에서 역추적.

-s 실행 파일에서 모든 기호 테이블 및 재배치 정보를 제거합니다.

-공전
동적 연결을 지원하는 시스템에서 이것은 공유와 연결을 방지합니다.
도서관. 다른 시스템에서는 이 옵션이 적용되지 않습니다.

-공유
공유 객체를 생성한 다음 다른 객체와 연결하여
실행 가능. 모든 시스템이 이 옵션을 지원하는 것은 아닙니다. 예측 가능한 결과를 얻으려면 다음을 수행해야 합니다.
또한 코드 생성에 사용된 것과 동일한 옵션 세트를 지정합니다(-fpic, -fPIC
모델 하위 옵션) 이 옵션을 지정할 때.[1]

-공유-libgcc
-정적-libgcc
제공하는 시스템에서 libgcc 공유 라이브러리로서 이러한 옵션은
각각 공유 또는 정적 버전입니다. 공유 버전이 없는 경우 libgcc 였다
컴파일러가 구성될 때 빌드된 경우 이러한 옵션은 효과가 없습니다.

응용 프로그램이 공유를 사용해야 하는 몇 가지 상황이 있습니다. libgcc
정적 버전 대신. 이들 중 가장 일반적인 것은 응용 프로그램이
다른 공유 라이브러리에서 예외를 throw하고 catch하려고 합니다. 그 경우,
각 라이브러리와 애플리케이션 자체는 공유를 사용해야 합니다. libgcc.

따라서 G++ 및 GCJ 드라이버는 자동으로 -공유-libgcc 빌드할 때마다
C++ 및 Java 프로그램이 일반적으로 사용하기 때문에 공유 라이브러리 또는 기본 실행 파일
예외이므로 이것이 옳은 일입니다.

대신 GCC 드라이버를 사용하여 공유 라이브러리를 생성하는 경우 공유 라이브러리가
항상 공유와 연결되는 것은 아닙니다. libgcc. GCC가 찾으면 해당 구성에서
옵션을 지원하지 않는 비 GNU 링커 또는 GNU 링커가 있는 시간
--eh-프레임-hdr, 공유 버전을 연결합니다. libgcc 에 의해 공유 라이브러리로
기본. 그렇지 않으면 링커를 활용하여 최적화합니다.
의 공유 버전과 연결 libgcc, libgcc의 정적 버전과 연결
기본적으로. 이렇게 하면 이러한 공유 라이브러리를 통해 예외가 전파될 수 있습니다.
라이브러리 로드 시 재배치 비용이 발생하지 않습니다.

그러나 라이브러리 또는 기본 실행 파일이 예외를 throw하거나 catch해야 하는 경우
에서 사용되는 언어에 따라 G++ 또는 GCJ 드라이버를 사용하여 링크해야 합니다.
프로그램 또는 옵션 사용 -공유-libgcc, 공유와 연결되도록
libgcc.

-정적-libstdc++
g ++ 프로그램은 C++ 프로그램을 연결하는 데 사용되며 일반적으로 자동으로
링크 libstdc++. 면 libstdc++ 공유 라이브러리로 사용할 수 있으며
-공전 옵션이 사용되지 않으면 공유 버전의
libstdc++. 일반적으로 괜찮습니다. 그러나 때때로 동결하는 것이 유용합니다.
버전 libstdc++ 완전히 정적 상태로 가지 않고 프로그램에서 사용
링크. NS -정적-libstdc++ 옵션은 g ++ 연결할 드라이버 libstdc++
정적으로 다른 라이브러리를 정적으로 연결하지 않아도 됩니다.

- 상징적
공유 객체를 빌드할 때 전역 기호에 대한 참조를 바인딩합니다. 경고
확인되지 않은 참조(링크 편집기 옵션으로 재정의되지 않는 한 -X링커 -z
-X링커 데프). 소수의 시스템만이 이 옵션을 지원합니다.

-T 스크립트
스크립트 링커 스크립트로. 이 옵션은 다음을 사용하는 대부분의 시스템에서 지원됩니다.
GNU 링커. 운영 체제가 없는 베어보드 대상과 같은 일부 대상에서는
전에, -T 정의되지 않은 기호에 대한 참조를 피하기 위해 링크할 때 옵션이 필요할 수 있습니다.

-X링커 선택권
패스 선택권 링커에 대한 옵션으로. 이를 사용하여 시스템별
GCC가 인식하지 못하는 링커 옵션.

별도의 인수를 취하는 옵션을 전달하려면 다음을 사용해야 합니다. -X링커
두 번, 옵션에 대해 한 번, 인수에 대해 한 번. 예를 들어 통과하려면 -주장하다
정의, 작성해야합니다 -X링커 -주장하다 -X링커 정의. 작동하지 않습니다
작성 -X링커 "-주장하다 정의", 이것은 전체 문자열을
링커가 기대하는 것과 다른 단일 인수.

GNU 링커를 사용할 때 일반적으로 링커에 인수를 전달하는 것이 더 편리합니다.
옵션을 사용하여 선택권=가치 별도의 인수가 아닌 구문입니다. 예를 들어, 당신은
지정할 수 있습니다 -X링커 -지도=출력.지도 보다는 -X링커 -지도 -X링커 출력.맵.
다른 링커는 명령줄 옵션에 대해 이 구문을 지원하지 않을 수 있습니다.

-NS,선택권
패스 선택권 링커에 대한 옵션으로. 만약에 선택권 쉼표가 포함되어 있습니다.
쉼표에 여러 옵션이 있습니다. 이 구문을 사용하여 인수를
선택권. 예를 들면 -Wl,-Map, output.map 패스 -지도 출력.맵 링커에. 언제
GNU 링커를 사용하면 다음과 같은 효과를 얻을 수도 있습니다. -Wl, -Map = output.map.

참고: Ubuntu 8.10 이상 버전에서 LDFLAGS의 경우 옵션 -Wl,-z,relro 사용.
비활성화하려면 다음을 사용하십시오. -Wl,-z,노렐로.

-u 상징
기호 척 상징 정의되지 않음, 라이브러리 모듈을 강제로 연결하여 정의
그것. 당신이 사용할 수있는 -u 로드를 강제로 다른 기호로 여러 번
추가 라이브러리 모듈.

옵션 for 명부 담당 검색
이 옵션은 헤더 파일, 라이브러리 및 부품을 검색할 디렉토리를 지정합니다.
컴파일러의:

-IDIR
디렉토리 추가 DIR 헤더를 검색할 디렉토리 목록의 헤드로
파일. 이것은 시스템 헤더 파일을 무시하고 자신의 헤더 파일을 대체하는 데 사용할 수 있습니다.
버전, 이러한 디렉토리는 시스템 헤더 파일보다 먼저 검색되기 때문에
디렉토리. 그러나 다음을 포함하는 디렉토리를 추가하는 데 이 옵션을 사용해서는 안 됩니다.
공급업체 제공 시스템 헤더 파일(사용 -아이시스템 그에 대한). XNUMX개 이상 사용하는 경우
-I 옵션을 선택하면 디렉토리가 왼쪽에서 오른쪽으로 스캔됩니다. 표준 시스템
디렉토리가 뒤에 옵니다.

표준 시스템에 디렉토리가 포함되거나 다음으로 지정된 디렉토리가 있는 경우 -아이시스템이다
와도 지정 -IWalk Through California 프로그램, -I 옵션은 무시됩니다. 디렉토리는 여전히
검색하지만 시스템의 정상적인 위치에 있는 시스템 디렉토리로 체인을 포함합니다.
이것은 버그가 있는 시스템 헤더와 순서를 수정하기 위한 GCC의 절차를 보장하기 위한 것입니다.
include_next 지시문은 실수로 변경되지 않습니다. 정말 필요하다면
시스템 디렉토리에 대한 검색 순서를 변경하려면 다음을 사용하십시오. -Nostdinc 및 / 또는 -아이시스템
옵션을 제공합니다.

-iplugindir=DIR
에 의해 전달된 플러그인을 검색할 디렉토리를 설정합니다. -f플러그인=name 대신
-f플러그인=통로/name.그래서. 이 옵션은 사용자가 사용하기 위한 것이 아니라
운전자가 지나쳤습니다.

- 인용DIR
디렉토리 추가 DIR 헤더를 검색할 디렉토리 목록의 헤드로
경우에만 파일 #포함 "파일"; 그들은 검색되지 않습니다 #포함 <파일>,
그렇지 않으면 처럼 -I.

-LDIR
디렉토리 추가 DIR 검색할 디렉토리 목록으로 -l.

-B접두사
이 옵션은 실행 파일, 라이브러리, 포함 파일 및
컴파일러 자체의 데이터 파일.

컴파일러 드라이버 프로그램은 하나 이상의 하위 프로그램을 실행합니다. CPP, cc1, asld.
그것은 시도 접두사 실행하려는 각 프로그램의 접두사로 사용 여부와 관계없이
기계/버전/.

실행할 각 하위 프로그램에 대해 컴파일러 드라이버는 먼저 다음을 시도합니다. -B 접두사(있는 경우).
해당 이름을 찾을 수 없거나 -B 지정되지 않은 경우 드라이버는 두 가지 표준을 시도합니다.
접두사, /usr/lib/gcc//usr/local/lib/gcc/. 둘 다 결과가 없으면
발견된 파일 이름, 수정되지 않은 프로그램 이름을 사용하여 검색
귀하의 디렉토리에 지정된 PATH 환경 변수.

컴파일러는 경로가 제공한 경로인지 확인합니다. -B 디렉토리를 참조하고,
그리고 필요한 경우 경로 끝에 디렉토리 구분 문자를 추가합니다.

-B 디렉토리 이름을 효과적으로 지정하는 접두사는 라이브러리의 라이브러리에도 적용됩니다.
컴파일러가 이러한 옵션을 -L 링커에 대한 옵션.
컴파일러가 번역하기 때문에 전처리기의 포함 파일에도 적용됩니다.
이러한 옵션을 -아이시스템 전처리기 옵션. 이 경우 컴파일러는
추가 포함 접두사에.

런타임 지원 파일 libgcc.a 를 사용하여 검색할 수도 있습니다. -B 접두사, 경우
필요. 거기에 없으면 위의 두 가지 표준 접두사가 시도되고
모두입니다. 이러한 방법으로 파일을 찾지 못하면 파일이 링크에서 제외됩니다.

접두사를 지정하는 또 다른 방법은 다음과 같습니다. -B 접두사는 환경을 사용하는 것입니다
변수 GCC_EXEC_PREFIX.

특별한 kludge로 경로가 제공되는 경우 -B is [디렉터리/]스테이지N/어디로 N 숫자이다
0에서 9 사이의 범위에서 다음으로 대체됩니다. [디렉터리/]포함. 이것은 도움이
컴파일러 부트스트랩.

-사양=파일
방법 파일 컴파일러가 표준을 읽은 후 명세서 파일을 재정의하기 위해
기본값은 GCC 드라이버 프로그램은 전달할 스위치를 결정할 때 사용합니다.
cc1, 씨원플러스, as, ld등. 하나 이상 -사양=파일 에 지정할 수 있습니다.
명령줄에서 왼쪽에서 오른쪽으로 순서대로 처리됩니다.

--sysroot=DIR
DIR 헤더 및 라이브러리에 대한 논리적 루트 디렉토리로 사용됩니다. 예를 들어,
컴파일러는 일반적으로 다음 위치에서 헤더를 검색합니다. / usr / include 및 라이브러리 를 / usr / lib에,
대신 검색합니다 디렉토리/usr/포함디렉토리/usr/lib.

이 옵션과 -isysroot 옵션을 선택한 다음 --sysroot 옵션은
도서관에 적용되지만 -isysroot 옵션은 헤더 파일에 적용됩니다.

GNU 링커(버전 2.16부터 시작)에는 이에 대한 필요한 지원이 있습니다.
옵션. 링커가 이 옵션을 지원하지 않으면 헤더 파일 측면에서
--sysroot 여전히 작동하지만 라이브러리 측면은 작동하지 않습니다.

-나는- 이 옵션은 더 이상 사용되지 않습니다. 이용 해주세요 - 인용 대신 -I 이전 디렉토리
전에, -나는- 및 제거 -나는-. 지정한 모든 디렉토리 -I 전에 옵션
-나는- 옵션은 다음의 경우에만 검색됩니다. #포함 "파일"; 그들은 검색되지 않습니다
for #포함 <파일>.

추가 디렉토리가 지정된 경우 -I 이후의 옵션 -나는-
디렉토리는 모두 검색됩니다. #포함 지시. (보통 모든 -I 디렉토리
이런 식으로 사용됩니다.)

또한, -나는- 이 옵션은 현재 디렉토리의 사용을 금지합니다(여기서
현재 입력 파일의 출처)에 대한 첫 번째 검색 디렉토리 #포함 "파일".
이 효과를 무시할 수 있는 방법은 없습니다. -나는-. 과 -나는. 검색을 지정할 수 있습니다
컴파일러가 호출될 때 현재의 디렉토리입니다. 정확히는 아니다.
전처리기가 기본적으로 수행하는 것과 동일하지만 종종 만족스럽습니다.

-나는- 헤더 파일에 대한 표준 시스템 디렉토리의 사용을 금지하지 않습니다.
따라서, -나는--Nostdinc 독립적입니다.

지정 목표 머신 컴파일러 버전
GCC를 실행하는 일반적인 방법은 GCC기계-gcc 교차할 때
컴파일하거나 기계-gcc-버전 설치된 버전이 아닌 다른 버전을 실행하려면
마지막.

하드웨어 모델 구성
각 대상 머신 유형은 다음과 같이 고유한 특수 옵션을 가질 수 있습니다. -m, 선택
다양한 하드웨어 모델 또는 구성 중에서 ---예: 68010 대 68020, 부동
보조 프로세서 또는 없음. 단일 설치된 컴파일러 버전은 모든 모델에 대해 컴파일할 수 있습니다.
또는 지정된 옵션에 따라 구성합니다.

컴파일러의 일부 구성은 일반적으로 다음과 같은 추가 특수 옵션도 지원합니다.
동일한 플랫폼의 다른 컴파일러와의 호환성.

아답테바 출현 옵션

Bowman의 -m 옵션은 Adapteva Epiphany에 대해 정의됩니다.

-mhalf-reg-파일
"r32"..."r63" 범위의 레지스터를 할당하지 마십시오. 코드를 실행할 수 있는
이러한 레지스터가 없는 하드웨어 변형.

-mprefer-짧은-insn-regs
짧은 명령어 생성을 허용하는 레지스터를 우선적으로 할당합니다. 이것은 할 수 있습니다
결과적으로 명령어 수가 증가하므로 코드 크기가 감소하거나 증가하면
경우에 따라 다를 수 있습니다.

-mbranch 비용=NUM
분기 비용을 대략적으로 설정 NUM "간단한" 지침. 이 비용은 단지
발견적이며 릴리스 간에 일관된 결과를 생성하지 않을 수 있습니다.

-mcmmove
조건부 이동 생성을 활성화합니다.

-mnops=NUM
방출 NUM 다른 모든 생성된 명령어 전에 nops.

-mno-soft-cmpsf
단정밀도 부동 소수점 비교의 경우 fsub 명령어를 내보내고 테스트하십시오.
플래그. 이것은 소프트웨어 비교보다 빠르지만 잘못된 결과를 얻을 수 있습니다.
NaN의 존재 또는 두 개의 다른 작은 숫자가 다음과 같이 비교될 때
차이는 XNUMX으로 계산됩니다. 기본값은 -msoft-cmpsf, 더 느리게 사용하지만
IEEE 호환 소프트웨어 비교.

-mstack 오프셋=NUM
스택 상단과 스택 포인터 사이의 오프셋을 설정합니다. 예: 8의 값
sp+0...sp+7 범위의 XNUMX바이트를 리프 함수에서 사용할 수 있음을 의미합니다.
스택 할당 없이 이외의 값 8 or 16 테스트되지 않았으며 가능성이 낮습니다.
일하다. 또한 이 옵션은 ABI를 변경하여 다음을 사용하여 프로그램을 컴파일합니다.
라이브러리가 컴파일된 것과 다른 스택 오프셋은 일반적으로
일하다. 이 옵션은 스택 오프셋이 다른지 평가하려는 경우에 유용할 수 있습니다.
더 나은 코드를 제공하지만 실제로 다른 스택 오프셋을 사용하여 빌드하려면
프로그램이 작동하는 경우 적절한 도구 체인을 구성하는 것이 좋습니다.
--스택 오프셋 포함=NUM 옵션을 선택합니다.

-mno-round-가장 가까운
스케줄러가 반올림 모드가 자르기로 설정되었다고 가정하도록 합니다. NS
기본값은 -mround-가장 가까운.

-mlong-통화
속성에 의해 달리 지정되지 않은 경우 모든 호출이
b / bl 명령어의 오프셋 범위, 따라서 함수 주소를 로드
(그렇지 않으면 직접) 호출을 수행하기 전에 레지스터. 이것이 기본값입니다.

-m짧은 통화
속성에 의해 달리 지정되지 않은 경우 모든 직접 호출이 범위에 있다고 가정합니다.
b / bl 명령어 중 하나이므로 직접 호출에 이 명령어를 사용하십시오. 기본값
is -mlong-통화.

-msmall16
주소가 16비트 부호 없는 값으로 로드될 수 있다고 가정합니다. 이것은 적용되지 않습니다
기능 주소 -mlong-통화 의미론이 유효합니다.

-mfp 모드=모드
부동 소수점 단위의 기본 모드를 설정합니다. 이것은 부동을 결정합니다.
함수 호출 및 반환 시점에 제공되고 예상되는 포인트 모드입니다. 만들기
이 모드는 기능 시작 시 주로 필요한 모드와 일치하여
불필요한 모드 전환을 방지하여 프로그램을 더 작고 빠르게 만듭니다.

모드 다음 값 중 하나로 설정할 수 있습니다.

발신자
기능 진입 시 모든 모드가 유효하며, 기능 진입 시 유지 또는 복원됩니다.
반환하고 다른 함수를 호출할 때. 이 모드는 컴파일에 유용합니다.
다른 라이브러리에 통합할 수 있는 라이브러리 또는 기타 컴파일 단위
널리 사용되는 FPU 모드가 다른 프로그램 및
단일 개체 파일을 사용하면 추가 모드에 대한 크기와 속도 오버헤드가 더 큽니다.
필요할 수 있는 전환,
일반적인 FPU 모드의 특정 선택.

자르다
이것은 잘림(예: 반올림)이 있는 부동 소수점 계산에 사용되는 모드입니다.
XNUMX으로) 반올림 모드. 여기에는 부동 소수점에서
정수.

가장 가까운
이것은 가장 가까운 값으로 반올림하는 부동 소수점 계산에 사용되는 모드입니다.
짝수 반올림 모드.

INT 이것은 FPU에서 정수 계산을 수행하는 데 사용되는 모드입니다. 예: 정수
곱하기 또는 정수 곱하기 및 누산.

디폴트는 -mfp-mode=호출자

-mnosplit-lohi
-mno-postinc
-mno-사후 수정
32비트 로드 분할을 각각 비활성화하는 코드 생성 조정,
사후 증가 주소 생성 및 사후 수정 주소 생성. NS
기본값은 msplit-lohi, -mpost-inc-mpost 수정.

-mnovect-더블
기본 SIMD 모드를 SImode로 변경합니다. 기본값은 -mvect-더블, 어떤 용도
DImode를 기본 SIMD 모드로 사용합니다.

-최대 벡터 정렬=NUM
SIMD 벡터 모드 유형에 대한 최대 정렬입니다. NUM 4 또는 8일 수 있습니다. 기본값은
8. 많은 라이브러리 함수 인터페이스가
크기에 영향을 주는 위치에서 SIMD 벡터 모드를 사용하지 않는 경우 영향을 받지 않습니다.
및/또는 관련 유형의 정렬.

-msplit-vecmove-early
분할 벡터는 다시 로드하기 전에 단일 단어로 이동합니다. 이론적으로 이것은 줄 수 있습니다
더 나은 레지스터 할당이지만 지금까지는 일반적으로 그 반대인 것 같습니다.

-m1reg-등록 번호
-1 상수를 유지하는 레지스터를 지정하면 로딩이 작아집니다.
상수 및 특정 비트마스크가 더 빠릅니다. reg에 허용되는 값은 r43 및 r63이며,
해당 레지스터를 고정 레지스터로 사용하도록 지정하고 없음을 의미합니다.
이를 위해 레지스터가 사용됩니다. 기본값은 -m1reg-없음.

AAArch64 옵션

이러한 옵션은 AArch64 구현에 대해 정의됩니다.

-mbig-엔디안
빅 엔디안 코드를 생성합니다. 이것은 GCC가
aarch64_be-*-* 대상입니다.

-mgeneral-regs-only.
일반 레지스터만 사용하는 코드를 생성합니다.

-미리틀 엔디안
리틀 엔디안 코드를 생성합니다. 이것은 GCC가
아치64-*-* 하지만 aarch64_be-*-* 대상입니다.

-mcmodel=작은
작은 코드 모델에 대한 코드를 생성합니다. 프로그램 및 정적으로 정의된 기호
서로 1GB 이내여야 합니다. 포인터는 64비트입니다. 프로그램은 정적으로
또는 동적으로 연결됩니다. 이 모델은 완전히 구현되지 않았으며 대부분 다음과 같이 처리됩니다.
"작은".

-mcmodel=작은
작은 코드 모델에 대한 코드를 생성합니다. 프로그램과 정적으로 정의된 프로그램
기호는 서로 4GB 이내여야 합니다. 포인터는 64비트입니다. 프로그램 수
정적으로 또는 동적으로 연결됩니다. 이것은 기본 코드 모델입니다.

-mcmodel=대형
대규모 코드 모델에 대한 코드를 생성합니다. 이것은 주소와
섹션의 크기. 포인터는 64비트입니다. 프로그램은 정적으로만 연결할 수 있습니다.

-mstrict-정렬
정렬되지 않은 메모리 참조가 시스템에서 처리될 것이라고 가정하지 마십시오.

-momit-리프 프레임 포인터
-mno-생략-리프-프레임-포인터
리프 함수에서 프레임 포인터를 생략하거나 유지합니다. 이전의 행동은
태만.

-mtls-dialect=desc
TLS의 동적 액세스를 위한 스레드 로컬 스토리지 메커니즘으로 TLS 설명자를 사용합니다.
변수. 이것이 기본값입니다.

-mtls-dialect=전통
TLS의 동적 액세스를 위한 스레드 로컬 스토리지 메커니즘으로 기존 TLS 사용
변수.

-행진=name
선택적으로 하나 이상의 접미사가 붙는 대상 아키텍처의 이름을 지정합니다.
기능 수정자. 이 옵션의 형식은 -행진=아치{+[아니]기능}*, 여기서
에 대한 유일한 가치 아치 is armv8-a. 가능한 값 기능 에 문서화되어 있습니다
아래 하위 섹션.

충돌하는 기능 수정자가 지정된 경우 가장 오른쪽에 있는 기능이 사용됩니다.

GCC는 이 이름을 사용하여 생성할 때 어떤 종류의 명령을 내보낼 수 있는지 결정합니다.
어셈블리 코드. 이 옵션은 다음과 함께 또는 대신 사용할 수 있습니다. -mcpu =
옵션을 선택합니다.

-mcpu =name
선택적으로 하나 이상의 기능이 접미사로 붙는 대상 프로세서의 이름을 지정합니다.
수정자. 이 옵션의 형식은 -mcpu =CPU{+[아니]기능}*, 가능한 경우
CPU are 일반적인, 넓은. 가능한 값 기능 에 문서화되어 있습니다.
아래의 하위 섹션.

충돌하는 기능 수정자가 지정된 경우 가장 오른쪽에 있는 기능이 사용됩니다.

GCC는 이 이름을 사용하여 생성할 때 어떤 종류의 명령을 내보낼 수 있는지 결정합니다.
어셈블리 코드.

-mtune=name
성능을 조정할 프로세서의 이름을 지정하십시오. 코드가 조정됩니다
대상 프로세서가 이 옵션에 지정된 유형이지만 여전히 사용 중인 것처럼
a에 의해 지정된 대상 프로세서와 호환되는 명령어 -mcpu = 선택권. 이
옵션에는 기능 수정자가 붙을 수 없습니다.

-XNUMX 월-mcpu 기능 수정자

와 함께 사용되는 기능 수정자 -XNUMX 월-mcpu 다음 중 하나일 수 있습니다.

암호화는
암호화 확장을 활성화합니다. 이는 고급 SIMD가 활성화되었음을 의미합니다.

fp 부동 소수점 명령어를 활성화합니다.

SIMD
고급 SIMD 지침을 활성화합니다. 이것은 부동 소수점 명령어가
활성화. 이것은 현재 가능한 모든 옵션 값의 기본값입니다. -XNUMX 월
-mcpu =.

ARM 옵션

Bowman의 -m 옵션은 ARM(Advanced RISC Machines) 아키텍처에 대해 정의됩니다.

-마비=name
지정된 ABI에 대한 코드를 생성합니다. 허용되는 값은 다음과 같습니다. apcs-gnu, atpcs, 앗싸,
aapcs-리눅스으으으음.

-mapcs-프레임
ARM 프로시저 호출 표준을 준수하는 스택 프레임 생성
코드의 올바른 실행을 위해 꼭 필요한 것은 아니더라도 기능을 사용할 수 있습니다.
지정 -fomit 프레임 포인터 이 옵션을 사용하면 스택 프레임이
리프 함수에 대해 생성됩니다. 기본값은 -mno-apcs-프레임.

-맵
이것은 동의어입니다 -mapcs-프레임.

-mthumb-연동
ARM과 Thumb 명령어 세트 간의 호출을 지원하는 코드를 생성합니다.
이 옵션이 없으면 v5 이전 아키텍처에서 두 개의 명령어 세트를
하나의 프로그램 내에서 안정적으로 사용됩니다. 기본값은 -mno-thumb-연동, 약간부터
더 큰 코드가 생성될 때 -mthumb-연동 지정됩니다. AAPCS 구성에서
이 옵션은 의미가 없습니다.

-mno-sched-프롤로그
함수 프롤로그에서 명령어의 재정렬 또는 병합을 방지합니다.
함수 본문에 있는 지침이 있는 해당 지침. 이것은 모든
기능은 인식 가능한 일련의 명령(또는 실제로
다른 기능 프롤로그의 작은 세트에서 선택), 이 정보는
실행 가능한 코드 조각 내에서 함수의 시작을 찾는 데 사용됩니다. 기본값
is -msched-프롤로그.

-mfloat-abi=name
사용할 부동 소수점 ABI를 지정합니다. 허용되는 값은 다음과 같습니다. 부드러운, 소프트 FP
하드.

지정 부드러운 GCC가 부동에 대한 라이브러리 호출을 포함하는 출력을 생성하도록 합니다.
포인트 작업. 소프트 FP 하드웨어 부동 소수점을 사용하여 코드 생성 가능
명령이지만 여전히 소프트 플로트 호출 규칙을 사용합니다. 하드
부동 소수점 명령어 생성 및 FPU 관련 호출 규칙을 사용합니다.

기본값은 특정 대상 구성에 따라 다릅니다. 하드 플로트
소프트 플로트 ABI는 링크와 호환되지 않습니다. 다음을 사용하여 전체 프로그램을 컴파일해야 합니다.
동일한 ABI 및 호환 가능한 라이브러리 세트와 연결됩니다.

-미리틀 엔디안
리틀 엔디안 모드에서 실행되는 프로세서에 대한 코드를 생성합니다. 에 대한 기본값입니다.
모든 표준 구성.

-mbig-엔디안
빅 엔디안 모드에서 실행되는 프로세서에 대한 코드를 생성합니다. 기본값은 컴파일하는 것입니다.
리틀 엔디안 프로세서용 코드.

-mwords-리틀엔디안
이 옵션은 빅 엔디안 프로세서용 코드를 생성할 때만 적용됩니다. 생성하다
리틀 엔디안 단어 순서를 위한 코드이지만 빅 엔디안 바이트 순서. 즉, 바이트
형식의 순서 32107654. 참고: 이 옵션은 필요한 경우에만 사용해야 합니다.
버전에 의해 생성된 빅 엔디안 ARM 프로세서용 코드와의 호환성
2.8 이전의 컴파일러. 이 옵션은 이제 더 이상 사용되지 않습니다.

-행진=name
대상 ARM 아키텍처의 이름을 지정합니다. GCC는 이 이름을 사용하여
어셈블리 코드를 생성할 때 어떤 종류의 명령어를 내보낼 수 있는지 결정합니다. 이것
옵션과 함께 또는 대신 사용할 수 있습니다. -mcpu = 옵션. 허용
이름은 다음과 같습니다. armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
ARMV5TE, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, 으으으음, iwmmxt2, ep9312.

-march = 네이티브 컴파일러가 빌드 아키텍처를 자동 감지하도록 합니다.
컴퓨터. 현재 이 기능은 Linux에서만 지원되며 모든
아키텍처를 인정합니다. 자동 감지에 실패한 경우 옵션이 없습니다.
효과.

-mtune=name
이 옵션은 GCC가 조정해야 하는 대상 ARM 프로세서의 이름을 지정합니다.
코드의 성능. 일부 ARM 구현의 경우 더 나은 성능이 될 수 있습니다.
이 옵션을 사용하여 얻습니다. 허용되는 이름은 다음과 같습니다. arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, 팔7m, 팔7d, arm7dm, 암7디, arm7dmi, arm70,
arm700, 암700i, arm710, 팔710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, 팔710t, 팔720t, 팔740t, 강한 팔, 스트롱암110, 스트롱암1100,
스트롱암1110, arm8, arm810, arm9, 암9e, arm920, 팔920t, 팔922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, 팔940t, arm9tdmi, arm10tdmi, 팔1020t, arm1026ej-s,
암10e, 암1020e, 암1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, 피질 -a5, 피질 -a7, 피질 -a8, 피질 -a9,
피질 -a15, 피질-r4, 피질-r4f, 피질-r5, 피질-m4, 피질-m3, 피질-m1,
피질-m0, 엑스스케일, 으으으음, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune=일반-아치 GCC가 혼합에 대한 성능을 조정해야 함을 지정합니다
아키텍처 내의 프로세서 아치. 목표는 잘 실행되는 코드를 생성하는 것입니다.
현재 가장 널리 사용되는 프로세서, 일부 이점을 제공하는 최적화 간의 균형
범위의 CPU를 사용하고 다른 CPU의 성능 함정을 방지합니다. 의 효과
이 옵션은 CPU 모델이 왔다가 사라지면서 향후 GCC 버전에서 변경될 수 있습니다.

-mtune=네이티브 컴파일러가 빌드 컴퓨터의 CPU를 자동 감지하도록 합니다. ~에
현재 이 기능은 Linux에서만 지원되며 모든 아키텍처가 지원되는 것은 아닙니다.
인식. 자동 감지에 실패하면 옵션이 적용되지 않습니다.

-mcpu =name
대상 ARM 프로세서의 이름을 지정합니다. GCC는 이 이름을 사용하여
대상 ARM 아키텍처의 이름( -XNUMX 월) 및 ARM 프로세서
성능을 위해 조정할 유형(에 의해 지정된 것처럼 -mtune). 이 옵션이 있는 곳
와 함께 사용됩니다 -XNUMX 월 or -mtune, 해당 옵션이
이 옵션의 적절한 부분.

이 옵션에 허용되는 이름은 다음과 같습니다. -mtune.

-mcpu=일반-아치 도 허용되며 다음과 동일합니다. -행진=아치
-mtune=일반-아치. 참조 -mtune

-mcpu=네이티브 컴파일러가 빌드 컴퓨터의 CPU를 자동 감지하도록 합니다. ~에
현재 이 기능은 Linux에서만 지원되며 모든 아키텍처가 지원되는 것은 아닙니다.
인식. 자동 감지에 실패하면 옵션이 적용되지 않습니다.

-mfpu=name
-mfpe=번호
-mfp=번호
이것은 어떤 부동 소수점 하드웨어(또는 하드웨어 에뮬레이션)를 사용할 수 있는지 지정합니다.
목표. 허용되는 이름은 다음과 같습니다. fpa, fpe2, fpe3, 정당 따위에서 협조하지 않는 사람, 가상현실, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, 네온, 네온 fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16네온 vfpv4. -mfp-mfpe 의 동의어입니다 -mfpu=fpe번호에 대한
이전 버전의 GCC와의 호환성.

If -msoft-float 부동 소수점 값의 형식을 지정합니다.

선택한 부동 소수점 하드웨어에 NEON 확장이 포함된 경우(예: -mfpu=네온),
부동 소수점 연산은 GCC의 자동 벡터화 패스에서 사용되지 않습니다.
...을 제외하면 -재미있는 수학 최적화 도 지정됩니다. NEON 하드웨어 때문입니다.
부동 소수점 산술에 대한 IEEE 754 표준을 완전히 구현하지 않습니다(in
특정 비정규 값은 XNUMX으로 처리됨), 따라서 NEON 명령어를 사용하면
정밀도의 손실로 이어집니다.

-mfp16 형식=name
"__fp16" 반정밀도 부동 소수점 유형의 형식을 지정합니다. 허용
이름은 없음, 대안; 기본값은 없음, 이 경우 "__fp16"
유형이 정의되지 않았습니다.

-m구조-크기-경계=n
모든 구조 및 공용체의 크기는 숫자의 배수로 반올림됩니다.
이 옵션에 의해 설정된 비트 수. 허용되는 값은 8, 32 및 64입니다. 기본값은
도구 모음마다 다릅니다. COFF 대상 도구 체인의 경우 기본값은
8. 64 값은 기본 ABI가 지원하는 경우에만 허용됩니다.

더 큰 수를 지정하면 더 빠르고 효율적인 코드를 생성할 수 있지만
프로그램의 크기를 늘립니다. 다른 값은 잠재적으로 호환되지 않습니다.
하나의 값으로 컴파일된 코드는 반드시 코드 또는 라이브러리와 함께 작동할 것으로 기대할 수 없습니다.
구조체 또는 공용체를 사용하여 정보를 교환하는 경우 다른 값으로 컴파일됩니다.

- mabort-on-noreturn
"noreturn" 함수의 끝에서 "abort" 함수에 대한 호출을 생성합니다. 그것은 것이다
함수가 반환을 시도하면 실행됩니다.

-mlong-통화
-mno-long-통화
컴파일러에게 먼저 주소를 로드하여 함수 호출을 수행하도록 지시합니다.
함수를 레지스터에 넣은 다음 이 레지스터에서 서브루틴 호출을 수행합니다. 이것
대상 기능이 64MB 주소 지정 외부에 있는 경우 스위치가 필요합니다.
서브루틴 호출 명령의 오프셋 기반 버전 범위.

이 스위치가 활성화된 경우에도 모든 함수 호출이 긴 호출로 바뀌는 것은 아닙니다.
휴리스틱은 정적 함수, 짧은 전화 속성,
범위 내에 있는 함수 #프라그마 no_long_calls 지시문 및 기능
현재 컴파일 단위 내에서 정의가 이미 컴파일된 경우
긴 통화로 바뀌지 않습니다. 이 규칙의 예외는 약한 기능입니다.
정의, 기능 긴 전화 속성 또는 섹션에 있어야 합니다. 속성 및
범위 내에 있는 기능 #프라그마 긴 통화 지시문은 항상
긴 통화로 바뀌었습니다.

이 기능은 기본적으로 활성화되어 있지 않습니다. 지정 -mno-long-통화 복원할 것이다
의 범위 내에서 함수 호출을 배치하는 것처럼 기본 동작 #프라그마
long_calls_off 지령. 이러한 스위치는 컴파일러가
함수 포인터를 통해 함수 호출을 처리하는 코드를 생성합니다.

-msingle-pic-base
PIC 주소 지정에 사용되는 레지스터를 로드하는 대신 읽기 전용으로 처리하십시오.
각 기능에 대한 프롤로그. 런타임 시스템은 이것을 초기화할 책임이 있습니다.
실행이 시작되기 전에 적절한 값으로 등록하십시오.

-mpic-레지스터=등록 번호
PIC 주소 지정에 사용할 레지스터를 지정합니다. 스택이 없으면 기본값은 R10입니다.
R9를 사용할 때 검사가 활성화됩니다.

-mcirrus-수정-무효-insns
문제를 해결하기 위해 명령 스트림에 NOP를 삽입하십시오.
잘못된 Maverick 명령어 조합. 이 옵션은 다음 경우에만 유효합니다.
-mcpu=ep9312 옵션은 Cirrus에 대한 명령어 생성을 활성화하는 데 사용되었습니다.
Maverick 부동 소수점 보조 프로세서. 이 옵션은 기본적으로 활성화되어 있지 않습니다.
문제는 이전 Maverick 구현에만 있습니다. 기본값은 다시
를 사용하여 활성화 -mno-cirrus-fix-invalid-insns 스위치.

-mpoke 함수 이름
함수 바로 앞에 있는 텍스트 섹션에 각 함수의 이름을 씁니다.
프롤로그. 생성된 코드는 다음과 유사합니다.

t0
.ascii "arm_poke_function_name", 0
.맞추다
t1
.단어 0xff000000 + (t1 - t0)
arm_poke_function_name
이동 IP, SP
stmfd sp!, {fp, ip, lr, pc}
서브 FPS, IP, #4

스택 역추적을 수행할 때 코드는 "fp +
0". 추적 기능이 "pc - 12" 위치를 찾고 상위 8비트는
설정하면 바로 앞에 함수 이름이 포함되어 있다는 것을 알 수 있습니다.
위치 및 길이는 "((pc[-3]) & 0xff000000)"입니다.

-엄지손가락
-마름
ARM 및 Thumb 상태에서 실행되는 코드 생성 중에서 선택합니다. 기본값
대부분의 구성은 ARM 상태에서 실행되는 코드를 생성하는 것이지만 기본값은
다음으로 GCC를 구성하여 변경할 수 있습니다. --with-모드=상태 옵션을 구성합니다.

-mtpcs-프레임
Thumb 프로시저 호출 표준을 준수하는 스택 프레임 생성
리프가 아닌 모든 함수. (리프 함수는 다른 함수를 호출하지 않는 함수입니다.
기능.) 기본값은 -mno-tpcs-프레임.

-mtpcs-리프 프레임
Thumb 프로시저 호출 표준을 준수하는 스택 프레임 생성
모든 잎 기능. (리프 함수는 다른 함수를 호출하지 않는 함수입니다.)
디폴트는 -mno-apcs-리프 프레임.

-mcallee-슈퍼 인터워킹
컴파일 중인 파일에서 외부에서 볼 수 있는 모든 함수에 ARM 명령어를 제공합니다.
나머지 기능을 실행하기 전에 Thumb 모드로 전환하는 헤더를 설정하십시오.
이렇게 하면 이러한 함수가 비인터워킹 코드에서 호출될 수 있습니다. 이 옵션은
인터워킹이 기본적으로 활성화되어 있기 때문에 AAPCS 구성에서는 유효하지 않습니다.

-mcaller-슈퍼 인터워킹
함수 포인터(가상 함수 포함)를 통한 호출이 올바르게 실행되도록 허용
대상 코드가 인터워킹을 위해 컴파일되었는지 여부에 관계없이.
이 옵션이 있으면 함수 포인터를 실행하는 비용에 약간의 오버헤드가 있습니다.
사용 가능. 이 옵션은 AAPCS 구성에서 유효하지 않습니다.
기본적으로 활성화되어 있습니다.

-mtp=name
스레드 로컬 스토리지 포인터에 대한 액세스 모델을 지정하십시오. 유효한 모델은
부드러운, "__aeabi_read_tp"에 대한 호출을 생성합니다. cp15, 스레드를 가져옵니다.
"cp15"에서 직접 포인터(arm6k 아키텍처에서 지원됨) 및 자동, 그
선택한 프로세서에 가장 적합한 방법을 사용합니다. 기본 설정은
자동.

-mtls-방언=방언
스레드 로컬 저장소에 액세스하는 데 사용할 언어를 지정합니다. 두 개의 방언은
지원 --- 암소 비슷한 일종의 영양gnu2. 그만큼 암소 비슷한 일종의 영양 방언은 원래 GNU 체계를 선택합니다.
로컬 및 글로벌 동적 TLS 모델을 지원합니다. NS gnu2 방언은 GNU를 선택합니다
공유 라이브러리에 더 나은 성능을 제공하는 설명자 체계. GNU
설명자 체계는 원래 체계와 호환되지만 새 체계가 필요합니다.
어셈블러, 링커 및 라이브러리 지원. 초기 및 로컬 실행 TLS 모델은 다음과 같습니다.
이 옵션의 영향을 받지 않으며 항상 원래 구성표를 사용합니다.

-mword-재배치
단어 크기 값(즉, R_ARM_ABS32)에 대해서만 절대 재배치를 생성합니다. 이것은
런타임 로더가 부과하는 대상(uClinux, SymbianOS)에서 기본적으로 활성화됨
이 제한, 그리고 언제 -fpic or -fPIC 이 지정됩니다.

-mfix-cortex-m3-ldrd
일부 Cortex-M3 코어는 "ldrd" 명령이
중복 대상 및 기본 레지스터가 사용됩니다. 이 옵션은 생성을 방지합니다.
이 지침. 이 옵션은 다음과 같은 경우 기본적으로 활성화됩니다. -mcpu=피질-m3 is
지정되었습니다.

-munaligned 액세스
-mno-정렬되지 않은-액세스
주소에서 16비트 및 32비트 값 읽기 및 쓰기 활성화(또는 비활성화)
16비트 또는 32비트로 정렬되지 않습니다. 기본적으로 정렬되지 않은 액세스는 모든 사용자에 대해 비활성화됩니다.
ARMv6 이전 및 모든 ARMv6-M 아키텍처에서 지원되며 다른 모든 아키텍처에서 활성화됩니다. 만약에
정렬되지 않은 액세스가 활성화되지 않으면 패킹된 데이터 구조의 단어에 액세스됩니다.
한 번에 바이트.

ARM 속성 "Tag_CPU_unaligned_access"는 생성된 개체 파일에 설정됩니다.
이 옵션의 설정에 따라 true 또는 false로 설정됩니다. 정렬되지 않은 경우
액세스가 활성화되면 전처리기 기호 "__ARM_FEATURE_UNALIGNED"도 사용됩니다.
한정된.

-64비트용 mneon
Neon을 사용하여 스칼라 64비트 작업을 처리할 수 있습니다. 기본적으로 비활성화되어 있습니다.
코어 레지스터에서 네온으로 데이터를 이동하는 비용이 높기 때문입니다.

AVR 옵션

-mmcu=MCU
Atmel AVR ISA(명령 세트 아키텍처) 또는 MCU 유형을 지정합니다.

이 옵션의 기본값은@tie{}"avr2"입니다.

GCC는 다음 AVR 장치 및 ISA를 지원합니다.

"avr2"
최대 8@tie{}KiB의 프로그램 메모리가 있는 "클래식" 기기. MCU@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
최대 8@tie{}KiB의 프로그램 메모리와 "MOVW"가 있는 "클래식" 기기
교수. MCU@tie{}= "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "attiny85", "attiny861",
"attiny861a", "attiny87", "attiny88", "at86rf401".

"avr3"
프로그램 메모리가 16@tie{}KiB에서 최대 64@tie{}KiB인 "클래식" 기기.
MCU@tie{}= "at43usb355", "at76c711".

"avr31"
128@tie{}KiB의 프로그램 메모리가 있는 "클래식" 기기. MCU@tie{}= "atmega103",
"at43usb320".

"avr35"
16@tie{}KiB에서 최대 64@tie{}KiB의 프로그램 메모리와
"MOVW" 명령. MCU@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
최대 8@tie{}KiB의 프로그램 메모리가 있는 "향상된" 기기. MCU@타이{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
프로그램 메모리가 16@tie{}KiB에서 최대 64@tie{}KiB인 "향상된" 기기.
MCU@tie{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
128@tie{}KiB의 프로그램 메모리가 있는 "향상된" 기기. MCU@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
3바이트 PC가 있는 "향상된" 기기(예: 128@tie{}KiB 이상의 프로그램 포함)
메모리. MCU@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
8@tie{}KiB 이상 및 최대 64@tie{}KiB의 프로그램 메모리가 있는 "XMEGA" 기기.
MCU@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
64@tie{}KiB 이상 및 최대 128@tie{}KiB 프로그램의 "XMEGA" 기기
메모리. MCU@tie{}= "atxmega64a3", "atxmega64d3".

"avrxmega5"
64@tie{}KiB 이상 및 최대 128@tie{}KiB 프로그램의 "XMEGA" 기기
메모리 및 64@tie{}KiB 이상의 RAM. MCU@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
128@tie{}KiB 이상의 프로그램 메모리가 있는 "XMEGA" 기기. MCU@타이{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
128@tie{}KiB 이상의 프로그램 메모리와 그 이상의 "XMEGA" 기기
64@tie{}KiB의 RAM. MCU@tie{}= "atxmega128a1", "atxmega128a1u".

"avr1"
이 ISA는 최소 AVR 코어로 구현되며 어셈블러에서만 지원됩니다.
MCU@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
나가는 함수 인수를 누적하고 필요한 스택 공간을 획득/해제합니다.
함수 프롤로그/에필로그에서 한 번 나가는 함수 인수. 이 옵션이 없으면
나가는 인수는 함수를 호출하기 전에 푸시되고 나중에 팝됩니다.

함수 호출 후 인수를 팝하면 AVR에서 비용이 많이 들 수 있으므로
스택 공간을 누적하면 인수가 필요하기 때문에 실행 파일이 더 작아질 수 있습니다.
이러한 함수 호출 후에 스택에서 제거되지 않습니다.

이 옵션은 여러 호출을 수행하는 함수의 코드 크기를 줄일 수 있습니다
printf와 같은 함수에 대한 호출과 같이 스택에서 인수를 가져오는 함수.

-mbranch 비용=비용
조건부 분기 명령어의 분기 비용을 다음으로 설정합니다. 비용. 합리적인 가치
for 비용 음이 아닌 작은 정수입니다. 기본 분기 비용은 0입니다.

-mcall-프롤로그
기능 프롤로그/에필로그는 적절한 서브루틴에 대한 호출로 확장됩니다. 암호
크기가 더 작습니다.

-민트8
"int"가 8비트 정수라고 가정합니다. 이것은 모든 유형의 크기에 영향을 미칩니다. "char"는 1입니다.
byte, "int"는 1바이트, "long"은 2바이트, "long long"은 4바이트입니다. 제발
이 옵션은 C 표준을 준수하지 않지만 결과적으로
코드 크기.

-mno 인터럽트
생성된 코드는 하드웨어 인터럽트와 호환되지 않습니다. 코드 크기가 더 작습니다.

-mrelax
"CALL" resp를 교체해 보십시오. 짧은 "RCALL" resp에 의한 "JMP" 명령. "RJMP"
해당되는 경우 지침. "-mrelax"를 설정하면 "--relax" 옵션이
링커가 호출될 때 링커 명령줄.

점프 오프셋은 이전에 알려지지 않았기 때문에 링커에서 점프 완화를 수행합니다.
코드가 위치합니다. 따라서 컴파일러가 생성한 어셈블러 코드는 동일하며,
그러나 실행 파일의 명령어는 어셈블러의 명령어와 다를 수 있습니다.
암호.

링커 스텁이 필요한 경우 이완을 켜야 합니다. "EIND" 섹션을 참조하고
아래의 링커 스텁.

-m짧은 통화
이 옵션은 더 이상 사용되지 않으며 GCC 4.8에서 제거됩니다. "-mrelax"를 참조하십시오.
교체.

16@tie{}KiB 이상의 프로그램이 있는 기기에서도 "RCALL"/"RJMP" 명령어 사용
메모리, 즉 "CALL" 및 "JMP" 명령어가 있는 장치에서.

-msp8
스택 포인터 레지스터를 8비트 레지스터로 취급합니다. 즉, 상위 바이트를 가정합니다.
스택 포인터는 XNUMX입니다. 일반적으로 이 옵션은 수동으로 설정할 필요가 없습니다.

이 옵션은 컴파일러에서 내부적으로 멀티 라이브러리를 선택하고 빌드하는 데 사용됩니다.
아키텍처 "avr2" 및 "avr25". 이러한 아키텍처는 장치를 포함하거나 포함하지 않고 혼합합니다.
"SPH". "-mmcu=avr2" 또는 "-mmcu=avr25" 이외의 설정의 경우 컴파일러 드라이버
컴파일러 고유의 명령줄에서 이 옵션을 추가하거나 제거합니다.
그런 다음 컴파일러는 장치 또는 아키텍처에 8비트 스택 포인터가 있는지 알고
"SPH" 레지스터가 없는지 여부.

-mstrict-X
하드웨어에서 제안하는 방식으로 주소 레지스터 "X"를 사용합니다. 이것은 "X"가
간접, 사후 증가 또는 사전 감소 주소 지정에만 사용됩니다.

이 옵션이 없으면 "X" 레지스터는 "Y" 또는 "Z"와 같은 방식으로 사용될 수 있습니다.
그런 다음 추가 지침에 의해 에뮬레이트됩니다. 예를 들어,
레지스터에 대해 음이 아닌 작은 "const < 64"를 사용하여 "X+const" 주소 지정 Rn is
로 수행

adw r26, const ; X += 상수
ld , NS ; = *X
sbiw r26, const ; X -= 상수

-mtiny 스택
스택 포인터의 하위 8@tie{}비트만 변경하세요.

"EIND" 및 128Ki 바이트 이상의 플래시가 있는 장치

구현의 포인터는 16@tie{}비트 너비입니다. 함수 또는 레이블의 주소
간접 점프 및 호출이 모든 코드를 대상으로 할 수 있도록 워드 주소로 표시됩니다.
64@tie{}Ki 단어 범위의 주소.

128@tie{}Ki 바이트 이상의 기기에서 간접 점프를 용이하게 하기 위해
프로그램 메모리 공간에는 "EIND"라는 특수 기능 레지스터가 있습니다.
"EICAL" 또는 "EIJMP" 명령어가 다음과 같을 때 대상 주소의 가장 중요한 부분
익숙한.

이러한 장치에 대한 간접 점프 및 호출은 컴파일러에 의해 다음과 같이 처리되며
몇 가지 제한 사항이 있습니다.

· 컴파일러는 "EIND"를 설정하지 않습니다.

· 컴파일러는 "EICAL"/"EIJMP" 명령어에서 암시적으로 "EIND"를 사용하거나 다음을 읽을 수 있습니다.
"RET"를 통해 간접 호출/점프를 에뮬레이트하기 위해 직접 "EIND"
교수.

· 컴파일러는 "EIND"가 시작 코드 동안 또는 실행 중에 변경되지 않는다고 가정합니다.
애플리케이션. 특히 "EIND"는 함수나 인터럽트에 저장/복구되지 않습니다.
서비스 루틴 프롤로그/에필로그.

· 함수 및 계산된 goto에 대한 간접 호출의 경우 링커는 다음을 생성합니다. 스텁. 스텁
점프 패드라고도 합니다 트램폴린. 따라서 간접 호출/점프
그런 스텁. 스텁에는 원하는 주소로의 직접 점프가 포함됩니다.

· 링커가 스텁을 생성하려면 링커 이완을 켜야 합니다.
모든 상황을 올바르게. 컴파일러 옵션 "-mrelax" 및 linler 옵션을 참조하십시오.
"--안심하다". 링커가 스텁을 생성해야 하지만
이완 및 유용한 오류 메시지 없이 중단됩니다.

· 기본 링커 스크립트는 "EIND = 0"인 코드에 대해 정렬됩니다. 코드가 가정되는 경우
"EIND != 0" 설정에서 작동하려면 사용자 지정 링커 스크립트를 순서대로 사용해야 합니다.
이름이 ".trampolines"로 시작하는 섹션을 세그먼트에 배치하려면
"EIND"를 가리킵니다.

· libgcc의 시작 코드는 "EIND"를 설정하지 않습니다. 시작 코드는 혼합입니다.
libgcc 및 AVR-LibC의 코드. "EIND"에 대한 AVR-LibC의 영향에 대해서는 AVR-
LibC 사용자 매뉴얼("http://nongnu.org/avr-libc/user-manual/").

· 사용자별 시작 코드가 "EIND"를 조기에 설정하는 것은 합법적입니다. 예를 들면 다음과 같습니다.
".init3" 섹션에 있는 초기화 코드 수단. 이러한 코드는 이전에 실행됩니다.
RAM을 초기화하고 생성자를 호출하는 일반적인 시작 코드
"EIND"를 벡터 테이블이 있는 세그먼트로 설정하는 AVR-LibC의 시작 코드
위치하고 있습니다.

#포함하다

정적 공극
__attribute__((섹션(".init3"), 알몸, 사용, no_instrument_function))
init3_set_eind(무효)
{
__asm ​​휘발성("ldi r24,pm_hh8(__trampolines_start)\n\t"
"%i0,r24 출력" :: "n" (&EIND) : "r24","메모리");
}

"__trampolines_start" 기호는 링커 스크립트에 정의되어 있습니다.

· 다음 두 가지 조건이 충족되면 링커에 의해 스텁이 자동으로 생성됩니다.
만난 :

-
( 생성 스텁) 다음과 같이:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
외부 스텁이 있는 세그먼트입니다.

· 컴파일러는 다음과 같은 상황에서 코드 레이블에 대해 이러한 "gs" 수정자를 내보냅니다.

-
-
- -mcall-프롤로그>
명령줄 옵션.

-
지정할 수 있는 테이블 -fno-점프 테이블 명령줄 옵션.

-
-
· 기호가 아닌 주소로 점프하는 것은 지원 지원 :

정수 메인(무효)
{
/* 워드 주소 0x2에서 함수 호출 */
반환((int(*)(무효)) 0x2)();
}

대신, 스텁이 설정되어야 합니다. 즉, 함수는 기호를 통해 호출되어야 합니다.
(예시에서 "func_4"):

정수 메인(무효)
{
extern int func_4(무효);

/* 바이트 주소 0x4에서 함수 호출 */
반환 func_4();
}

응용 프로그램은 "-Wl,--defsym,func_4=0x4"와 연결됩니다. 또는 "func_4"
링커 스크립트에서 정의할 수 있습니다.

"RAMPD", "RAMPX", "RAMPY" 및 "RAMPZ" 특수 기능 레지스터 처리

일부 AVR 기기는 액세스할 수 있는 64@tie{}KiB 범위보다 큰 메모리를 지원합니다.
16비트 포인터로. 이 64@tie{}KiB 범위 밖의 메모리 위치에 액세스하려면
"RAMP" 레지스터의 내용은 주소의 상위 부분으로 사용됩니다. "X", "Y", "Z"
주소 레지스터는 "RAMPX", "RAMPY", "RAMPZ" 특수 기능과 연결됩니다.
넓은 주소를 얻으려면 각각 등록하십시오. 마찬가지로 "RAMPD"는 다음과 함께 사용됩니다.
직접 주소 지정.

· 시작 코드는 "RAMP" 특수 기능 레지스터를 XNUMX으로 초기화합니다.

· 만약 AVR 이름 주소 명명된 공간 주소 공간 일반 또는 "__flash"가 아닌 것은
사용하면 작업 전에 필요에 따라 "RAMPZ"가 설정됩니다.

· 기기가 64@tie{KiB}보다 큰 RAM을 지원하고 컴파일러를 변경해야 하는 경우
"RAMPZ"는 작업을 수행하고 "RAMPZ"는 작업 후에 XNUMX으로 재설정됩니다.

· 장치가 특정 "RAMP" 레지스터와 함께 제공되는 경우 ISR 프롤로그/에필로그
해당 SFR을 저장/복원하고 ISR 코드가
(암시적으로) 사용합니다.

· 64@tie{KiB}보다 큰 RAM은 AVR 대상용 GCC에서 지원하지 않습니다. 사용하는 경우
16비트 주소 범위 밖의 위치에서 읽고 변경하는 인라인 어셈블러
"RAMP" 레지스터 중 하나에 액세스한 후 이를 XNUMX으로 재설정해야 합니다.

AVR 내장 매크로

GCC는 사용자 코드가 존재 여부를 테스트할 수 있도록 여러 내장 매크로를 정의합니다.
기능의 부재. 다음 내장 매크로 중 거의 모든 것이 장치에서 추론됩니다.
기능에 따라 "-mmcu=" 명령줄 옵션에 의해 트리거됩니다.

더 많은 AVR 전용 내장 매크로는 다음을 참조하십시오. AVR 이름 주소 공간AVR 내장
기능.

"__AVR_ARCH__"
아키텍처를 식별하는 XNUMX진수로 해석되는 내장 매크로 및
"-mmcu=에 따라 다름MCU" 옵션. 가능한 값은 다음과 같습니다.

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

for MCU"avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
각각 "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7"입니다. 만약에 MCU
장치를 지정하면 이 내장 매크로가 그에 따라 설정됩니다. 예를 들어,
"-mmcu=atmega8" 매크로는 4로 정의됩니다.

"__AVR_장치__"
설정 "-mmcu=장치" 장치의 이름을 반영하는 이 내장 매크로를 정의합니다.
예를 들어 "-mmcu=atmega8"은 내장 매크로 "__AVR_ATmega8__"을 정의하고,
"-mmcu=attiny261a"는 "__AVR_ATtiny261A__" 등을 정의합니다.

내장 매크로의 이름은 "__AVR_장치__" 어디에 장치 이다
AVR 사용자 설명서에서와 같이 장치 이름. 차이점 장치 내장
매크로 및 장치 "-mmcu =장치" 후자는 항상 소문자라는 것입니다.

If 장치 장치가 아니라 "avr51"과 같은 핵심 아키텍처일 뿐이므로 이 매크로는
정의되지 않습니다.

"__AVR_XMEGA__"
장치/아키텍처는 XMEGA 장치 제품군에 속합니다.

"__AVR_HAVE_ELPM__"
장치에는 "ELPM" 명령이 있습니다.

"__AVR_HAVE_ELPMX__"
장치에는 "ELPM R엔,Z" 그리고 "ELPM R엔,Z+" 도움말을 참조하십시오.

"__AVR_HAVE_MOVW__"
장치에는 16비트 레지스터 레지스터 이동을 수행하기 위한 "MOVW" 명령이 있습니다.

"__AVR_HAVE_LPMX__"
장치에는 "LPM R엔,Z" 그리고 "LPM R엔,Z+" 도움말을 참조하십시오.

"__AVR_HAVE_MUL__"
장치에는 하드웨어 승수가 있습니다.

"__AVR_HAVE_JMP_CALL__"
장치에는 "JMP" 및 "CALL" 명령이 있습니다. 가 있는 장치의 경우입니다.
최소 16@tie{}KiB의 프로그램 메모리와 "-mshort-calls"가 설정되지 않은 경우.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
장치에는 "EIJMP" 및 "EICALL" 지침이 있습니다. 이것은 장치의 경우입니다.
128@tie{}KiB 이상의 프로그램 메모리. 이것은 또한 프로그램이
카운터(PC)의 너비는 3@tie{}바이트입니다.

"__AVR_2_BYTE_PC__"
프로그램 카운터(PC)는 2@tie{}바이트 너비입니다. 이것은 최대
128@tie{}KiB의 프로그램 메모리.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
스택 포인터(SP) 레지스터는 다음과 같이 8비트 각각 16비트 레지스터로 처리됩니다.
컴파일러. 이러한 매크로의 정의는 "-mtiny-stack"의 영향을 받습니다.

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
장치에는 SPH(스택 포인터의 상위 부분) 특수 기능 레지스터가 있거나
각각 8비트 스택 포인터. 이러한 매크로의 정의는 다음에 의해 영향을 받습니다.
"-mmcu=" 및 "-mmcu=avr2" 및 "-mmcu=avr25"의 경우에도 "-msp8"입니다.

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
장치에는 "RAMPD", "RAMPX", "RAMPY", "RAMPZ" 특수 기능 레지스터가 있습니다.
각각.

"__NO_INTERRUPTS__"
이 매크로는 "-mno-interrupts" 명령줄 옵션을 반영합니다.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
일부 AVR 장치(AT90S8515, ATmega103)는 다음과 같은 이유로 32비트 명령어를 건너뛰면 안 됩니다.
하드웨어 오류. 건너뛰기 명령어는 "SBRS", "SBRC", "SBIS", "SBIC" 및 "CPSE"입니다.
두 번째 매크로는 "__AVR_HAVE_JMP_CALL__"도 설정된 경우에만 정의됩니다.

"__AVR_SFR_OFFSET__=오프셋"
"IN"과 같이 I/O 특수 기능 레지스터에 직접 주소를 지정할 수 있는 명령어,
"OUT", "SBI" 등은 명령에 의해 주소가 지정된 것처럼 다른 주소를 사용할 수 있습니다.
"LD" 또는 "STS"와 같은 액세스 RAM. 이 오프셋은 장치 아키텍처에 따라 다르며
각각의 I/O@tie{}주소를 얻기 위해 RAM 주소에서 빼야 합니다.

"__WITH_AVRLIBC__"
컴파일러는 AVR-Libc와 함께 사용하도록 구성됩니다. 참조
"--with-avrlibc" 구성 옵션.

블랙 핀 옵션

-mcpu =CPU[-후견]
대상 Blackfin 프로세서의 이름을 지정합니다. 현재, CPU 중 하나가 될 수 있습니다
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592. 선택 사항 후견 지정합니다
대상 Blackfin 프로세서의 실리콘 개정판. 사용 가능한 모든 해결 방법
대상 실리콘 개정이 활성화됩니다. 만약에 후견 is 없음, 해결 방법이 없습니다.
활성화. 만약에 후견 is 어떤, 대상 프로세서에 대한 모든 해결 방법은
활성화. "__SILICON_REVISION__" 매크로는 두 개의 XNUMX진수로 정의됩니다.
실리콘 개정판의 메이저 번호와 마이너 번호를 나타냅니다. 만약에 후견 is
없음, "__SILICON_REVISION__"이(가) 정의되지 않았습니다. 만약에 후견 is 어떤Walk Through California 프로그램,
"__SILICON_REVISION__"은(는) 0xffff로 정의됩니다. 이 선택 사항인 경우 후견 하지 않습니다
사용되는 경우 GCC는 대상 Blackfin의 최신 알려진 실리콘 개정판을 가정합니다.
프로세서.

지원 bf561 불완전하다. 을위한 bf561, 프로세서 매크로만 정의됩니다.
이 옵션이 없으면 bf532 기본적으로 프로세서로 사용됩니다. 해당
미리 정의된 프로세서 매크로 CPU 정의해야 합니다. 그리고 비핀 엘프 툴체인,
이것은 libgloss가 제공하는 하드웨어 BSP가 다음과 같은 경우에 링크되도록 합니다. -msim 하지 않습니다
주어진.

-msim
프로그램이 시뮬레이터에서 실행되도록 지정합니다. 이로 인해 시뮬레이터
링크할 libgloss에서 제공하는 BSP. 이 옵션은 다음에만 적용됩니다. 비핀 엘프
도구 체인. 다음과 같은 특정 다른 옵션 -중간 공유 라이브러리-mfdpic, 암시하다
-msim.

-momit-리프 프레임 포인터
리프 함수에 대한 레지스터에 프레임 포인터를 유지하지 마십시오. 이것은 피한다
프레임 포인터를 저장, 설정 및 복원하고 추가 레지스터를 만드는 명령
리프 함수에서 사용할 수 있습니다. 옵션 -fomit 프레임 포인터 프레임을 제거
디버깅을 더 어렵게 만들 수 있는 모든 기능에 대한 포인터입니다.

-mspecld-이상
활성화되면 컴파일러는 생성된 코드에 다음이 포함되지 않도록 합니다.
점프 지시 후 추측 부하. 이 옵션을 사용하면
"__WORKAROUND_SPECULATIVE_LOADS"가 정의됩니다.

-mno-specld-이상
추측 로드가 발생하는 것을 방지하기 위해 추가 코드를 생성하지 마십시오.

-mcsync-이상
활성화되면 컴파일러는 생성된 코드에 CSYNC가 포함되지 않도록 합니다.
또는 조건부 분기 후 너무 빨리 SSYNC 명령. 이 옵션을 사용하면
"__WORKAROUND_SPECULATIVE_SYNCS"가 정의됩니다.

-mno-csync-이상
CSYNC 또는 SSYNC 명령어도 발생하지 않도록 추가 코드를 생성하지 마십시오.
조건부 분기 직후.

-mlow-64k
활성화되면 컴파일러는 전체 지식을 자유롭게 활용할 수 있습니다.
프로그램은 메모리의 낮은 64k에 맞습니다.

-mno-low-64k
프로그램이 임의로 크다고 가정합니다. 이것이 기본값입니다.

-mstack-check-l1
uClinux에 의해 L1 스크래치패드 메모리에 배치된 정보를 사용하여 스택 검사 수행
핵심.

-중간 공유 라이브러리
라이브러리 ID 방식을 통해 공유 라이브러리를 지원하는 코드를 생성합니다. 이것은 허용
가상 메모리가 없는 환경에서 제자리 실행 및 공유 라이브러리용
관리. 이 옵션은 다음을 의미합니다. -fPIC. 와 비핀 엘프 대상, 이 옵션은
-msim.

-mno-id-공유 라이브러리
ID 기반 공유 라이브러리가 사용되고 있다고 가정하지 않는 코드를 생성합니다. 이것은
기본값.

-mleaf-id-공유 라이브러리
라이브러리 ID 방법을 통해 공유 라이브러리를 지원하는 코드를 생성하지만 다음을 가정합니다.
이 라이브러리 또는 실행 파일은 다른 ID 공유 라이브러리와 연결되지 않습니다.
이를 통해 컴파일러는 점프 및 호출에 더 빠른 코드를 사용할 수 있습니다.

-mno-leaf-id-공유 라이브러리
컴파일 중인 코드가 ID 공유 라이브러리에 대해 링크되지 않을 것이라고 가정하지 마십시오.
jump 및 call insns에 대해 더 느린 코드가 생성됩니다.

-mshared-library-id=n
컴파일되는 ID 기반 공유 라이브러리의 식별 번호를 지정했습니다.
값을 0으로 지정하면 더 간결한 코드가 생성되고 다른 값을 지정하면
현재 라이브러리에 해당 번호를 강제로 할당하지만 더 이상 공간이 없거나
이 옵션을 생략하는 것보다 시간 효율적입니다.

-msep-데이터
데이터 세그먼트가 메모리의 다른 영역에 위치할 수 있도록 하는 코드 생성
텍스트 세그먼트에서. 이것은 환경에서 실행을 허용합니다.
텍스트 섹션에 대한 재배치를 제거하여 가상 메모리 관리.

-mno-XNUMX월-데이터
데이터 세그먼트가 텍스트 세그먼트를 따른다고 가정하는 코드를 생성하십시오. 이것은
기본값.

-mlong-통화
-mno-long-통화
컴파일러에게 먼저 주소를 로드하여 함수 호출을 수행하도록 지시합니다.
함수를 레지스터에 넣은 다음 이 레지스터에서 서브루틴 호출을 수행합니다. 이것
대상 기능이 24비트 주소 지정 범위 밖에 있는 경우 스위치가 필요합니다.
서브루틴 호출 명령어의 오프셋 기반 버전.

이 기능은 기본적으로 활성화되어 있지 않습니다. 지정 -mno-long-통화 복원할 것이다
기본 동작. 이러한 스위치는 컴파일러가 생성하는 방식에 영향을 미치지 않습니다.
함수 포인터를 통해 함수 호출을 처리하는 코드.

-mfast-fp
빠른 부동 소수점 라이브러리와 연결합니다. 이 라이브러리는 IEEE
NAN(Not-a-Number)에 대한 입력을 확인하기 위한 부동 소수점 표준 규칙
성능에 대한 관심.

-minline-plt
알려지지 않은 함수에 대한 함수 호출에서 PLT 항목 인라인 사용
로컬로 바인딩합니다. 없이는 아무런 효과가 없습니다. -mfdpic.

-m멀티코어
멀티코어 Blackfin 프로세서용 독립 실행형 애플리케이션을 구축합니다. 적절한 시작 파일 및
링크 스크립트는 멀티코어를 지원하는 데 사용됩니다. 이 옵션은 다음을 정의합니다.
"__BFIN_MULTICORE". 와만 사용할 수 있습니다. -mcpu=bf561[-후견]. 그것은 사용할 수 있습니다
-엠코리아 or -mcoreb. 없이 사용하는 경우 -엠코리아 or -mcoreb, 단일
애플리케이션/듀얼 코어 프로그래밍 모델이 사용됩니다. 이 모델에서 주요 기능은
코어 B의 이름은 coreb_main으로 지정해야 합니다. 와 함께 사용하는 경우 -엠코리아 or -mcoreb
코어 프로그래밍 모델당 애플리케이션이 사용됩니다. 이 옵션을 사용하지 않으면 단일
핵심 응용 프로그래밍 모델이 사용됩니다.

-엠코리아
코어당 하나의 애플리케이션을 사용할 때 BF561의 Core A용 독립형 애플리케이션 구축
프로그래밍 모델. 적절한 시작 파일과 링크 스크립트는 Core A를 지원하는 데 사용됩니다.
이 옵션은 "__BFIN_COREA"를 정의합니다. 와 함께 사용해야 합니다. -m멀티코어.

-mcoreb
코어당 하나의 애플리케이션을 사용할 때 BF561의 Core B를 위한 독립 실행형 애플리케이션 구축
프로그래밍 모델. 적절한 시작 파일과 링크 스크립트는 Core B를 지원하는 데 사용됩니다.
이 옵션은 "__BFIN_COREB"를 정의합니다. 이 옵션을 사용하는 경우 coreb_main은
main 대신 사용됩니다. 와 함께 사용해야 합니다. -m멀티코어.

-msdram
SDRAM용 독립 실행형 애플리케이션을 빌드합니다. 적절한 시작 파일과 링크 스크립트는
응용 프로그램을 SDRAM에 넣는 데 사용됩니다. 로더는 로드하기 전에 SDRAM을 초기화해야 합니다.
응용 프로그램을 SDRAM에 넣습니다. 이 옵션은 "__BFIN_SDRAM"을 정의합니다.

-micplb
ICPLB가 런타임에 활성화되어 있다고 가정합니다. 이것은 특정 이상 현상에 영향을 미칩니다.
해결 방법. Linux 대상의 경우 기본값은 ICPLB가 활성화된 것으로 가정하는 것입니다. ~을위한
독립 실행형 응용 프로그램은 기본값이 꺼져 있습니다.

C6X 옵션

-행진=name
대상 아키텍처의 이름을 지정합니다. GCC는 이 이름을 사용하여
어셈블리 코드를 생성할 때 어떤 종류의 명령을 내보낼 수 있습니다. 허용
이름은 다음과 같습니다. 의 C62x, 의 C64x, c64x+, 의 C67x, c67x+, 의 C674x.

-mbig-엔디안
빅 엔디안 대상에 대한 코드를 생성합니다.

-미리틀 엔디안
리틀 엔디안 대상에 대한 코드를 생성합니다. 이것이 기본값입니다.

-msim
시뮬레이터에 적합한 시작 파일과 링커 스크립트를 선택하십시오.

-msdata=기본값
작은 전역 및 정적 데이터를 .neardata 가 가리키는 부분
"B14"를 등록하십시오. 초기화되지 않은 작은 전역 및 정적 데이터를 .bss 섹션,
에 인접해 있는 것은 .neardata 부분. 작은 읽기 전용 데이터를 .rodata
부분. 큰 데이터 조각에 사용되는 해당 섹션은 .fardata, .멀리
.const.

-msdata=모두
작은 개체뿐만 아니라 모든 데이터를 작은 데이터용으로 예약된 섹션에 넣고,
액세스하려면 "B14" 레지스터에 상대적인 주소 지정을 사용하십시오.

-msdata=없음
작은 데이터를 위해 예약된 섹션을 사용하지 말고 절대 주소를 사용하여
모든 데이터에 액세스합니다. 초기화된 모든 전역 및 정적 데이터를 .fardata 섹션,
그리고 초기화되지 않은 모든 데이터는 .멀리 부분. 모든 상수 데이터를 .const
안내

CRIS 옵션

이러한 옵션은 CRIS 포트에 대해 특별히 정의됩니다.

-행진=건축형
-mcpu =건축형
지정된 아키텍처에 대한 코드를 생성합니다. 에 대한 선택 건축형 are
v3, v8v10 각각 ETAX 4, ETAX 100 및 ETAX 100 LX용입니다. 기본값은 v0
기본값은 cris-axis-linux-gnu를 제외하고 v10.

-mtune=건축형
튜닝 건축형 다음을 제외하고 생성된 코드에 대해 적용 가능한 모든 것
ABI 및 사용 가능한 지침 세트. 에 대한 선택 건축형 are
와 동일 -행진=건축형.

-mmax-스택 프레임=n
함수의 스택 프레임이 초과할 때 경고 n 바이트.

-메트렉스4
-메트렉스100
옵션 -메트렉스4-메트렉스100 의 동의어입니다 -행진=v3-행진=v8
각각.

-mmul-bug-해결 방법
-mno-mul-bug-해결 방법
CPU 모델에 대한 "mulu" 및 "mulu" 명령어의 버그를 해결하려면
적용됩니다. 이 옵션은 기본적으로 활성화되어 있습니다.

-mp디버그
어셈블리 코드에서 CRIS 관련 자세한 디버그 관련 정보를 활성화합니다. 이것
옵션을 끄는 효과도 있습니다. #NO_APP 형식화된 코드 표시기
어셈블리 파일의 시작 부분에 어셈블러.

-mcc-초기화
이전 명령어의 조건 코드 결과를 사용하지 마십시오. 항상 비교를 내보내고
조건 코드를 사용하기 전에 지침을 테스트하십시오.

-mno 부작용
사후 이외의 주소 지정 모드에서 부작용이 있는 명령을 내보내지 마십시오.
증가.

-mstack 정렬
-mno 스택 정렬
-mdata 정렬
-mno-데이터-정렬
-mconst-정렬
-mno-const-정렬
이러한 옵션(옵션 없음)은 스택 프레임에 대한 정렬(배열 제거),
최대 단일 데이터 액세스 크기에 대해 정렬할 개별 데이터 및 상수
선택한 CPU 모델에 대해 기본값은 32비트 정렬을 정렬하는 것입니다. 아비
구조 레이아웃과 같은 세부 정보는 이러한 옵션의 영향을 받지 않습니다.

-m32비트
-m16비트
-m8비트
위의 stack-data- 및 const-align 옵션과 유사하게 이러한 옵션은 다음을 정렬합니다.
스택 프레임, 쓰기 가능한 데이터 및 상수는 모두 32비트, 16비트 또는 8비트로 정렬됩니다.
기본값은 32비트 정렬입니다.

-mno-프롤로그-에필로그
-mprologue-에필로그
-mno-프롤로그-에필로그, 설정한 일반 기능 프롤로그 및 에필로그
스택 프레임이 생략되고 반환 명령이나 반환 시퀀스가 ​​없습니다.
코드에서 생성됩니다. 이 옵션은 육안 검사와 함께만 사용하십시오.
컴파일된 코드: 호출 저장 레지스터가 반드시 있어야 할 때 경고나 오류가 생성되지 않습니다.
저장하거나 로컬 변수에 대한 저장소를 할당해야 합니다.

-mno-gotplt
-mgotplt
-fpic-fPIC, 로드하는 명령어 시퀀스를 생성(생성하지 않음)하지 마십시오.
GOT의 PLT 부분에서 기능에 대한 주소 대신 (다른
아키텍처) PLT를 호출합니다. 기본값은 -mgotplt.

-멜프
cris-axis-elf 및 cris-axis-linux-gnu에서만 인식되는 레거시 no-op 옵션
목표.

-mlinux
레거시 no-op 옵션은 cris-axis-linux-gnu 대상에서만 인식됩니다.

-심
cris-axis-elf에 대해 인식된 이 옵션은 입출력과 연결되도록 정렬합니다.
시뮬레이터 라이브러리의 기능. 코드, 초기화된 데이터 및 XNUMX으로 초기화된 데이터
순차적으로 배정됩니다.

-sim2
처럼 -심그러나 링커 옵션을 전달하여 0x40000000 및 XNUMX에서 초기화된 데이터를 찾습니다.
초기화된 데이터는 0x80000000입니다.

CR16 옵션

이러한 옵션은 CR16 포트에 대해 특별히 정의됩니다.

-mmac
곱하기 누산 명령어 사용을 활성화합니다. 기본적으로 비활성화되어 있습니다.

-mcr16cplus
-mcr16c
CR16C 또는 CR16C+ 아키텍처용 코드를 생성합니다. CR16C+ 아키텍처가 기본입니다.

-msim
시뮬레이터와 호환되는 라이브러리 libsim.a를 연결합니다. 엘프에 해당
컴파일러만.

-민트32
정수 유형을 32비트 너비로 선택합니다.

-mbit-ops
비트 조작을 위한 sbit/cbit 명령어를 생성합니다.

-mdata-모델=모델
데이터 모델을 선택합니다. 에 대한 선택 모델 are ..., 멀리 or 매질. 매질 기본값입니다.
그러나, 멀리 -mcr16c 옵션이 CR16C 아키텍처가 선택되지 않은 경우에는 유효하지 않습니다.
원거리 데이터 모델을 지원합니다.

다윈 옵션

이러한 옵션은 Darwin 운영 체제를 실행하는 모든 아키텍처에 대해 정의됩니다.

Darwin의 FSF GCC는 "뚱뚱한" 개체 파일을 생성하지 않습니다. 에 대한 개체 파일을 생성합니다.
대상으로 구축된 단일 아키텍처입니다. Darwin에 대한 Apple의 GCC는
다중인 경우 "뚱뚱한" 파일 -아치 옵션이 사용됩니다. 컴파일러를 실행하거나
링커를 여러 번 수행하고 결과를 다음과 결합합니다. 지방.

생성된 파일의 하위 유형(예: ppc7400 or ppc970 or i686)에 의해 결정됩니다.
GCC가 타겟팅하는 ISA를 지정하는 플래그 -mcpu or -XNUMX 월. 그만큼
-force_cpusubtype_ALL 옵션을 사용하여 이를 무시할 수 있습니다.

Darwin 도구는 ISA 불일치가 있을 때 동작이 다릅니다. NS
어셈블러, as, 하위 유형에 유효한 명령만 사용할 수 있습니다.
생성하는 파일이므로 64비트 명령어를 ppc750 개체 파일.
공유 라이브러리용 링커, /usr/bin/libtool, 실패하고 요청하면 오류를 인쇄합니다.
입력 파일보다 덜 제한적인 하위 유형으로 공유 라이브러리를 생성합니다(
예를 들어 ppc970 개체 파일 ppc7400 도서관). 링커
실행 파일, ld, 실행 파일에 가장 제한적인 하위 유형을 조용히 제공합니다.
입력 파일.

-FDIR
프레임워크 디렉토리 추가 DIR 검색할 디렉토리 목록의 맨 앞에
헤더 파일의 경우. 이 디렉토리는 다음에 의해 지정된 디렉토리와 인터리브됩니다. -I
옵션을 선택하고 왼쪽에서 오른쪽으로 스캔됩니다.

프레임워크 디렉토리는 프레임워크가 있는 디렉토리입니다. 프레임워크는
디렉토리 "헤더" 및 / 또는 "비공개 헤더" 직접 포함된 디렉토리
로 끝나는 ".뼈대". 프레임워크의 이름은 이 디렉토리의 이름입니다.
제외 ".뼈대". 프레임워크와 관련된 헤더는 다음 중 하나에서 찾을 수 있습니다.
그 두 디렉토리, "헤더" 먼저 검색되고 있습니다. 서브프레임워크는
프레임워크에 있는 프레임워크 디렉토리 "프레임워크" 예배 규칙서. 의 포함
하위 프레임워크 헤더는 다음을 포함하는 프레임워크의 헤더에만 나타날 수 있습니다.
하위 프레임워크 또는 형제 하위 프레임워크 헤더에 있습니다. 두 하위 프레임워크는 다음과 같은 경우 형제입니다.
동일한 프레임워크에서 발생합니다. 서브프레임워크는 다음과 같은 이름을 가질 수 없습니다.
프레임워크에서 이를 위반하면 경고가 발행됩니다. 현재 서브프레임워크
하위 프레임워크를 가질 수 없습니다. 향후 지원을 위해 메커니즘이 확장될 수 있습니다.
이것. 표준 프레임워크는 다음에서 찾을 수 있습니다. "/시스템/라이브러리/프레임워크"
"/라이브러리/프레임워크". 예제 포함은 "#include와 같습니다. ",
어디에 뼈대 프레임워크의 이름을 나타내며 header.h는
"비공개 헤더" or "헤더" 디렉토리.

-iframeworkDIR
처럼 -F 디렉토리가 시스템 디렉토리로 취급된다는 점을 제외하고. 주요 차이점
이 사이 -iframework-F 그것으로 -iframework 컴파일러는 경고하지 않습니다
다음을 통해 찾은 헤더 파일에 포함된 구성에 대해 DIR. 이 옵션은 유효합니다
C 언어 계열에만 해당됩니다.

-거스
사용되는 기호에 대한 디버깅 정보를 내보냅니다. STABS 디버깅 형식의 경우
이것은 가능 -feliminate-unused-debug-기호. 이것은 기본적으로 ON입니다.

-gfull
모든 기호 및 유형에 대한 디버깅 정보를 내보냅니다.

-mmacosx-버전-최소=버전
이 실행 파일이 실행될 MacOS X의 초기 버전은 다음과 같습니다. 버전. 전형적인
~의 가치 버전 10.1, 10.2 및 10.3.9를 포함합니다.

컴파일러가 기본적으로 시스템의 헤더를 사용하도록 빌드된 경우 기본값은
이 옵션은 컴파일러가 실행 중인 시스템 버전입니다. 그렇지 않으면
기본값은 다음과 같이 많은 시스템 및 코드 기반과 호환되는 선택을 하는 것입니다.
수.

-mkernel
커널 개발 모드를 활성화합니다. NS -mkernel 옵션 세트 -공전, -fno-공통,
-fno-cxa-atexit, -fno-예외, -fno-non-call-exception, -fapple-kext, -fno-약한
-fno-rtti 해당되는 경우. 이 모드는 또한 -mno-altivec, -msoft-float,
-fno 내장-mlong-분기 PowerPC 타겟용.

-mon-byte-bool
에 대한 기본값 재정의 불량배 그래서 크기(부울)==1. 기본적으로 sizeof(부울) is 4
Darwin/PowerPC용으로 컴파일할 때 및 1 Darwin/x86용으로 컴파일할 때 이 옵션은
x86에는 영향을 미치지 않습니다.

경고: XNUMXD덴탈의 -mon-byte-bool 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 이 스위치를 사용하려면 다음이 필요할 수 있습니다.
시스템 라이브러리를 포함하여 프로그램의 다른 모든 모듈을 다시 컴파일합니다. 이것을 사용
기본이 아닌 데이터 모델을 따르도록 전환합니다.

-mfix-and-continu
-고정 및 계속
-findirect-데이터
빠른 턴어라운드 개발에 적합한 코드를 생성합니다. gdb를 활성화하는 데 필요
이미 실행 중인 프로그램에 ".o" 파일을 동적으로 로드합니다. -findirect-데이터
-고정 및 계속 이전 버전과의 호환성을 위해 제공됩니다.

-all_load
정적 아카이브 라이브러리의 모든 구성원을 로드합니다. 남자 참조 ld(1) 자세한 내용은.

-arch_errors_fatal
잘못된 아키텍처를 가진 파일과 관련된 오류가 치명적입니다.

-bind_at_load
동적 링커가 모든 파일을 바인딩하도록 출력 파일을 표시합니다.
파일이 로드되거나 실행될 때 정의되지 않은 참조.

-묶음
Mach-o 번들 형식 파일을 생성합니다. 남자 참조 ld(1) 자세한 내용은.

-bundle_loader 실행 파일
이 옵션은 다음을 지정합니다. 실행 파일 빌드 출력 파일을 로드할 것입니다.
연결됨. 남자 참조 ld(1) 자세한 내용은.

-다이내믹 라이브러리
이 옵션을 전달하면 GCC는 실행 파일 대신 동적 라이브러리를 생성합니다.
연결할 때 Darwin을 사용하여 라이브러리 도구 명령.

-force_cpusubtype_ALL
이로 인해 GCC의 출력 파일이 모든 에 의해 제어되는 하위 유형 대신
전에, -mcpu or -XNUMX 월 옵션을 선택합니다.

-allowable_client 고객 이름
-고객 이름
-호환성_버전
-현재_버전
-dead_strip
-종속성 파일
-dylib_file
-dylinker_install_name
-동적
-내보낸_기호_목록
-파일 목록
-플랫_네임스페이스
-force_plat_namespace
-headerpad_max_install_names
-이미지_베이스
-초기화
-설치 이름
-keep_private_externs
-다중 모듈
-곱하기_정의
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofix 사전 바인딩
-nomultidefs
-노프리바인드
-noseglinkit
-pagezero_size
-사전 바인딩
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-분할 정렬
-섹트객체 기호
-왜 로드
-세그1주소
-섹션 생성
-섹트객체 기호
- 부문별
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-세그_주소_테이블
-seg_addr_table_filename
-세그링크드잇
-세그프로트
-segs_read_only_addr
-segs_read_write_addr
-단일_모듈
-공전
-하위_라이브러리
-sub_umbrella
-twolevel_namespace
-우산
-찾으시는 주소가 없습니다
-내보내지 않은_기호_목록
-weak_reference_mismatches
-무엇을 로드
이러한 옵션은 Darwin 링커로 전달됩니다. Darwin 링커 매뉴얼 페이지는 다음과 같이 설명합니다.
자세히.

12월 알파 옵션

Bowman의 -m 옵션은 DEC Alpha 구현에 대해 정의됩니다.

-mno-소프트-플로트
-msoft-float
부동 소수점에 대한 하드웨어 부동 소수점 명령어 사용(사용하지 않음)
작업. 언제 -msoft-float 가 지정되면 기능 libgcc.a 사용됩니다
부동 소수점 연산을 수행합니다. 에뮬레이트하는 루틴으로 대체되지 않는 한
부동 소수점 연산, 또는 이러한 에뮬레이션을 호출하는 방식으로 컴파일
루틴에서 이러한 루틴은 부동 소수점 연산을 발행합니다. 컴파일하는 경우
부동 소수점 연산이 없는 Alpha의 경우 라이브러리가
부르지 않도록 제작되었습니다.

부동 소수점 연산이 없는 Alpha 구현은 다음을 수행해야 합니다.
부동 소수점 레지스터.

-mfp-reg
-mno-fp-regs
부동 소수점 레지스터 세트를 사용(사용하지 않음)하는 코드를 생성합니다. -mno-fp-regs
의미하다 -msoft-float. 부동 소수점 레지스터 세트를 사용하지 않으면 부동 소수점
피연산자는 정수 및 부동 소수점인 것처럼 정수 레지스터에 전달됩니다.
결과는 $f0 대신 $0으로 전달됩니다. 이것은 비표준 호출 시퀀스이므로
부동 소수점 인수 또는 컴파일된 코드에 의해 호출된 반환 값이 있는 모든 함수
-mno-fp-regs 또한 해당 옵션으로 컴파일해야 합니다.

이 옵션의 일반적인 용도는 사용하지 않는 커널을 빌드하는 것이므로 필요합니다.
부동 소수점 레지스터를 저장 및 복원하지 않습니다.

-이따
Alpha 아키텍처는 최대에 최적화된 부동 소수점 하드웨어를 구현합니다.
성능. 대부분 IEEE 부동 소수점 표준을 준수합니다. 하지만,
완전한 규정 준수를 위해서는 소프트웨어 지원이 필요합니다. 이 옵션은 코드를 생성합니다
완전한 IEEE 호환 코드 정확하지 않은 플래그 유지되지 않습니다(아래 참조).
이 옵션이 켜져 있으면 전처리기 매크로 "_IEEE_FP"가
편집. 결과 코드는 덜 효율적이지만 올바르게 지원할 수 있습니다.
비정규화된 숫자 및 비숫자 및 플러스/마이너스와 같은 예외적인 IEEE 값
무한대. 다른 Alpha 컴파일러는 이 옵션을 호출합니다. -ieee_with_no_inexact.

- 부정확한
이것은 -이따 생성된 코드가 IEEE를 유지한다는 점을 제외하고 정확하지 않은 플래그.
이 옵션을 켜면 생성된 코드가 완전히 호환되는 IEEE를 구현합니다.
수학. "_IEEE_FP" 외에 "_IEEE_FP_EXACT"가 전처리기 매크로로 정의됩니다.
일부 Alpha 구현에서 결과 코드는 다음보다 훨씬 느리게 실행될 수 있습니다.
기본적으로 생성된 코드. 의존하는 코드가 거의 없기 때문에
정확하지 않은 플래그, 일반적으로 이 옵션을 지정하지 않아야 합니다. 다른 알파 컴파일러 호출
이 옵션 -ieee_with_inexact.

-mfp-트랩 모드=트랩 모드
이 옵션은 활성화된 부동 소수점 관련 트랩을 제어합니다. 기타 알파
컴파일러는 이 옵션을 호출합니다. -fptm 트랩 모드. 트랩 모드는 XNUMX가지 중 하나로 설정할 수 있습니다.
값 :

n 이것은 기본(일반) 설정입니다. 활성화된 유일한 트랩은
소프트웨어에서 비활성화할 수 없는 것(예: 제로 트랩으로 나누기).

u 에 의해 활성화된 트랩 외에도 n, 언더플로 트랩도 활성화됩니다.

su 처럼 u, 그러나 지침은 소프트웨어 완료에 안전한 것으로 표시되어 있습니다(참조
자세한 내용은 알파 아키텍처 매뉴얼 참조).

수이 처럼 su, 그러나 정확하지 않은 트랩도 활성화됩니다.

-mfp-반올림 모드=반올림 모드
IEEE 반올림 모드를 선택합니다. 다른 Alpha 컴파일러는 이 옵션을 호출합니다. -fprm
반올림 모드. 그만큼 반올림 모드 다음 중 하나일 수 있습니다.

n 일반 IEEE 반올림 모드. 부동 소수점 숫자는 가장 가까운 쪽으로 반올림됩니다.
기계 번호 또는 동점의 경우 짝수 기계 번호쪽으로.

m 마이너스 무한대로 반올림합니다.

c 다진 반올림 모드. 부동 소수점 숫자는 XNUMX으로 반올림됩니다.

d 동적 반올림 모드. 부동 소수점 제어 레지스터의 필드(fpcr참조
알파 아키텍처 참조 설명서)에서 반올림 모드를 제어합니다. 더 씨
라이브러리는 더하기 무한대로 반올림하기 위해 이 레지스터를 초기화합니다. 따라서,
프로그램이 다음을 수정하지 않는 한 fpcr, d 플러스쪽으로 반올림에 해당
무한대.

-mtrap-정밀도=트랩 정밀도
Alpha 아키텍처에서 부동 소수점 트랩은 정확하지 않습니다. 이것은 없이 의미
소프트웨어 지원 플로팅 트랩 및 프로그램에서 복구 불가능
일반적으로 실행을 종료해야 합니다. GCC는 다음을 지원할 수 있는 코드를 생성할 수 있습니다.
운영 체제 트랩 처리기가 원인이 된 정확한 위치를 결정합니다.
부동 소수점 트랩. 응용 프로그램의 요구 사항에 따라 다른
정밀도 수준을 선택할 수 있습니다.

p 프로그램 정밀도. 이 옵션은 기본값이며 트랩 핸들러가
부동 소수점 예외를 일으킨 프로그램을 식별합니다.

f 기능 정밀도. 트랩 핸들러는 원인이 된 함수를 결정할 수 있습니다.
부동 소수점 예외.

i 지시 정밀도. 트랩 핸들러는 다음과 같은 정확한 명령어를 결정할 수 있습니다.
부동 소수점 예외가 발생했습니다.

다른 Alpha 컴파일러는 다음과 같은 동등한 옵션을 제공합니다. -scope_safe
-재개_안전.

-mieee-준수
이 옵션은 생성된 코드를 IEEE 준수로 표시합니다. 이 옵션을 사용하면 안 됩니다.
또한 지정하지 않는 한 -mtrap-정밀도=i 그리고 -mfp-트랩-모드=su or
-mfp-트랩-모드=sui. 유일한 효과는 선을 방출하는 것입니다. .flag 48 기능에서
생성된 어셈블리 파일의 프롤로그. DEC Unix에서는 다음과 같은 효과가 있습니다.
IEEE 호환 수학 라이브러리 루틴이 연결됩니다.

-mbuild-상수
일반적으로 GCC는 32비트 또는 64비트 정수 상수를 검사하여 구성할 수 있는지 확인합니다.
XNUMX개 또는 XNUMX개의 명령어에서 더 작은 상수에서. 할 수 없으면 출력합니다.
상수를 리터럴로 만들고 런타임에 데이터 세그먼트에서 로드하는 코드를 생성합니다.

이 옵션을 사용하여 GCC가 구성하도록 요구합니다. 모든 코드를 사용하는 정수 상수
더 많은 지침이 필요합니다(최대값은 XNUMX개).

일반적으로 이 옵션을 사용하여 공유 라이브러리 동적 로더를 빌드합니다. 그 자체
공유 라이브러리는 변수를 찾기 전에 메모리에서 자신을 재배치해야 합니다.
자체 데이터 세그먼트의 상수.

-말파-as
- 가스
공급업체 제공 어셈블러에서 어셈블할 코드 생성 여부 선택
(-말파-as) 또는 GNU 어셈블러에 의해 - 가스.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno 수정
-mmax
-mno-최대
GCC가 선택적 BWX, CIX, FIX 및 MAX를 사용하기 위해 코드를 생성해야 하는지 여부를 나타냅니다.
명령어 세트. 기본값은 CPU에서 지원하는 명령어 세트를 사용하는 것입니다.
를 통해 지정된 유형 -mcpu = 옵션 또는 GCC가 빌드된 CPU의 옵션이 없는 경우
지정되었습니다.

-mfloat-vax
-mfloat-ieee
대신 VAX F 및 G 부동 소수점 산술을 사용(사용하지 않음)하는 코드 생성
IEEE 단정밀도 및 배정밀도.

-mexplicit-relocs
-mno-명시적-relocs
이전 Alpha 어셈블러는
어셈블러 매크로. 이러한 매크로를 사용하면 최적의 명령 스케줄링이 허용되지 않습니다.
버전 2.12의 GNU binutils는 컴파일러가 다음을 수행할 수 있도록 하는 새로운 구문을 지원합니다.
어떤 재배치가 어떤 명령에 적용되어야 하는지 명시적으로 표시하십시오. 이 옵션은
GCC가 어셈블러의 기능을 감지하기 때문에 디버깅에 가장 유용합니다.
빌드되고 그에 따라 기본값을 설정합니다.

-msmall-데이터
-mlarge-데이터
인셀덤 공식 판매점인 -mexplicit-relocs 실제로 정적 데이터는 다음을 통해 액세스됩니다. gp-상대적
재배치. 언제 -msmall-데이터 가 사용되면 길이가 8바이트 이하인 객체가
a 작은 데이터 지역 (".sdata" 및 ".sbss" 섹션) 및 16비트를 통해 액세스
$gp 레지스터에서 재배치. 이것은 작은 데이터 영역의 크기를 다음으로 제한합니다.
64KB이지만 단일 명령어를 통해 변수에 직접 액세스할 수 있습니다.

디폴트는 -mlarge-데이터. 이 옵션을 사용하면 데이터 영역이 바로 아래로 제한됩니다.
2GB. 2GB 이상의 데이터가 필요한 프로그램은 "malloc" 또는 "mmap"을 사용해야 합니다.
프로그램의 데이터 세그먼트 대신 힙에 데이터를 할당합니다.

공유 라이브러리용 코드를 생성할 때, -fpic 의미하다 -msmall-데이터-fPIC
의미하다 -mlarge-데이터.

-m작은 텍스트
-mlarge-텍스트
인셀덤 공식 판매점인 -m작은 텍스트 사용되는 경우 컴파일러는 전체 프로그램의 코드가
(또는 공유 라이브러리)는 4MB에 맞으므로 분기 명령으로 도달할 수 있습니다.
인셀덤 공식 판매점인 -msmall-데이터 가 사용되면 컴파일러는 모든 로컬 기호가
동일한 $gp 값, 따라서 함수에 필요한 명령어 수 감소
4에서 1로 전화를 겁니다.

디폴트는 -mlarge-텍스트.

-mcpu =CPU_유형
머신 유형에 대한 명령어 세트 및 명령어 스케줄링 매개변수 설정
CPU_유형. 다음 중 하나를 지정할 수 있습니다. EV 스타일 이름 또는 해당 칩 번호.
GCC는 EV4, EV5 및 EV6 프로세서 제품군에 대한 스케줄링 매개변수를 지원하며
지정한 프로세서에서 명령어 세트의 기본값을 선택합니다.
프로세서 유형을 지정하지 않으면 GCC는 기본적으로 해당 프로세서가 있는 프로세서로 설정됩니다.
컴파일러가 구축되었습니다.

지원되는 값 CPU_유형 are

ev4
ev45
21064
EV4로 예약되며 명령어 세트 확장이 없습니다.

ev5
21164
EV5로 예약되며 명령어 세트 확장이 없습니다.

ev56
21164a
EV5로 예약하고 BWX 확장을 지원합니다.

PCA56
21164pc
21164PC
EV5로 예약하고 BWX 및 MAX 확장을 지원합니다.

ev6
21264
EV6로 예약하고 BWX, FIX 및 MAX 확장을 지원합니다.

ev67
21264a
EV6으로 예약하고 BWX, CIX, FIX 및 MAX 확장을 지원합니다.

기본 도구 체인도 가치를 지원합니다. 출신, 최고의 아키텍처를 선택하는
호스트 프로세서에 대한 옵션입니다. -mcpu=네이티브 GCC가 인식하지 못하면 효과가 없습니다.
프로세서.

-mtune=CPU_유형
머신 유형에 대한 명령어 스케줄링 매개변수만 설정 CPU_유형. 그만큼
명령어 세트는 변경되지 않습니다.

기본 도구 체인도 가치를 지원합니다. 출신, 최고의 아키텍처를 선택하는
호스트 프로세서에 대한 옵션입니다. -mtune=네이티브 GCC가 인식하지 못하면 효과가 없습니다.
프로세서.

-메모리 대기 시간=시간
스케줄러가 다음에서 볼 수 있는 일반적인 메모리 참조에 대해 가정해야 하는 대기 시간을 설정합니다.
응용 프로그램. 이 숫자는 사용된 메모리 액세스 패턴에 크게 의존합니다.
응용 프로그램과 시스템의 외부 캐시 크기에 따라 다릅니다.

유효한 옵션 시간 are

번호
클록 주기를 나타내는 XNUMX진수입니다.

L1
L2
L3
본관
컴파일러에는 "전형적인" EV4 및
레벨 5, 1 및 2 캐시용 EV3 하드웨어(Dcache, Cache 및
Bcache) 뿐만 아니라 주 메모리에도 적용됩니다. L3는 EV5에만 유효합니다.

12월 알파/VMS 옵션

Bowman의 -m 옵션은 DEC Alpha/VMS 구현에 대해 정의됩니다.

-mvms-반환 코드
메인에서 VMS 조건 코드를 반환합니다. 기본값은 POSIX 스타일 조건을 반환하는 것입니다.
(예: 오류) 코드.

-mdebug-메인=접두사
이름이 로 시작하는 첫 번째 루틴에 플래그 지정 접두사 의 주요 루틴으로
디버거.

-mmalloc64
기본값은 64비트 메모리 할당 루틴입니다.

FR30 옵션

이러한 옵션은 FR30 포트에 대해 특별히 정의됩니다.

-m작은 모델
작은 주소 공간 모델을 사용하십시오. 이것은 더 작은 코드를 생성할 수 있지만
모든 기호 값과 주소는 20비트 범위에 맞습니다.

-mno-lsim
런타임 지원이 제공되었으므로 다음을 포함할 필요가 없다고 가정합니다.
시뮬레이터 라이브러리(libsim.a) 링커 명령줄에서.

FRV 옵션

-mgpr-32
처음 32개의 범용 레지스터만 사용하십시오.

-mgpr-64
64개의 범용 레지스터를 모두 사용합니다.

-mfpr-32
처음 32개의 부동 소수점 레지스터만 사용하십시오.

-mfpr-64
64개의 부동 소수점 레지스터를 모두 사용하십시오.

-mhard-float
부동 소수점 연산에 하드웨어 명령어를 사용하십시오.

-msoft-float
부동 소수점 연산에 라이브러리 루틴을 사용하십시오.

-malloc-cc
조건 코드 레지스터를 동적으로 할당합니다.

-mfixed-cc
조건 코드 레지스터를 동적으로 할당하지 말고 "icc0"만 사용하고
"fcc0".

-mdword
이중 단어 insns를 사용하도록 ABI를 변경합니다.

-mno-dword
이중 단어 지침을 사용하지 마십시오.

-m더블
부동 소수점 이중 명령어를 사용합니다.

-mno-더블
부동 소수점 이중 명령어를 사용하지 마십시오.

-미디어
미디어 지침을 사용합니다.

-mno-미디어
미디어 지침을 사용하지 마십시오.

-mmuladd
곱하기 및 더하기/빼기 명령어를 사용합니다.

-mno-물라드
곱하기 및 더하기/빼기 명령어를 사용하지 마십시오.

-mfdpic
함수 설명자를 사용하여 포인터를 나타내는 FDPIC ABI를 선택합니다.
기능. PIC/PIE 관련 옵션이 없으면 다음을 의미합니다. -fPIE. 과 -fpic or
-파이, GOT 항목 및 작은 데이터가 GOT에서 12비트 범위 내에 있다고 가정합니다.
기본 주소; ~와 함께 -fPIC or -fPIE, GOT 오프셋은 32비트로 계산됩니다. 와
비핀 엘프 대상, 이 옵션은 -msim.

-minline-plt
알려지지 않은 함수에 대한 함수 호출에서 PLT 항목 인라인 사용
로컬로 바인딩합니다. 없이는 아무런 효과가 없습니다. -mfdpic. 다음과 같은 경우 기본적으로 활성화됩니다.
공유 라이브러리에 대한 속도 및 컴파일 최적화(즉, -fPIC or -fpic), 또는
다음과 같은 최적화 옵션이 있을 때 -O3 또는 이상이 명령줄에 있습니다.

-mTLS
스레드 로컬 코드를 생성할 때 큰 TLS 세그먼트를 가정합니다.

-mtls
스레드 로컬 코드를 생성할 때 큰 TLS 세그먼트를 가정하지 마십시오.

-mgprel-로
에 있는 것으로 알려진 데이터에 대해 FDPIC ABI에서 "GPREL" 재배치 사용을 활성화합니다.
읽기 전용 섹션. 다음을 제외하고 기본적으로 활성화되어 있습니다. -fpic or -파이: 일지라도
전역 오프셋 테이블을 더 작게 만드는 데 도움이 될 수 있으며 1 명령어를 4로 교환합니다.
-fPIC or -fPIE, 3개의 명령에 대해 4개의 명령을 교환하며, 그 중 하나는 여러 사람이 공유할 수 있습니다.
기호이며 참조된 기호에 대한 GOT 항목이 필요하지 않으므로
승리할 가능성이 더 높습니다. 그렇지 않은 경우 -mno-gprel-ro 비활성화하는 데 사용할 수 있습니다.

-multilib-라이브러리-pic
(FD가 아닌 라이브러리) 사진 라이브러리와 연결합니다. 에 의해 암시된다 - 라이브러리 사진뿐만 아니라
~에 의해 -fPIC-fpic 없이 -mfdpic. 명시적으로 사용할 필요는 없습니다.

-Mlinked-FP
스택 프레임이 생성될 때마다 항상 프레임 포인터를 생성하는 EABI 요구 사항을 따릅니다.
할당됩니다. 이 옵션은 기본적으로 활성화되어 있으며 다음으로 비활성화할 수 있습니다.
-mno 연결 fp.

-mlong-통화
간접 주소 지정을 사용하여 현재 컴파일 단위 외부에서 함수를 호출합니다. 이것
함수를 32비트 주소 공간 내 어디에나 배치할 수 있습니다.

-악성 레이블
이전 패킷에 nops를 삽입하여 레이블을 8바이트 경계에 맞추십시오.
이 옵션은 VLIW 패킹이 활성화된 경우에만 효과가 있습니다. 새로 만들지 않는다
패킷; 기존 항목에 nops를 추가할 뿐입니다.

- 라이브러리 사진
위치 독립적인 EABI 코드를 생성합니다.

-맥-4
처음 XNUMX개의 미디어 누산기 레지스터만 사용하십시오.

-맥-8
XNUMX개의 미디어 누산기 레지스터를 모두 사용합니다.

-mpack
VLIW 지침을 포장하십시오.

-mno-팩
VLIW 지침을 포장하지 마십시오.

-mno 플래그
e_flags에 ABI 스위치를 표시하지 마십시오.

-mcond-이동
조건부 이동 명령 사용을 활성화합니다(기본값).

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mno-cond-이동
조건부 이동 명령의 사용을 비활성화합니다.

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mscc
조건부 집합 명령어 사용을 활성화합니다(기본값).

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mno-scc
조건부 집합 명령어의 사용을 비활성화합니다.

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mcond-exec
조건부 실행 사용을 활성화합니다(기본값).

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mno-조건-exec
조건부 실행 사용을 비활성화합니다.

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mvliw-분기
패스를 실행하여 분기를 VLIW 명령어(기본값)로 묶습니다.

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mno-vliw-분기
분기를 VLIW 명령어로 패킹하는 패스를 실행하지 마십시오.

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-m다중 조건 실행
"&&" 및 "||" 최적화 활성화 조건부 실행(기본값).

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mno-다중 조건-exec
"&&" 및 "||" 최적화 비활성화 조건부 실행에서.

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mnested-cond-exec
중첩 조건부 실행 최적화를 활성화합니다(기본값).

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-mno-중첩-조건-exec
중첩 조건부 실행 최적화를 비활성화합니다.

이 스위치는 주로 컴파일러를 디버깅하기 위한 것이며 다음 단계에서 제거될 것입니다.
미래 버전.

-moptimize-멤바
이 스위치는 컴파일러 생성 코드에서 중복 "멤바" 명령을 제거합니다.
기본적으로 활성화되어 있습니다.

-mno-optimize-멤바
이 스위치는 중복 "멤바" 명령의 자동 제거를 비활성화합니다.
생성된 코드.

-mtomcat-통계
가스가 바람둥이 통계를 출력하도록 합니다.

-mcpu =CPU
코드를 생성할 프로세서 유형을 선택합니다. 가능한 값은 Frv, fr550,
여자 꽁무니를 쫓아 다니다, fr500, fr450, fr405, fr400, fr300간편한 설치.

GNU / 리눅스 옵션

Bowman의 -m 옵션은 GNU/Linux 대상에 대해 정의됩니다.

-mglibc
GNU C 라이브러리를 사용하십시오. 이것은 다음을 제외하고 기본값입니다. *-*-리눅스-*ulibc*
*-*-리눅스-*안드로이드* 목표.

-뮤클립
uClibc C 라이브러리를 사용합니다. 이것은 기본 설정입니다. *-*-리눅스-*ulibc* 목표.

-엠비오닉
Bionic C 라이브러리를 사용합니다. 이것은 기본 설정입니다. *-*-리눅스-*안드로이드* 목표.

-맨드로이드
Android 플랫폼과 호환되는 컴파일 코드. 이것은 기본 설정입니다.
*-*-리눅스-*안드로이드* 목표.

컴파일할 때 이 옵션은 -엠비오닉, -fPIC, -fno-예외-fno-rtti by
기본. 연결할 때 이 옵션은 GCC 드라이버가 Android 전용 옵션을 전달하도록 합니다.
링커에. 마지막으로 이 옵션을 사용하면 전처리기 매크로 "__ANDROID__"가
한정된.

-tno-안드로이드-cc
의 컴파일 효과 비활성화 -맨드로이드, 즉, 활성화하지 마십시오 -엠비오닉, -fPIC,
-fno-예외-fno-rtti 기본적으로

-tno-안드로이드-ld
연결 효과 비활성화 -맨드로이드즉, 표준 Linux 연결 옵션을
링커.

H8 / 300 옵션

Bowman의 -m 옵션은 H8/300 구현에 대해 정의됩니다.

-mrelax
가능하면 링크 시간에 일부 주소 참조를 줄이십시오. 링커 옵션을 사용
-편하게 하다.

-mh H8/300H용 코드를 생성합니다.

-ms H8S용 코드를 생성합니다.

-mn 일반 모드에서 H8S 및 H8/300H용 코드를 생성합니다. 이 스위치를 사용해야 합니다
어느 쪽이든 -mh or -ms.

-ms2600
H8S/2600용 코드를 생성합니다. 이 스위치는 다음과 함께 사용해야 합니다. -ms.

-민트32
"int" 데이터를 기본적으로 32비트로 만듭니다.

-악성-300
H8/300H 및 H8S에서는 H8/300과 동일한 정렬 규칙을 사용합니다. 기본값
H8/300H 및 H8S의 경우 4바이트 경계에서 long 및 float를 정렬합니다.
-악성-300 2바이트 경계로 정렬됩니다. 이 옵션은 효과가 없습니다
H8/300에서.

HPPA 옵션

Bowman의 -m 옵션은 HPPA 컴퓨터 제품군에 대해 정의됩니다.

-행진=건축형
지정된 아키텍처에 대한 코드를 생성합니다. 에 대한 선택 건축형 are
1.0 PA 1.0의 경우, 1.1 PA 1.1의 경우 2.0 PA 2.0 프로세서용. 인용하다
/usr/lib/sched.models 적절한 아키텍처 옵션을 결정하기 위해 HP-UX 시스템에서
당신의 기계를 위해. 낮은 번호의 아키텍처용으로 컴파일된 코드는 높은 번호에서 실행됩니다.
번호가 매겨진 아키텍처이지만 그 반대는 아닙니다.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
동의어 -1.0월=XNUMX, -1.1월=XNUMX-2.0월=XNUMX 각각.

-mbig 스위치
큰 스위치 테이블에 적합한 코드를 생성합니다. 다음과 같은 경우에만 이 옵션을 사용하십시오.
어셈블러/링커가 스위치 테이블 내의 범위를 벗어난 분기에 대해 불평합니다.

-m점프-인-지연
수정하여 무조건 점프 명령으로 함수 호출의 지연 슬롯 채우기
조건부 점프의 대상이 될 함수 호출에 대한 반환 포인터.

-mdisable-fpregs
부동 소수점 레지스터가 어떤 식으로든 사용되지 않도록 합니다. 이것은 필요하다
부동 소수점 레지스터의 지연 컨텍스트 스위칭을 수행하는 컴파일 커널. 만약에
이 옵션을 사용하고 부동 소수점 연산을 수행하려고 하면 컴파일러
중단합니다.

-mdisable-인덱싱
컴파일러가 인덱싱 주소 모드를 사용하지 못하도록 합니다. 이것은 오히려 일부를 피합니다
MACH에서 MIG 생성 코드를 컴파일할 때 모호한 문제.

-mno-공간-regs
대상에 공간 레지스터가 없다고 가정하는 코드를 생성합니다. 이를 통해 GCC는
더 빠른 간접 호출을 생성하고 확장되지 않은 인덱스 주소 모드를 사용합니다.

이러한 코드는 레벨 0 PA 시스템 및 커널에 적합합니다.

-mfast-간접 호출
호출이 공간 경계를 넘지 않는다고 가정하는 코드를 생성합니다. 이를 통해 GCC는
더 빠른 간접 호출을 수행하는 코드를 방출합니다.

이 옵션은 공유 라이브러리 또는 중첩 함수가 있는 경우 작동하지 않습니다.

-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자가 사용할 수 없는 것입니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.

-mlong-로드-스토어
HP-UX 3에서 필요에 따라 10개 명령어 로드 및 저장 시퀀스 생성
링커. 이것은 +k HP 컴파일러에 대한 옵션입니다.

-가동 가능한 런타임
ELF 시스템에 대해 HP에서 제안한 휴대용 호출 규칙을 사용합니다.

- 가스
GAS만 이해하는 어셈블러 지시문 사용을 활성화합니다.

-ms스케줄=CPU 유형
머신 유형에 대한 제약 조건에 따라 코드를 예약합니다. CPU 유형. 선택
for CPU 유형 are 700 7100, 7100LC, 7200, 73008000. 인용하다
/usr/lib/sched.models 적절한 예약 옵션을 결정하기 위해 HP-UX 시스템에서
당신의 기계. 기본 일정은 8000.

-mlinker-opt
HP-UX 링커에서 최적화 단계를 활성화합니다. 이것은 심볼릭 디버깅을 만듭니다.
불가능한. 또한 HP-UX 8 및 HP-UX 9 링커에서 버그를 트리거합니다.
일부 프로그램을 연결할 때 가짜 오류 메시지를 제공합니다.

-msoft-float
부동 소수점에 대한 라이브러리 호출이 포함된 출력을 생성합니다. 경고: 필수
모든 HPPA 대상에 대해 라이브러리를 사용할 수 있는 것은 아닙니다. 일반적으로 시설의
기계의 일반적인 C 컴파일러가 사용되지만 이것은 교차에서 직접 수행될 수 없습니다.
편집. 적절한 라이브러리를 제공하기 위해 스스로 준비해야 합니다.
크로스 컴파일을 위한 함수

-msoft-float 출력 파일의 호출 규칙을 변경합니다. 그러므로 그것은 단지
컴파일하면 유용합니다. 모든 이 옵션이 있는 프로그램의 특히, 당신은
편집하다 libgcc.a, GCC와 함께 제공되는 라이브러리, -msoft-float 이를 위해
작동합니다.

-msio
서버 IO에 대한 사전 정의 "_SIO"를 생성합니다. 기본값은 -mwsio. 이것은 생성
워크스테이션 IO에 대해 "__hp9000s700", "__hp9000s700__" 및 "_WSIO"를 미리 정의합니다.
이러한 옵션은 HP-UX 및 HI-UX에서 사용할 수 있습니다.

-mgnu-ld
GNU ld 특정 옵션을 사용하십시오. 이것은 통과 -공유 공유를 구축할 때 ld에
도서관. GCC가 명시적 또는 암시적으로 구성될 때 기본값입니다.
GNU 링커. 이 옵션은 ld가 호출되는 데 영향을 미치지 않습니다.
해당 ld에 전달되는 매개변수를 변경합니다. 호출되는 ld는 다음과 같이 결정됩니다.
전에, --with-ld 구성 옵션, GCC의 프로그램 검색 경로, 그리고 마지막으로 사용자의
PATH. GCC에서 사용하는 링커는 다음을 사용하여 인쇄할 수 있습니다. 어느 `gcc -인쇄 프로그램 이름=ld`.
이 옵션은 64비트 HP-UX GCC에서만 사용할 수 있습니다.
hppa*64*-*-hpux*.

-mhp-ld
HP ld 특정 옵션을 사용합니다. 이것은 통과 -b 공유 라이브러리를 구축할 때 ld에
패스 +수락 유형 불일치 모든 링크에서 ld. GCC일 때 기본값입니다.
명시적이든 암시적이든 HP 링커를 사용하여 구성됩니다. 이 옵션에는
ld가 호출되는 모든 영향은 해당 매개변수에 전달되는 매개변수만 변경합니다.
일 호출되는 ld는 다음에 의해 결정됩니다. --with-ld 구성 옵션, GCC의
프로그램 검색 경로, 그리고 마지막으로 사용자의 PATH. GCC에서 사용하는 링커는 다음과 같습니다.
사용하여 인쇄 어느 `gcc -인쇄 프로그램 이름=ld`. 이 옵션은
64비트 HP-UX GCC(예: hppa*64*-*-hpux*.

-mlong-통화
긴 호출 시퀀스를 사용하는 코드를 생성합니다. 이렇게 하면 통화가 항상 가능합니다.
링커 생성 스텁에 도달합니다. 기본값은 다음 경우에만 긴 호출을 생성하는 것입니다.
호출 사이트에서 함수 또는 번역 단위의 시작 부분까지의 거리,
이 경우 사용 중인 분기 유형에 의해 설정된 미리 정의된 제한을 초과할 수 있습니다. NS
일반 호출에 대한 제한은 PA 7,600,000에 대해 각각 240,000 및 2.0바이트입니다.
및 PA 1.X 아키텍처. Sibcall은 항상 240,000바이트로 제한됩니다.

거리는 사용할 때 함수의 시작 부분에서 측정됩니다.
-ffunction-섹션 옵션을 사용하거나 - 가스-mno-휴대용-런타임 옵션
HP-UX에서 SOM 링커와 함께 사용됩니다.

일반적으로 이 옵션을 사용하면 성능이 저하되므로 바람직하지 않습니다.
그러나 대규모 응용 프로그램, 특히 부분 연결이 필요한 경우 유용할 수 있습니다.
응용 프로그램을 빌드하는 데 사용됩니다.

사용되는 긴 호출의 유형은 어셈블러와 링커의 기능에 따라 다릅니다.
생성되는 코드의 유형. 긴 시간을 지원하는 시스템에 미치는 영향
절대 호출 및 긴 그림 기호 차이 또는 PC 상대 호출은 다음과 같아야 합니다.
상대적으로 작습니다. 그러나 간접 호출은 pic 코드의 32비트 ELF 시스템에서 사용됩니다.
그리고 꽤 깁니다.

-뮤닉스=유닉스 표준
컴파일러 생성은 지정된 UNIX 표준에 대한 시작 파일을 미리 정의하고 선택합니다.
에 대한 선택 유닉스 표준 are 93, 9598. 93 모든 HP-UX 버전에서 지원됩니다.
95 HP-UX 10.10 이상에서 사용할 수 있습니다. 98 HP-UX 11.11 이상에서 사용할 수 있습니다.
기본값은 93 HP-UX 10.00의 경우 95 HP-UX 10.10 ~ 11.00의 경우 98
HP-UX 11.11 이상용.

-뮤닉스=93 GCC 3.3 및 3.4와 동일한 사전 정의를 제공합니다. -뮤닉스=95 제공
"XOPEN_UNIX" 및 "_XOPEN_SOURCE_EXTENDED"에 대한 추가 사전 정의 및 시작 파일
유닉스95.o. -뮤닉스=98 "_XOPEN_UNIX"에 대한 추가 사전 정의를 제공합니다.
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" 및 "_INCLUDE_XOPEN_SOURCE_500",
그리고 시작 파일 유닉스98.o.

그것은 중대한 이 옵션은 다양한 라이브러리의 인터페이스를 변경합니다.
루틴. 또한 C 라이브러리의 작동 동작에도 영향을 줍니다. 따라서, 극단
이 옵션을 사용할 때는 주의가 필요합니다.

둘 이상의 UNIX 표준에서 작동하도록 의도된 라이브러리 코드는 테스트해야 합니다.
변수 설정 및 복원 __xpg4_extended_mask 적절한. 대부분의 GNU 소프트웨어
이 기능을 제공하지 않습니다.

-nolibdld
libdld.sl을 검색하기 위한 링크 옵션의 생성을 억제합니다. -공전 옵션은
HP-UX 10 이상에서 지정됩니다.

-공전
libc에서 setlocale의 HP-UX 구현은 libdld.sl에 종속됩니다. 거기
libdld.sl의 아카이브 버전이 아닙니다. 따라서, 언제 -공전 옵션이 지정되고,
이 종속성을 해결하려면 특수 링크 옵션이 필요합니다.

HP-UX 10 이상에서 GCC 드라이버는 다음과 연결하는 데 필요한 옵션을 추가합니다.
libdld.sl이 -공전 옵션이 지정됩니다. 이로 인해 결과 바이너리가
역동적이다. 64비트 포트에서 링커는 기본적으로 동적 바이너리를 생성합니다.
어떤 경우. NS -nolibdld 옵션을 사용하여 GCC 드라이버가 추가하는 것을 방지할 수 있습니다.
이러한 링크 옵션.

- 스레드
멀티스레딩 지원 추가 디시 HP-UX에서 라이브러리. 이 옵션
전처리기와 링커 모두에 대한 플래그를 설정합니다.

인텔 386 AMD x86-64 옵션

Bowman의 -m 옵션은 i386 및 x86-64 컴퓨터 제품군에 대해 정의됩니다.

-mtune=CPU 유형
튜닝 CPU 유형 ABI를 제외하고 생성된 코드에 적용 가능한 모든 것
사용 가능한 지침 세트. 에 대한 선택 CPU 유형 위치 :

일반적인
가장 일반적인 IA32/AMD64/EM64T 프로세서에 최적화된 코드를 생성합니다. 만약 너라면
코드가 실행될 CPU를 알고 있으면 해당하는
-mtune 옵션 대신 -mtune=일반. 하지만 정확히 어떤 CPU인지 모른다면
응용 프로그램의 사용자는 이 옵션을 사용해야 합니다.

새로운 프로세서가 시장에 배포됨에 따라 이 옵션의 동작은
바뀔 것이다. 따라서 최신 버전의 GCC로 업그레이드하면 코드가
생성된 옵션은 다음과 같은 경우 가장 일반적인 프로세서를 반영하도록 변경됩니다.
해당 버전의 GCC가 출시되었습니다.

없다. -march=일반 옵션 때문에 -XNUMX 월 명령어 세트를 나타냅니다.
컴파일러가 사용할 수 있으며 모든 항목에 적용할 수 있는 일반 명령 집합이 없습니다.
프로세서. 대조적으로, -mtune 프로세서를 나타냅니다(또는 이 경우
코드가 최적화된 프로세서 모음).

출신
이것은 프로세서를 결정하여 컴파일 시간에 조정할 CPU를 선택합니다.
컴파일 기계의 종류. 사용 -mtune=네이티브 최적화된 코드를 생성합니다
선택한 명령어 세트의 제약 조건 하에서 로컬 머신에 대한
사용 -march = 네이티브 로컬에서 지원하는 모든 명령어 하위 집합을 활성화합니다.
머신(따라서 결과가 다른 머신에서 실행되지 않을 수 있음).

i386
원래 인텔의 i386 CPU.

i486
인텔의 i486 CPU. (이 칩에는 스케줄링이 구현되어 있지 않습니다.)

아이586, 펜티엄
MMX를 지원하지 않는 Intel Pentium CPU.

펜티엄-mmx
MMX 명령어 세트를 지원하는 Pentium 코어 기반 Intel PentiumMMX CPU.

펜티엄프로
인텔 펜티엄프로 CPU.

i686
"generic"과 동일하지만 "march" 옵션으로 사용하는 경우 PentiumPro 명령어 세트
이 코드는 모든 i686 제품군 칩에서 실행됩니다.

펜티엄
MMX 명령어 세트를 지원하는 PentiumPro 코어 기반 Intel Pentium2 CPU.

펜티엄3, 펜티엄3m
MMX 및 SSE 명령어 세트가 있는 PentiumPro 코어 기반 Intel Pentium3 CPU
지원합니다.

펜티엄-m
MMX, SSE 및 SSE3 명령어 세트가 있는 Intel Pentium2 CPU의 저전력 버전
지원하다. Centrino 노트북에서 사용합니다.

펜티엄4, 펜티엄4m
MMX, SSE 및 SSE4 명령어 세트를 지원하는 Intel Pentium2 CPU.

프레스콧
MMX, SSE, SSE4 및 SSE2 명령어가 포함된 Intel Pentium3 CPU의 향상된 버전
지원을 설정합니다.

노코나
4비트 확장, MMX, SSE, SSE64 및
SSE3 명령어 세트 지원.

core2
2비트 확장, MMX, SSE, SSE64, SSE2 및 SSSE3 명령어가 있는 Intel Core3 CPU
지원을 설정합니다.

코어리7
7비트 확장이 있는 Intel Core i64 CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 및
SSE4.2 명령어 세트 지원.

corei7-avx
7비트 확장 기능이 있는 Intel Core i64 CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES 및 PCLMUL 명령어 세트 지원.

코어 AVX
64비트 확장이 있는 Intel Core CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND 및 F16C 명령어 세트 지원.

원자
64비트 확장, MMX, SSE, SSE2, SSE3 및 SSSE3 명령어가 있는 Intel Atom CPU
지원을 설정합니다.

k6 MMX 명령어 세트를 지원하는 AMD K6 CPU.

k6-2, k6-3
MMX 및 6DNow!가 포함된 AMD K3 CPU의 향상된 버전! 명령어 세트 지원.

애슬론, 애슬론 트버드
MMX가 탑재된 AMD Athlon CPU, 3dNOW!, 향상된 3DNow! 및 SSE 프리페치 명령어
지원합니다.

애슬론-4, 애슬론-XP, 애슬론-mp
MMX, 3DNow!, 향상된 3DNow!가 포함된 향상된 AMD Athlon CPU 및 전체 SSE 명령
지원을 설정합니다.

k8, 옵테론, 애슬론64, 애슬론-FX
x8-86 명령어 세트를 지원하는 AMD K64 코어 기반 CPU. (이것은 MMX를 대체합니다.
SSE, SSE2, 3DNow!, 향상된 3DNow! 및 64비트 명령어 세트 확장.)

k8-sse3, 옵테론-sse3, 애슬론64-sse3
SSE8 명령어 세트를 지원하는 개선된 버전의 k64, opteron 및 athlon3.

암드팜10, 바르셀로나
x10-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, 향상된 3DNow!, ABM 및 64비트 슈퍼세트
명령어 세트 확장)

bdver1
x15-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
상위 집합 FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM 및 64비트 명령어 세트 확장)

bdver2
x15-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
슈퍼세트 BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM 및 64비트 명령어 세트 확장)

btver1
x14-86 명령어 세트를 지원하는 AMD 제품군 64h 코어 기반 CPU. (이것
상위 집합 MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM 및 64비트 명령어 세트
확장자.)

윈칩-c6
IDT Winchip C6 CPU, 추가 MMX 명령어 세트로 i486과 동일한 방식으로 처리
지원합니다.

윈칩2
IDT Winchip2 CPU, 추가 MMX 및 486DNow!
명령어 세트 지원.

c3 MMX 및 3DNow가 있는 C3 CPU를 통해! 명령어 세트 지원. (일정이 없습니다.
이 칩에 대해 구현되었습니다.)

c3 - 2
MMX 및 SSE 명령어 세트를 지원하는 C3-2 CPU를 통해. (일정이 없습니다.
이 칩에 대해 구현되었습니다.)

지 오드
MMX 및 3DNow!가 포함된 임베디드 AMD CPU! 명령어 세트 지원.

특정 항목을 선택하면서 CPU 유형 그것에 대해 적절하게 일정을 잡을 것입니다
특정 칩에서 컴파일러는 실행되지 않는 코드를 생성하지 않습니다.
없는 기본 머신 유형 -행진=CPU 유형 사용 중인 옵션입니다. 예를 들어
GCC는 i686-pc-linux-gnu용으로 구성된 다음 -mtune=펜티엄4 코드를 생성할 것입니다
Pentium4에 맞게 조정되었지만 여전히 i686 시스템에서 실행됩니다.

-행진=CPU 유형
머신 유형에 대한 지침 생성 CPU 유형. 에 대한 선택 CPU 유형 있는
와 동일 -mtune. 또한 지정 -행진=CPU 유형 의미하다 -mtune=CPU 유형.

-mcpu =CPU 유형
더 이상 사용되지 않는 동의어 -mtune.

-mfpmath=단위
선택한 단위에 대한 부동 소수점 산술 생성 단위. 에 대한 선택 단위 위치 :

387 대부분의 칩에 있는 표준 387 부동 소수점 보조 프로세서 사용
그렇지 않으면 에뮬레이트됩니다. 이 옵션으로 컴파일된 코드는 거의 모든 곳에서 실행됩니다.
임시 결과는 정밀도 대신 80비트 정밀도로 계산됩니다.
유형별로 지정되어 대부분의 경우와 약간 다른 결과가 나타납니다.
다른 칩. 보다 -fffloat-store 더 자세한 설명을 위해.

이것은 i386 컴파일러의 기본 선택입니다.

ESS SSE 명령어 세트에 있는 스칼라 부동 소수점 명령어를 사용합니다. 이것
명령 세트는 AMD 라인에서 Pentium3 및 최신 칩에서 지원됩니다.
Athlon-4, Athlon-xp 및 Athlon-mp 칩. 이전 버전의 SSE 명령어
set은 단정밀도 산술만 지원하므로 이중 및 확장
정밀도 산술은 여전히 ​​387을 사용하여 수행됩니다.
Pentium4 및 향후 AMD x86-64 칩, 배정도 산술 지원
도.

i386 컴파일러의 경우 다음을 사용해야 합니다. -행진=CPU 유형, -msse or -msse2. 스위치
SSE 확장을 활성화하고 이 옵션을 유효하게 만듭니다. x86-64 컴파일러의 경우,
이러한 확장은 기본적으로 활성화되어 있습니다.

결과 코드는 대부분의 경우 상당히 빨라야 하며
387 코드의 수치적 불안정성 문제를 피하지만 일부 기존 코드를 깨뜨릴 수 있습니다.
임시가 80비트일 것으로 예상하는 코드입니다.

이것은 x86-64 컴파일러의 기본 선택입니다.

쎄,387
쎄+387

한 번에 두 명령어 세트를 모두 활용하십시오. 이것은 효과적으로 두 배
387에 대해 별도의 실행 단위가 있는 사용 가능한 레지스터 및 칩의 양
실행 자원도 SSE합니다. 이 옵션은 아직 사용 중이므로 주의해서 사용하십시오.
GCC 레지스터 할당자가 별도로 모델링하지 않기 때문에 실험적
불안정한 성능을 초래하는 기능 단위.

-매즘=방언
선택한 것을 사용하여 asm 명령을 출력합니다. 방언. 지원되는 선택 사항은 정보 or
(기본값). 다윈은 지원하지 않습니다 정보.

-mieee-fp
-mno-ieee-fp
컴파일러가 IEEE 부동 소수점 비교를 사용하는지 여부를 제어합니다. 이것들
비교 결과가 정렬되지 않은 경우 올바르게 처리하십시오.

-msoft-float
부동 소수점에 대한 라이브러리 호출이 포함된 출력을 생성합니다. 경고: 필수
라이브러리는 GCC의 일부가 아닙니다. 일반적으로 기계의 일반적인 C의 기능
컴파일러가 사용되지만 이것은 크로스 컴파일에서 직접 수행할 수 없습니다. 당신은해야합니다
교차에 적합한 라이브러리 기능을 제공하기 위해 자체적으로 준비하십시오.
편집.

함수가 80387 레지스터에서 부동 소수점 결과를 반환하는 시스템에서
스택, 경우에도 일부 부동 소수점 연산 코드가 방출될 수 있습니다. -msoft-float 사용.

-mno-fp-ret-in-387
함수의 반환 값에 FPU 레지스터를 사용하지 마십시오.

일반적인 호출 규칙에는 "float" 및 "double" 유형의 값을 반환하는 함수가 있습니다.
FPU가 없더라도 FPU 레지스터에 있습니다. 아이디어는 운영 체제
FPU를 에뮬레이트해야 합니다.

옵션 -mno-fp-ret-in-387 이러한 값이 일반 CPU에서 반환되도록 합니다.
대신 등록합니다.

-mno-팬시-수학-387
일부 387 에뮬레이터는 "sin", "cos" 및 "sqrt" 명령어를 지원하지 않습니다.
387. 이러한 명령을 생성하지 않으려면 이 옵션을 지정하십시오. 이 옵션은
FreeBSD, OpenBSD 및 NetBSD에서 기본값입니다. 이 옵션은 다음과 같은 경우 무시됩니다. -XNUMX 월
대상 CPU에 항상 FPU가 있으므로 명령이 실행되지 않음을 나타냅니다.
에뮬레이션이 필요합니다. 개정판 2.6.1부터 이러한 지침은 다음을 수행하지 않는 한 생성되지 않습니다.
또한 사용 -재미있는 수학 최적화 스위치.

-악성-더블
-mno-정렬-더블
GCC가 "double", "long double" 및 "long long" 변수를 정렬할지 여부를 제어합니다.
두 단어 경계 또는 한 단어 경계. 두 단어로 된 "이중" 변수 정렬
경계는 다음에서 다소 더 빠르게 실행되는 코드를 생성합니다. 펜티엄 더 많은 비용으로
메모리.

x86-64에서, -악성-더블 기본적으로 활성화되어 있습니다.

경고: 당신이 -악성-더블 스위치, 위의 유형을 포함하는 구조
게시된 애플리케이션 바이너리 인터페이스와 다르게 정렬됩니다.
386에 대한 사양이며 코드의 구조와 바이너리 호환되지 않습니다.
해당 스위치 없이 컴파일됩니다.

-m96bit-롱-더블
-m128bit-롱-더블
이 스위치는 "롱 더블" 유형의 크기를 제어합니다. i386 애플리케이션 바이너리
인터페이스는 크기를 96비트로 지정하므로 -m96bit-롱-더블 의 기본값입니다.
32비트 모드.

현대 아키텍처(펜티엄 이상)는 8-에 맞춰 "긴 이중"을 선호합니다.
또는 16바이트 경계. ABI를 준수하는 배열이나 구조에서 이것은
가능한. 그래서 지정 -m128bit-롱-더블 "long double"을 16바이트로 정렬합니다.
추가 32비트 XNUMX으로 "long double"을 패딩하여 경계.

x86-64 컴파일러에서, -m128bit-롱-더블 ABI로 기본 선택 사항입니다.
"long double"이 16바이트 경계에서 정렬되도록 지정합니다.

이러한 옵션 중 어느 것도 x87 표준보다 더 높은 정밀도를 가능하게 하지 않습니다.
"long double"의 경우 80비트입니다.

경고: 대상 ABI의 기본값을 재정의하면 구조 및
"long double" 변수를 포함하는 배열은 크기와 기능을 변경합니다.
"long double"을 사용하는 함수에 대한 호출 규칙이 수정됩니다. 따라서 그들은
그것 없이 컴파일된 코드의 배열이나 구조와 바이너리 호환되지 않습니다.
스위치.

-mlarge-데이터-임계값=번호
인셀덤 공식 판매점인 -mcmodel=중간 다음보다 큰 데이터가 지정되면 임계값 크게 배치된다
데이터 섹션. 이 값은 바이너리에 연결된 모든 개체에서 동일해야 합니다.
기본값은 65535입니다.

-mrtd
고정된 함수를 사용하는 다른 함수 호출 규칙을 사용합니다.
"ret"와 함께 반환되는 인수의 수 NUM 그들의 인수를 팝하는 명령
돌아오는 동안. 이것은 필요가 없기 때문에 호출자에게 하나의 명령을 저장합니다.
거기에 인수를 팝니다.

다음을 사용하여 이 호출 시퀀스로 개별 함수가 호출되도록 지정할 수 있습니다.
함수 속성 stdcall. 재정의할 수도 있습니다. -mrtd 옵션을 사용하여
기능 속성 cdecl.

경고: 이 호출 규칙은 Unix에서 일반적으로 사용되는 것과 호환되지 않습니다.
따라서 Unix 컴파일러로 컴파일된 라이브러리를 호출해야 하는 경우 사용할 수 없습니다.

또한 변수를 사용하는 모든 함수에 대해 함수 프로토타입을 제공해야 합니다.
인수의 수("printf" 포함); 그렇지 않으면 잘못된 코드가 생성됩니다
해당 함수에 대한 호출을 위해.

또한 너무 많은 함수를 호출하면 심각하게 잘못된 코드가 생성됩니다.
인수. (일반적으로 추가 인수는 무해하게 무시됩니다.)

-mregparm=NUM
정수 인수를 전달하는 데 사용되는 레지스터 수를 제어합니다. 기본적으로
레지스터는 인수를 전달하는 데 사용되며 최대 3개의 레지스터를 사용할 수 있습니다. 당신은 할 수 있습니다
function 속성을 사용하여 특정 기능에 대한 이 동작을 제어합니다. 레그팜.

경고: 이 스위치를 사용하면 NUM XNUMX이 아니면 모든 모듈을 빌드해야 합니다.
모든 라이브러리를 포함하여 동일한 값을 사용합니다. 여기에는 시스템 라이브러리 및
시작 모듈.

-msseregparm
float 및 double 인수 및 반환 값에 대해 SSE 레지스터 전달 규칙을 사용합니다.
function 속성을 사용하여 특정 함수에 대한 이 동작을 제어할 수 있습니다.
세레그팜.

경고: 이 스위치를 사용하는 경우 모든 모듈을 동일한 값으로 빌드해야 합니다.
모든 라이브러리를 포함합니다. 여기에는 시스템 라이브러리와 시작 모듈이 포함됩니다.

-mvect8-ret-in-mem
MMX 레지스터 대신 메모리에 8바이트 벡터를 반환합니다. 이것은 기본 설정입니다.
Solaris@tie{}8, 9 및 VxWorks가 Sun Studio 컴파일러의 ABI와 일치할 때까지
버전 12. 이후 컴파일러 버전(Studio 12 Update@tie{}1부터 시작)은 다음을 따릅니다.
Solaris@tie{}86 ​​이상에서 기본값인 다른 x10 대상에서 사용하는 ABI.
에서 생성한 기존 코드와 호환성을 유지해야 하는 경우 이 옵션을 사용하십시오.
이전 컴파일러 버전 또는 이전 버전의 GCC.

-mpc32
-mpc64
-mpc80
80387 부동 소수점 정밀도를 32, 64 또는 80비트로 설정합니다. 언제 -mpc32 지정되고,
부동 소수점 연산 결과의 유효 숫자는 24비트로 반올림됩니다.
(단정밀도); -mpc64 부동 소수점 결과의 유효숫자를 반올림합니다.
53비트로 연산(배정밀도) 및 -mpc80 결과의 유효숫자를 반올림합니다.
부동 소수점 연산을 64비트(확장 배정밀도)로 변환합니다.
기본. 이 옵션을 사용하면 더 높은 정밀도의 부동 소수점 연산이
FPU 제어 단어를 명시적으로 설정하지 않으면 프로그래머가 사용할 수 없습니다.

부동 소수점 연산의 반올림을 기본 80비트 미만으로 설정하면
일부 프로그램의 속도를 2% 이상 높입니다. 일부 수학 라이브러리는 다음과 같이 가정합니다.
확장 정밀도(80비트) 부동 소수점 연산은 기본적으로 활성화되어 있습니다. 루틴
이러한 라이브러리에서는 일반적으로 다음을 통해 정확도가 크게 손실될 수 있습니다.
이 옵션을 사용하여 정밀도를
확장 정밀도보다 작습니다.

-mstack재정렬
입력 시 스택을 다시 정렬합니다. 인텔 x86에서 -mstack재정렬 옵션이 생성됩니다
필요한 경우 런타임 스택을 재정렬하는 대체 프롤로그 및 에필로그.
이것은 4바이트 정렬 스택을 최신 코드와 함께 유지하는 레거시 코드 혼합을 지원합니다.
SSE 호환성을 위해 16바이트 스택을 유지합니다. 속성 참조
"force_align_arg_pointer", 개별 기능에 적용 가능.

-mpreferred-스택-경계=NUM
스택 경계를 2로 올린 상태로 유지하려고 시도합니다. NUM 바이트 경계. 만약에
-우선순위-스택-경계 지정되지 않은 경우 기본값은 4(16바이트 또는 128비트)입니다.

경고: SSE 확장을 사용하여 x86-64 아키텍처용 코드를 생성할 때
장애인, -mpreferred-스택-경계=3 스택 경계를 정렬된 상태로 유지하는 데 사용할 수 있습니다.
8바이트 경계까지. 다음으로 모든 모듈을 빌드해야 합니다. -mpreferred-스택-경계=3,
모든 라이브러리를 포함합니다. 여기에는 시스템 라이브러리와 시작 모듈이 포함됩니다.

-최소화 스택 경계=NUM
들어오는 스택이 2로 정렬되어 있다고 가정합니다. NUM 바이트 경계. 만약에
-최소 스택 경계 가 지정되지 않은 경우
-우선순위-스택-경계 사용하게 될 것이다.

Pentium 및 PentiumPro에서 "double" 및 "long double" 값은
8바이트 경계(참조 -악성-더블) 또는 상당한 런타임 성능 저하
처벌. Pentium III에서 SSE(Streaming SIMD Extension) 데이터 유형 "__m128"은
16바이트로 정렬되지 않으면 제대로 작동하지 않습니다.

스택에서 이 값의 적절한 정렬을 보장하려면 스택 경계가 다음과 같아야 합니다.
스택에 저장된 값에 필요한 대로 정렬됩니다. 또한 모든 기능
스택을 정렬된 상태로 유지하도록 생성되어야 합니다. 따라서 함수를 호출
더 낮은 값으로 컴파일된 함수에서 더 높은 선호 스택 경계로 컴파일
기본 스택 경계는 스택을 잘못 정렬할 가능성이 높습니다. 다음을 수행하는 것이 좋습니다.
콜백을 사용하는 라이브러리는 항상 기본 설정을 사용합니다.

이 추가 정렬은 추가 스택 공간을 소비하고 일반적으로 코드를 증가시킵니다.
크기. 임베디드 시스템과 같은 스택 공간 사용에 민감한 코드
운영 체제 커널에서 선호하는 정렬을
-mpreferred-스택-경계=2.

-mmmx.
-mno-mmx
-msse
-mno-sse
-msse2.
-mno-sse2
-msse3.
-mno-sse3
-mssse3
-mno-sse3
-msse4.1.
-mno-sse4.1
-msse4.2.
-mno-sse4.2
-msse4.
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-메스
-mno-aes.
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c.
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-맘마
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mtbm
-mno-tbm
이 스위치는 MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT 또는 3DNow!
확장된 명령어 세트. 이러한 확장은 내장형으로도 사용할 수 있습니다.
기능: 참조 X86 내장 기능, 활성화된 기능에 대한 자세한 내용 및
이 스위치에 의해 비활성화됩니다.

부동 소수점 코드에서 SSE/SSE2 명령어가 자동으로 생성되도록 하려면(
387 지침에 반대), 참조 -mfpmath=sse.

GCC는 다음과 같은 경우 SSEx 명령어를 사용하지 않습니다. -mavx 사용. 대신 새로운 AVX를 생성합니다.
필요한 경우 모든 SSEx 명령어에 대한 명령어 또는 AVX 등가물.

이러한 옵션을 사용하면 GCC가 생성된 코드에서 이러한 확장된 명령어를 사용할 수 있습니다.
심지어 ~ ~없이 -mfpmath=sse. 런타임 CPU 감지를 수행하는 애플리케이션은 다음을 수행해야 합니다.
적절한 플래그를 사용하여 지원되는 각 아키텍처에 대해 별도의 파일을 컴파일합니다.
특히 CPU 감지 코드가 포함된 파일은 다음 없이 컴파일해야 합니다.
이러한 옵션.

-mcld
이 옵션은 함수의 프롤로그에서 "cld" 명령을 내보내도록 GCC에 지시합니다.
문자열 명령을 사용합니다. 문자열 명령어는 선택할 DF 플래그에 따라 다릅니다.
자동 증가 또는 자동 감소 모드 사이. ABI가 DF 플래그를 지정하는 동안
기능 입력 시 지워지므로 일부 운영 체제는 이 사양을 위반하지 않습니다.
예외 디스패처에서 DF 플래그를 지웁니다. 예외 처리기는
DF 플래그가 설정된 상태에서 호출되어 문자열이
지침이 사용됩니다. 이 옵션은 32비트 x86 대상에서 기본적으로 활성화할 수 있습니다.
다음을 사용하여 GCC 구성 --활성화-cld 옵션을 구성합니다. "cld"의 생성
명령은 다음으로 억제할 수 있습니다. -mno-cld 이 경우 컴파일러 옵션.

-mvzeroupper
이 옵션은 "vzeroupper" 명령을 전송하기 전에 GCC에 지시합니다.
AVX에서 SSE로의 전환 패널티를 최소화하기 위해 기능 외부로 흐름을 제어할 뿐만 아니라
불필요한 zeroupper 내장을 제거하십시오.

-mprefer-avx128
이 옵션은 GCC가 128비트 AVX 대신 256비트 AVX 명령어를 사용하도록 지시합니다.
자동 벡터라이저의 지침.

-mcx16
이 옵션을 사용하면 GCC가 생성된 코드에서 CMPXCHG16B 명령어를 사용할 수 있습니다.
CMPXCHG16B는 128비트 이중 쿼드워드(또는 oword) 데이터에 대한 원자적 연산을 허용합니다.
유형. 이것은 여러 시스템에 의해 업데이트될 수 있는 고해상도 카운터에 유용합니다.
프로세서(또는 코어). 이 명령어는 원자 내장의 일부로 생성됩니다.
기능: 참조 __동조 빌트인 or __원자 빌트인 자세한 내용은.

-msahf
이 옵션을 사용하면 GCC가 생성된 64비트 코드에서 SAHF 명령을 사용할 수 있습니다. 일찍
Intel 64가 탑재된 Intel CPU에는 AMD64가 지원하는 LAHF 및 SAHF 명령어가 없었습니다.
4년 1월 Pentium 2005 GXNUMX 단계 도입. LAHF 및 SAHF는 로드 및 저장
특정 상태 플래그에 대한 명령. 64비트 모드에서 SAHF
명령어는 "fmod", "drem" 또는 "remainder" 내장 함수를 최적화하는 데 사용됩니다.
기타 빌트인 자세한 내용은.

-mmovbe
이 옵션을 사용하면 GCC가 movbe 명령어를 사용하여 "__builtin_bswap32"를 구현할 수 있습니다.
및 "__builtin_bswap64".

-mcrc32
이 옵션은 내장 함수 "__builtin_ia32_crc32qi"를 활성화합니다.
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" 및 "__builtin_ia32_crc32di"
crc32 기계 명령어를 생성합니다.

-mrecip
이 옵션을 사용하면 GCC가 RCPSS 및 RSQRTSS 명령(및 해당
벡터화된 변이체 RCPPS 및 RSQRTPS)에 Newton-Raphson 단계를 추가하여
DIVSS 및 SQRTSS(및 벡터화된 변형) 대신 정밀도를 높입니다.
단정밀도 부동 소수점 인수. 이 지침은 다음과 같은 경우에만 생성됩니다.
-재미있는 수학 최적화 와 함께 활성화됩니다. - 유한 수학 전용
-fno 트래핑 수학. 시퀀스의 처리량은
non-reciprocal 명령어의 처리량, 시퀀스의 정밀도는
최대 2ulp까지 감소합니다(즉, 1.0의 역수는 0.99999994와 같습니다).

GCC는 "1.0f/sqrtf(NS)" RSQRTSS(또는 RSQRTPS) 측면에서 이미
-빠른 수학 (또는 위의 옵션 조합), 필요하지 않음 -mrecip.

또한 GCC는 추가 Newton-Raphson 단계와 함께 위의 시퀀스를 방출합니다.
벡터화된 단일 부동 소수점 나누기 및 벡터화된 "sqrtf(NS)" 이미 -빠른 수학
(또는 위의 옵션 조합), 필요하지 않음 -mrecip.

-mrecip=고르다
이 옵션을 사용하면 사용할 상호 추정 지침을 제어할 수 있습니다. 고르다
"!"가 앞에 올 수 있는 쉼표로 구분된 옵션 목록입니다. 를 반전시키다
옵션: "all": 모든 추정 지침 활성화, "default": 기본값 활성화
에 해당하는 지침 -mrecip, "없음": 모든 추정 지침을 비활성화합니다.
에 해당 -mno-recipe, "div": 스칼라 나눗셈에 대한 근사를 활성화합니다.
"vec-div": 벡터화 분할에 대한 근사값 활성화, "sqrt": 활성화
스칼라 제곱근에 대한 근사, "vec-sqrt": 근사를 활성화합니다.
벡터화된 제곱근.

예를 들어 -mrecip=모두,!sqrt 모든 역 근사를 가능하게 할 것입니다.
제곱근을 제외하고.

-mveclibabi=유형
외부 라이브러리를 사용하여 내장 함수를 벡터화하는 데 사용할 ABI 유형을 지정합니다.
지원되는 유형은 인텔 짧은 벡터 수학 라이브러리의 경우 "svml"이고, 인텔의 경우 "acml"입니다.
AMD 수학 코어 라이브러리 스타일의 인터페이스. GCC는 현재 다음을 호출합니다.
"vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
"vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2",
"vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
"vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104", "vmlsPow4", "vmlsTanh4",
"vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
"vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" 및 "vmlsAcos4"
해당 함수 유형은 다음과 같을 때 -mveclibabi=svml 사용되며 "__vrd2_sin",
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
해당 함수 유형에 대한 "__vrs4_log10f" 및 "__vrs4_powf"
-mveclibabi=acml 사용. 둘 다 -ftree 벡터화-재미있는 수학 최적화 있다
활성화됩니다. 링크에서 SVML 또는 ACML ABI 호환 라이브러리를 지정해야 합니다.
시간.

-마비=name
지정된 호출 규칙에 대한 코드를 생성합니다. 허용되는 값은 다음과 같습니다. 시스템 for
GNU/Linux 및 기타 시스템에서 사용되는 ABI 및 ms 마이크로소프트 ABI용. 기본값
Windows를 대상으로 할 때 Microsoft ABI를 사용하는 것입니다. 다른 모든 시스템에서는 기본값
SYSV ABI입니다. 다음을 사용하여 특정 기능에 대한 이 동작을 제어할 수 있습니다.
기능 속성 ms_abi/sysv_abi.

-mtls-방언=유형
다음을 사용하여 스레드 로컬 저장소에 액세스하는 코드 생성 암소 비슷한 일종의 영양 or gnu2 관례. 암소 비슷한 일종의 영양
보수적 기본값입니다. gnu2 더 효율적이지만 컴파일 및 실행을 추가할 수 있습니다.
모든 시스템에서 충족될 수 없는 시간 요구 사항.

-mpush-인수
-mno-푸시 인수
PUSH 작업을 사용하여 나가는 매개변수를 저장합니다. 이 방법은 더 짧고 일반적으로
SUB/MOV 작업을 사용하는 방법과 동일하게 빠르며 기본적으로 활성화되어 있습니다. 일부에서는
이 기능을 비활성화하면 일정이 개선되고
종속성.

-maccumulate-outgoing-args
활성화된 경우 나가는 인수에 필요한 최대 공간은 다음과 같습니다.
함수 프롤로그에서 계산됩니다. 이것은 대부분의 최신 CPU에서 더 빠릅니다.
스택이 선호될 때 종속성 감소, 스케줄링 개선 및 스택 사용량 감소
경계는 2와 같지 않습니다. 단점은 코드 크기가 눈에 띄게 증가한다는 것입니다. 이것
스위치 의미 -mno-푸시 인수.

-m스레드
스레드로부터 안전한 예외 처리 지원 밍와32. 스레드 안전에 의존하는 코드
예외 처리는 모든 코드를 컴파일하고 링크해야 합니다. -m스레드 옵션. 언제
컴파일, -m스레드 정의 -D_MT; 연결할 때 특수 스레드 도우미에 연결됩니다.
도서관 -lmingwthrd 스레드별 예외 처리 데이터를 정리합니다.

-mno-align-stringops
인라인된 문자열 작업의 대상을 정렬하지 마십시오. 이 스위치는 코드 크기를 줄입니다.
대상이 이미 정렬되어 있지만 GCC는 그렇지 않은 경우 성능을 향상시킵니다.
그것에 대해 알아

-minline-all-stringops
기본적으로 GCC는 대상이 다음과 같이 알려진 경우에만 문자열 작업을 인라인합니다.
최소 4바이트 경계로 정렬됩니다. 이것은 더 많은 인라인을 가능하게 하고, 코드 크기를 증가시키며,
그러나 빠른 memcpy, strlen 및 memset에 의존하는 코드의 성능을 향상시킬 수 있습니다.
짧은 길이.

-minline-stringops-동적으로
크기를 알 수 없는 문자열 작업의 경우 작은 크기에 대해 인라인 코드와 함께 런타임 검사를 사용합니다.
블록 및 큰 블록에 대한 라이브러리 호출.

-mstringop-전략=ALG
특정 알고리즘에 대한 내부 결정 휴리스틱을 인라인 문자열로 덮어씁니다.
와 함께 작동합니다. 허용되는 값은 "rep_byte", "rep_4byte", "rep_8byte"입니다.
지정된 크기의 i386 "rep" 접두사를 사용하여 확장, "byte_loop", "loop",
인라인 루프 확장을 위한 "unrolled_loop", 항상 확장 라이브러리를 위한 "libcall"
요구.

-momit-리프 프레임 포인터
리프 함수에 대한 레지스터에 프레임 포인터를 유지하지 마십시오. 이것은 피한다
프레임 포인터를 저장, 설정 및 복원하고 추가 레지스터를 만드는 명령
리프 함수에서 사용할 수 있습니다. 옵션 -fomit 프레임 포인터 프레임을 제거
디버깅을 더 어렵게 만들 수 있는 모든 기능에 대한 포인터입니다.

-mtls-직접-세그-refs
-mno-tls-direct-seg-refs
TLS 세그먼트의 오프셋을 사용하여 TLS 변수에 액세스할 수 있는지 여부를 제어합니다.
레지스터(32비트의 경우 %gs, 64비트의 경우 %fs) 또는 스레드 기반 포인터가 다음과 같아야 하는지 여부
추가했습니다. 이것이 합법인지 여부는 운영 체제에 따라 다릅니다.
전체 TLS 영역을 포함하도록 세그먼트를 매핑합니다.

GNU libc를 사용하는 시스템의 경우 기본값은 on입니다.

-msse2avx
-mno-sse2avx
어셈블러가 VEX 접두사로 SSE 명령어를 인코딩해야 함을 지정합니다. 옵션
-mavx 기본적으로 이 기능을 켭니다.

-엠펜트리
-mno-펜트리
프로파일링이 활성화된 경우 -페이지 프롤로그 앞에 프로파일링 카운터 호출을 넣습니다. 참고: 켜기
x86 아키텍처 속성 "ms_hook_prologue"는 현재로서는 불가능합니다.
-엠펜트리-페이지.

-m8bit-idiv
-mno-8bit-idiv
Intel Atom과 같은 일부 프로세서에서는 8비트 부호 없는 정수 나누기가 다음보다 훨씬 빠릅니다.
32비트/64비트 정수 나누기. 이 옵션은 런타임 검사를 생성합니다. 만약 둘 다
피제수와 제수가 0에서 255 사이의 범위에 있고 8비트 부호 없는 정수 나누기는 다음과 같습니다.
32비트/64비트 정수 나누기 대신 사용됩니다.

-mavx256-분할-정렬되지 않은-로드
-mavx256-분할-정렬되지 않은-저장
32바이트 AVX 정렬되지 않은 로드 및 저장을 분할합니다.

Bowman의 -m 위의 사항에 추가로 스위치는 AMD x86-64 프로세서에서 지원됩니다.
64비트 환경.

-m32
-m64
-mx32
32비트 또는 64비트 환경용 코드를 생성합니다. NS -m32 옵션은 int, long 및
32비트에 대한 포인터를 만들고 모든 i386 시스템에서 실행되는 코드를 생성합니다. NS -m64 선택권
int를 32비트로 설정하고 long과 포인터를 64비트로 설정하고 AMD용 코드를 생성합니다.
x86-64 아키텍처. NS -mx32 옵션은 int, long 및 포인터를 32비트로 설정하고
AMD의 x86-64 아키텍처용 코드를 생성합니다. 다윈에게만 -m64 옵션 회전
오프 -fno-pic-mdynamic-no-pic 옵션을 제공합니다.

-mno-레드-존
x86-64 코드에 대해 소위 레드존을 사용하지 마십시오. 레드존은
x86-64 ABI, 스택 포인터 위치를 넘어선 128바이트 영역입니다.
신호 또는 인터럽트 핸들러에 의해 수정되지 않으므로 다음 용도로 사용할 수 있습니다.
스택 포인터를 조정하지 않고 임시 데이터. 깃발 -mno-레드-존 해제
이 레드존.

-mcmodel=작은
작은 코드 모델을 위한 코드 생성: 프로그램과 해당 기호는 다음 위치에 연결되어야 합니다.
주소 공간의 하위 2GB. 포인터는 64비트입니다. 프로그램 수
정적으로 또는 동적으로 연결됩니다. 이것은 기본 코드 모델입니다.

-mcmodel=커널
커널 코드 모델에 대한 코드를 생성합니다. 커널은 음의 2GB에서 실행됩니다.
주소 공간. 이 모델은 Linux 커널 코드에 사용해야 합니다.

-mcmodel=중간
중형 모델에 대한 코드 생성: 프로그램은 하위 2GB에 링크됩니다.
주소 공간. 작은 기호도 거기에 배치됩니다. 다음보다 큰 크기의 기호
-mlarge-데이터-임계값 큰 데이터 또는 bss 섹션에 배치되고 위치를 찾을 수 있습니다.
2GB 이상. 프로그램은 정적으로 또는 동적으로 링크될 수 있습니다.

-mcmodel=대형
대규모 모델에 대한 코드 생성: 이 모델은 주소 및
섹션의 크기.

-maddress 모드=긴
긴 주소 모드에 대한 코드를 생성합니다. 64비트 및 x32에서만 지원됩니다.
환경. 64비트 환경의 기본 주소 모드입니다.

-maddress-mode=짧음
짧은 주소 모드에 대한 코드를 생성합니다. 이것은 32비트 및 x32에서만 지원됩니다.
환경. 32비트 및 x32 환경의 기본 주소 모드입니다.

i386 x86-64 Windows 옵션

다음 추가 옵션은 Windows 대상에 사용할 수 있습니다.

-mconsole
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. 콘솔이
링커에 PE 헤더를 설정하도록 지시하여 애플리케이션이 생성됩니다.
콘솔 응용 프로그램에 필요한 하위 시스템 유형입니다. 이것은 기본 동작입니다.
Cygwin 및 MinGW 대상.

-mdll
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. DLL을 지정합니다.
동적 링크 라이브러리 - 필요한 항목을 선택할 수 있도록 생성됩니다.
런타임 시작 개체 및 진입점.

-mnop-재미-dllimport
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. 다음을 지정합니다.
dllimport 속성은 무시해야 합니다.

--mthread.
이 옵션은 MinGW 대상에 사용할 수 있습니다. MinGW 특정 스레드를 지정합니다.
지원을 사용해야 합니다.

-뮤니코드
이 옵션은 mingw-w64 대상에 사용할 수 있습니다. UNICODE 매크로가
미리 정의되고 유니코드 지원 런타임 시작 코드가 선택됩니다.

-mwin32
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. 그것은 전형적인
Windows 사전 정의 매크로는 전처리기에서 설정되지만 영향을 미치지 않습니다.
런타임 라이브러리/시작 코드 선택.

-mwindows
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. GUI를 지정합니다.
응용 프로그램은 링커에 PE 헤더를 설정하도록 지시하여 생성됩니다.
적절하게 하위 시스템 유형을 지정합니다.

-fno-set-stack-실행 가능
이 옵션은 MinGW 대상에 사용할 수 있습니다. 실행 가능한 플래그를 지정합니다.
중첩 함수에서 사용하는 스택이 설정되지 않았습니다. 이것은 실행되는 바이너리에 필요합니다.
실행 파일을 설정하는 데 사용되는 user32 API가 있는 Windows의 커널 모드
권한을 사용할 수 없습니다.

-mpe-정렬-공통
이 옵션은 Cygwin 및 MinGW 대상에 사용할 수 있습니다. 그것은 GNU가
COMMON 변수의 올바른 정렬을 허용하는 PE 파일 형식의 확장자
코드를 생성할 때 사용해야 합니다. GCC가 감지하면 기본적으로 활성화됩니다.
구성 중에 찾은 대상 어셈블러가 해당 기능을 지원하는지 확인합니다.

아래도 참조 i386 x86-64 옵션 표준 옵션의 경우.

IA-64 옵션

이들은 있습니다 -m Intel IA-64 아키텍처에 대해 정의된 옵션.

-mbig-엔디안
빅 엔디안 대상에 대한 코드를 생성합니다. 이것은 HP-UX의 기본값입니다.

-미리틀 엔디안
리틀 엔디안 대상에 대한 코드를 생성합니다. 이것은 AIX5 및 GNU/Linux의 기본값입니다.

-mgnu-as
-mno-gnu-as
GNU 어셈블러용 코드를 생성하거나 생성하지 마십시오. 이것이 기본값입니다.

-mgnu-ld
-mno-gnu-ld
GNU 링커에 대한 코드를 생성하거나 생성하지 마십시오. 이것이 기본값입니다.

-mno-그림
전역 포인터 레지스터를 사용하지 않는 코드를 생성합니다. 결과는 위치가 아닙니다.
독립 코드이며 IA-64 ABI를 위반합니다.

-mvolatile-asm-중지
-mno-휘발성-asm-stop
휘발성 asm 문 직전과 직후에 정지 비트를 생성하거나 생성하지 마십시오.

-m 레지스터 이름
-mno 레지스터 이름
생성(또는 하지 않음) in, LOC아웃 스택 레지스터의 레지스터 이름. 이것
어셈블러 출력을 더 읽기 쉽게 만들 수 있습니다.

-mno-sdata
-msdata
작은 데이터 섹션을 사용하는 최적화를 비활성화(또는 활성화)합니다. 이것은 유용 할 수 있습니다
옵티마이저 버그를 해결하기 위해.

-m상수-gp
단일 상수 전역 포인터 값을 사용하는 코드를 생성합니다. 이것은 다음과 같은 경우에 유용합니다.
커널 코드 컴파일

-자동 사진
자체 재배치 가능한 코드를 생성합니다. 이것은 의미합니다 -m상수-gp. 이것은 유용하다
펌웨어 코드를 컴파일할 때.

-minline-float-divide-min-latency
최소 대기 시간을 사용하여 부동 소수점 값의 인라인 분할을 위한 코드 생성
연산.

-minline-float-divide-max-처리량
최대 처리량을 사용하여 부동 소수점 값의 인라인 분할을 위한 코드 생성
연산.

-mno-inline-float-divide
부동 소수점 값을 나누기 위해 인라인 코드를 생성하지 마십시오.

-minline-int-divide-min-latency
최소 대기 시간을 사용하여 정수 값의 인라인 분할을 위한 코드 생성
연산.

-minline-int-divide-max-처리량
최대 처리량을 사용하여 정수 값의 인라인 분할을 위한 코드 생성
연산.

-mno-인라인-int-나누기
정수 값을 나누기 위해 인라인 코드를 생성하지 마십시오.

-minline-sqrt-최소 대기 시간
최소 대기 시간 알고리즘을 사용하여 인라인 제곱근에 대한 코드를 생성합니다.

-minline-sqrt-max-처리량
최대 처리량 알고리즘을 사용하여 인라인 제곱근에 대한 코드를 생성합니다.

-mno-인라인-sqrt
sqrt에 대한 인라인 코드를 생성하지 마십시오.

-머퓨즈드-매드
-mno-융합-매드
융합된 곱하기/더하기 또는 곱하기/빼기를 사용하는 코드를 생성하지 마십시오.
지침. 기본값은 이 지침을 사용하는 것입니다.

-mno-dwarf2-asm
-mdwarf2-asm
DWARF2 줄 번호 디버깅 정보에 대한 어셈블러 코드를 생성하지 마십시오. 이것
GNU 어셈블러를 사용하지 않을 때 유용할 수 있습니다.

-거의 스톱 비트
-mno-초기 정지 비트
정지 비트가 명령 바로 이전보다 먼저 배치되도록 허용합니다.
정지 비트를 트리거했습니다. 이것은 명령 스케줄링을 향상시킬 수 있지만 항상 그런 것은 아닙니다.
그렇게.

-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자가 사용할 수 없는 것입니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.

-mtls-크기=tls 크기
즉시 TLS 오프셋의 비트 크기를 지정합니다. 유효한 값은 14, 22 및 64입니다.

-mtune=CPU 유형
특정 CPU에 대한 명령 스케줄링을 조정합니다. 유효한 값은 Itanium입니다.
Itanium1, merced, Itanium2 및 mckinley.

-milp32.
-mlp64
32비트 또는 64비트 환경용 코드를 생성합니다. 32비트 환경은 int,
long 및 32비트에 대한 포인터입니다. 64비트 환경은 int를 32비트로 설정하고 long 및
64비트에 대한 포인터. 이는 HP-UX 특정 플래그입니다.

-mno-sched-br-data-spec
-msched-br-데이터-사양
다시 로드하기 전에 데이터 추측 스케줄링을 (비활성화/활성화) 활성화합니다. 이로 인해
ld.a 명령어 생성 및 해당 검사 명령어(ld.c /
chk.a). 기본값은 '비활성화'입니다.

-msched-ar-데이터-사양
-mno-sched-ar-data-spec
(En/Dis) 재로드 후 데이터 추측 스케줄링을 활성화합니다. 이로 인해 생성
ld.a 지침 및 해당 검사 지침(ld.c / chk.a). NS
기본값은 '활성화'입니다.

-mno-sched-control-spec
-msched-제어-사양
(Dis/En) 제어 추측 스케줄링. 이 기능은 동안에만 사용할 수 있습니다.
지역 스케줄링(즉, 다시 로드 전). 그러면 ld.s가 생성됩니다.
지침 및 해당 점검 지침 chk.s . 기본값은
'장애를 입히다'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis) 데이터에 의존하는 명령어의 추측 스케줄링 가능
재장전 전 추측 부하. 이 있어야만 효과적입니다. -msched-br-데이터-사양
활성화. 기본값은 '활성화'입니다.

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis) 데이터에 의존하는 명령어의 추측 스케줄링 가능
재장전 후 추측 부하. 이 있어야만 효과적입니다. -msched-ar-데이터-사양
활성화. 기본값은 '활성화'입니다.

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)
투기 부하를 제어합니다. 이 있어야만 효과적입니다. -msched-제어-사양 사용하도록 설정되었습니다.
기본값은 '활성화'입니다.

-mno-sched prefer-non-data-spec-insns
-msched-prefer-비-데이터-사양-insns
활성화된 경우 데이터 추측 지침이 있는 경우에만 일정에 대해 선택됩니다.
현재로서는 다른 선택이 없습니다. 이것은 데이터 추측을 사용할 것입니다.
훨씬 보수적입니다. 기본값은 '비활성화'입니다.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
활성화된 경우 제어 추측 지침이 있는 경우에만 일정에 대해 선택됩니다.
현재로서는 다른 선택이 없습니다. 이것은 통제 추측의 사용을 만들 것입니다
훨씬 보수적입니다. 기본값은 '비활성화'입니다.

-mno-sched-count-spec-in-중요 경로
-msched-count-spec-in-중요-경로
활성화하면 예측 종속성이 계산 중에 고려됩니다.
지시 우선 순위. 이것은 추측의 사용을 조금 더 만들 것입니다
보수적 인. 기본값은 '비활성화'입니다.

-msched-spec-ldc
간단한 데이터 추측 검사를 사용합니다. 이 옵션은 기본적으로 켜져 있습니다.

-msched-제어-사양-ldc
제어 추측에 대한 간단한 검사를 사용합니다. 이 옵션은 기본적으로 켜져 있습니다.

-매 주기 후 msched-stop-bits
스케줄링할 때 모든 주기 후에 정지 비트를 배치하십시오. 이 옵션은 기본적으로 켜져 있습니다.

-msched-fp-mem-deps-제로 비용
부동 소수점 저장 및 로드는 다음과 같은 경우 충돌을 일으키지 않는다고 가정합니다.
같은 명령 그룹에 배치됩니다. 이 옵션은 기본적으로 비활성화되어 있습니다.

-msel-sched-dont-check-control-spec
선택적 스케줄링에서 제어 추측에 대한 검사를 생성합니다. 이 깃발은
기본적으로 비활성화되어 있습니다.

-msched-최대-메모리-insns=최대-인스
명령 그룹당 메모리 인스의 수를 제한하여 더 낮은 우선 순위를 부여
동일한 명령 그룹에서 예약을 시도하는 후속 메모리 시설.
캐시 뱅크 충돌을 방지하는 데 자주 유용합니다. 기본값은 1입니다.

-msched-최대-메모리-insns-하드 제한
명령 그룹에서 'msched-max-memory-insns' 이상을 허용하지 않습니다. 그렇지 않으면 제한
'소프트'는 한계에 도달했을 때 비메모리 작업을 선호하지만
여전히 메모리 작업을 예약할 수 있습니다.

IA-64/VMS 옵션

Bowman의 -m 옵션은 IA-64/VMS 구현에 대해 정의됩니다.

-mvms-반환 코드
메인에서 VMS 조건 코드를 반환합니다. 기본값은 POSIX 스타일 조건을 반환하는 것입니다.
(예: 오류) 코드.

-mdebug-메인=접두사
이름이 로 시작하는 첫 번째 루틴에 플래그 지정 접두사 의 주요 루틴으로
디버거.

-mmalloc64
기본값은 64비트 메모리 할당 루틴입니다.

LM32 옵션

Bowman의 -m 옵션은 Lattice Mico32 아키텍처에 대해 정의됩니다.

-mbarrel-shift 사용 가능
배럴 시프트 명령을 활성화합니다.

-mdivide 사용
나누기 및 모듈러스 명령어를 활성화합니다.

-m곱하기 가능
곱하기 명령어를 활성화합니다.

-msign 확장 가능
부호 확장 지침을 활성화합니다.

-muser 사용 가능
사용자 정의 지침을 활성화합니다.

M32C 옵션

-mcpu =name
코드가 생성되는 CPU를 선택합니다. name 중 하나 일 수 있습니다 r8c R8C/Tiny용
연속, m16c M16C(최대 /60) 시리즈의 경우, m32cm M16C/80 시리즈 또는 m32c
M32C/80 시리즈용.

-msim
프로그램이 시뮬레이터에서 실행되도록 지정합니다. 이로 인해 대체
예를 들어 파일 I/O를 지원하는 링크될 런타임 라이브러리. 당신은하지 않아야
실제 하드웨어에서 실행될 프로그램을 생성할 때 이 옵션을 사용하십시오. 당신은해야합니다
필요한 I/O 기능에 대해 자체 런타임 라이브러리를 제공합니다.

-memregs=번호
코드 중에 GCC가 사용할 메모리 기반 의사 레지스터의 수를 지정합니다.
세대. 이러한 의사 레지스터는 실제 레지스터처럼 사용되므로
코드를 사용 가능한 레지스터에 맞추는 GCC의 능력과
레지스터 대신 메모리를 사용하면 성능이 저하됩니다. a의 모든 모듈은
프로그램은 이 옵션에 대해 동일한 값으로 컴파일되어야 합니다. 그 때문에 당신은
기본 런타임 라이브러리 gcc 빌드와 함께 이 옵션을 사용하면 안 됩니다.

M32R/D 옵션

Bowman의 -m 옵션은 Renesas M32R/D 아키텍처에 대해 정의됩니다.

-m32r2
M32R/2용 코드를 생성합니다.

-m32rx
M32R/X용 코드를 생성합니다.

-m32r
M32R용 코드를 생성합니다. 이것이 기본값입니다.

-mmodel=작은
모든 객체가 하위 16MB 메모리에 있다고 가정합니다.
"ld24" 명령어로 로드됨), 모든 서브루틴이
"bl"지시. 이것이 기본값입니다.

특정 개체의 주소 지정 가능성은 "모델" 속성으로 설정할 수 있습니다.

-mmodel=중간
객체가 32비트 주소 공간의 아무 곳에나 있을 수 있다고 가정합니다(컴파일러가
주소를 로드하기 위한 "seth/add3" 명령어), 모든 서브루틴이 다음과 같다고 가정합니다.
"bl" 명령으로 도달할 수 있습니다.

-mmodel=대형
객체가 32비트 주소 공간의 아무 곳에나 있을 수 있다고 가정합니다(컴파일러가
주소를 로드하기 위한 "seth/add3" 명령어), 서브루틴이
"bl" 명령어로 도달 가능(컴파일러는 훨씬 느린
"seth/add3/jl" 명령 시퀀스).

-msdata=없음
작은 데이터 영역의 사용을 비활성화합니다. 변수는 다음 중 하나에 입력됩니다. .data, BSS
.rodata ("섹션" 속성이 지정되지 않은 경우). 이것이 기본값입니다.

작은 데이터 영역은 섹션으로 구성됩니다. .sdata..sbss. 객체는 명시적으로
이 섹션 중 하나를 사용하여 "섹션" 속성이 있는 작은 데이터 영역에 넣습니다.

-msdata=sdata
작은 전역 및 정적 데이터를 작은 데이터 영역에 넣되 특별한 생성은 하지 마십시오.
참조하는 코드입니다.

-msdata=사용
작은 데이터 영역에 작은 전역 및 정적 데이터를 넣고 특수 생성
참조하도록 지시합니다.

-G NUM
전역 및 정적 개체를 다음보다 작거나 같음 NUM 작은 데이터로 바이트 또는
일반 데이터 또는 bss 섹션 대신 bss 섹션. 기본값 NUM is
8. 그만큼 -msdata 옵션은 다음 중 하나로 설정해야 합니다. 데이터 or 사용 이 옵션에
효과.

모든 모듈은 동일한 파일로 컴파일해야 합니다. -G NUM 값. 다른 것으로 컴파일
~의 가치 NUM 작동하거나 작동하지 않을 수 있습니다. 그렇지 않으면 링커에서 오류가 발생합니다.
메시지---잘못된 코드가 생성되지 않습니다.

-m디버그
컴파일러의 M32R 특정 코드가 도움이 될 수 있는 일부 통계를 표시하도록 합니다.
디버깅 프로그램에서.

-악성 루프
모든 루프를 32바이트 경계에 맞춥니다.

-mno-align 루프
루프에 대해 32바이트 정렬을 적용하지 마십시오. 이것이 기본값입니다.

-오류율=번호
발행물 번호 사이클당 지침. 번호 1 또는 2만 가능합니다.

-mbranch 비용=번호
번호 1 또는 2만 될 수 있습니다. 1이면 분기가 선호됩니다.
조건부 코드가 2이면 반대가 적용됩니다.

-mflush-트랩=번호
캐시를 플러시하는 데 사용할 트랩 번호를 지정합니다. 기본값은 12입니다. 유효
숫자는 0에서 15 사이입니다.

-mno-플러시-트랩
트랩을 사용하여 캐시를 플러시할 수 없도록 지정합니다.

-mflush-func=name
캐시를 플러시하기 위해 호출할 운영 체제 함수의 이름을 지정합니다. NS
기본값은 _플러시_캐시하지만 함수 호출은 트랩이 아닌 경우에만 사용됩니다.
사용할 수 있습니다.

-mno-플러시-펑크
캐시 플러시를 위한 OS 기능이 없음을 나타냅니다.

M680x0 옵션

이들은 있습니다 -m M680x0 및 ColdFire 프로세서에 대해 정의된 옵션. 기본 설정
컴파일러를 구성할 때 선택한 아키텍처에 따라 다릅니다. 기본값
가장 일반적인 선택 사항은 아래에 나와 있습니다.

-행진=아치
특정 M680x0 또는 ColdFire 명령어 세트 아키텍처에 대한 코드를 생성합니다.
허용 값 아치 M680x0 아키텍처의 경우: 68000, 68010, 68020, 68030,
68040, 68060CPU32. ColdFire 아키텍처는 Freescale의
ISA 분류 및 허용 값은 다음과 같습니다. 이사야, 이사 플러스, 이사 브이삭.

gcc는 매크로를 정의합니다. __mcf아치__ ColdFire 대상에 대한 코드를 생성할 때마다.
XNUMXD덴탈의 아치 이 매크로에서 -XNUMX 월 위에 주어진 인수.

함께 사용하면, -XNUMX 월-mtune 유사한 제품군에서 실행되는 코드 선택
프로세서이지만 특정 마이크로아키텍처에 최적화되어 있습니다.

-mcpu =CPU
특정 M680x0 또는 ColdFire 프로세서용 코드를 생성합니다. M680x0 CPUs는:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332CPU32. 콜드파이어 CPUs
CPU를 제품군으로 분류하는 아래 표에 나와 있습니다.

가족 : -mcpu 인수
51 : 51 51ac 51센트 51em 51qe
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 SR 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 SR 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 SR 532x
5373 : 5372 5373 SR 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 SR 547x 5480 5481 5482 5483 5484 5485

-mcpu =CPU 재정의 -행진=아치 if 아치 와 호환 CPU. 다른 조합
-mcpu-XNUMX 월 거부됩니다.

gcc는 매크로를 정의합니다. __mcf_cpu_CPU ColdFire 대상이 될 때 CPU 선택됩니다. 또한
정의 __mcf_패밀리_가족, 여기서 값 가족 위의 표에 의해 주어진다.

-mtune=곡조
다음에서 설정한 제약 조건 내에서 특정 마이크로아키텍처에 대한 코드를 조정합니다. -XNUMX 월
-mcpu. M680x0 마이크로아키텍처는 다음과 같습니다. 68000, 68010, 68020, 68030, 68040,
68060CPU32. ColdFire 마이크로아키텍처는 다음과 같습니다. cfv1, cfv2, cfv3, cfv4
cfv4e.

VOUS pouvez의 aussi 사용 -mtune = 68020-40 68020에서 비교적 잘 실행되어야 하는 코드의 경우,
68030 및 68040 대상. -mtune = 68020-60 유사하지만 다음과 같이 68060개의 대상을 포함합니다.
잘. 이 두 옵션은 다음과 동일한 조정 결정을 선택합니다. -m68020-40-m68020-60
각각.

gcc는 매크로를 정의합니다. __mc아치__mc아치__ 680x0 아키텍처에 맞게 조정할 때
아치. 그것은 또한 정의 mc아치 둘 중 하나가 아니라면 -안시 또는 비 GNU -표준 옵션이 사용됩니다.
gcc가 다음에서 선택한 아키텍처 범위에 대해 조정 중인 경우 -mtune = 68020-40 or
-mtune = 68020-60, 범위의 모든 아키텍처에 대한 매크로를 정의합니다.

gcc는 또한 매크로를 정의합니다 __미디엄일찍__ ColdFire 마이크로아키텍처를 튜닝할 때
일찍어디로 일찍 위에 주어진 인수 중 하나입니다.

-m68000
-mc68000
68000에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68000 기반 시스템. 그것은 동등하다 -68000월=XNUMX.

68000을 포함하여 000 또는 EC68008 코어가 있는 마이크로컨트롤러에 이 옵션을 사용합니다.
68302, 68306, 68307, 68322, 68328 및 68356.

-m68010
68010에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68010 기반 시스템. 그것은 동등하다 -68010월=XNUMX.

-m68020
-mc68020
68020에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68020 기반 시스템. 그것은 동등하다 -68020월=XNUMX.

-m68030
68030에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68030 기반 시스템. 그것은 동등하다 -68030월=XNUMX.

-m68040
68040에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68040 기반 시스템. 그것은 동등하다 -68040월=XNUMX.

이 옵션은 다음에 의해 에뮬레이트되어야 하는 68881/68882 명령어의 사용을 금지합니다.
68040의 소프트웨어입니다. 68040에 에뮬레이트할 코드가 없는 경우 이 옵션을 사용하십시오.
그 지시.

-m68060
68060에 대한 출력을 생성합니다. 이것은 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
68060 기반 시스템. 그것은 동등하다 -68060월=XNUMX.

이 옵션은 68020 및 68881/68882 명령어의 사용을 금지합니다.
68060의 소프트웨어에 의해 에뮬레이트됩니다. 68060에 코드가 없는 경우 이 옵션을 사용하십시오.
이러한 지침을 모방합니다.

-mcpu32
CPU32에 대한 출력을 생성합니다. 컴파일러가 다음을 위해 구성된 경우 기본값입니다.
CPU32 기반 시스템. 그것은 동등하다 -32월=cpuXNUMX.

32을 포함하여 CPU32 또는 CPU68330+ 코어가 있는 마이크로컨트롤러에 이 옵션을 사용합니다.
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 및 68360

-m5200
520X ColdFire CPU용 출력을 생성합니다. 컴파일러가 다음과 같은 경우 기본값입니다.
520X 기반 시스템용으로 구성됩니다. 그것은 동등하다 -mcpu=5206, 현재
해당 옵션을 위해 더 이상 사용되지 않습니다.

MCF5200, MCF5202,
MCF5204 및 MCF5206.

-m5206e
5206e ColdFire CPU에 대한 출력을 생성합니다. 이 옵션은 이제 더 이상 사용되지 않습니다.
동등한 -mcpu=5206e.

-m528x
ColdFire 528X 제품군의 구성원에 대한 출력을 생성합니다. 옵션은 지금
동등한 것을 선호하여 더 이상 사용되지 않음 -mcpu=528x.

-m5307
ColdFire 5307 CPU에 대한 출력을 생성합니다. 이 옵션은 이제 더 이상 사용되지 않습니다.
동등한 -mcpu=5307.

-m5407
ColdFire 5407 CPU에 대한 출력을 생성합니다. 이 옵션은 이제 더 이상 사용되지 않습니다.
동등한 -mcpu=5407.

-mcfv4e
ColdFire V4e 제품군 CPU에 대한 출력을 생성합니다(예: 547x/548x). 여기에는 사용이 포함됩니다.
하드웨어 부동 소수점 명령어. 옵션은 다음과 같습니다. -mcpu=547x하고는
이제 그 옵션을 위해 더 이상 사용되지 않습니다.

-m68020-40
새 명령어를 사용하지 않고 68040에 대한 출력을 생성합니다. 이 결과
68020/68881 또는 68030 또는
68040. 생성된 코드는 에뮬레이트된 68881 명령어를 사용합니다.
68040.

옵션은 다음과 같습니다. -68020월=XNUMX -mtune = 68020-40.

-m68020-60
새 명령어를 사용하지 않고 68060에 대한 출력을 생성합니다. 이 결과
68020/68881 또는 68030 또는
68040. 생성된 코드는 에뮬레이트된 68881 명령어를 사용합니다.
68060.

옵션은 다음과 같습니다. -68020월=XNUMX -mtune = 68020-60.

-mhard-float
-m68881
부동 소수점 명령어를 생성합니다. 이것은 68020 이상의 기본값이며,
FPU가 있는 ColdFire 장치의 경우. 매크로를 정의합니다. __HAVE_68881__ M680x0에서
목표와 __mcffpu__ ColdFire 대상에.

-msoft-float
부동 소수점 명령어를 생성하지 마십시오. 대신 라이브러리 호출을 사용하십시오. 이것이
68000, 68010 및 68832 대상에 대한 기본값입니다. ColdFire의 기본값이기도 합니다.
FPU가 없는 장치.

-mdiv
-mno-div
ColdFire 하드웨어 나누기 및 나머지 명령어를 생성합니다(생성하지 않음). 만약에
-XNUMX 월 없이 사용됩니다 -mcpu, 기본값은 ColdFire 아키텍처의 경우 "on"이고 "off"입니다.
M680x0 아키텍처용. 그렇지 않으면 기본값을 대상 CPU에서 가져옵니다(
기본 CPU 또는 다음으로 지정된 CPU -mcpu). 예를 들어 기본값은 "꺼짐"입니다.
for -mcpu=5206 및 "켜기"에 대한 -mcpu=5206e.

gcc는 매크로를 정의합니다. __mcfhwdiv__ 이 옵션이 활성화된 경우.

-m짧은
"int" 유형을 "short int"와 같이 16비트 너비로 간주합니다. 또한 매개변수
스택에 전달된 API는 API가 있는 대상에서도 16비트 경계에 맞춰 정렬됩니다.
32비트로 승격을 요구합니다.

-mno-짧은
"int" 유형을 16비트 너비로 간주하지 마십시오. 이것이 기본값입니다.

-mnobit필드
-mno 비트 필드
비트 필드 명령어를 사용하지 마십시오. NS -m68000, -mcpu32-m5200 옵션 암시
-mnobit필드.

-mbit필드
비트 필드 명령을 사용하십시오. NS -m68020 옵션 의미 -mbit필드. 이것은
68020용으로 설계된 구성을 사용하는 경우 기본값입니다.

-mrtd
고정된 함수를 사용하는 다른 함수 호출 규칙을 사용합니다.
인수를 팝하는 "rtd" 명령과 함께 반환되는 인수의 수
돌아오는 동안. 이것은 필요가 없기 때문에 호출자에게 하나의 명령을 저장합니다.
거기에 인수를 팝니다.

이 호출 규칙은 Unix에서 일반적으로 사용되는 것과 호환되지 않으므로
Unix 컴파일러로 컴파일된 라이브러리를 호출해야 하는 경우 사용할 수 없습니다.

또한 변수를 사용하는 모든 함수에 대해 함수 프로토타입을 제공해야 합니다.
인수의 수("printf" 포함); 그렇지 않으면 잘못된 코드가 생성됩니다
해당 함수에 대한 호출을 위해.

또한 너무 많은 함수를 호출하면 심각하게 잘못된 코드가 생성됩니다.
인수. (일반적으로 추가 인수는 무해하게 무시됩니다.)

"rtd" 명령어는 68010, 68020, 68030, 68040, 68060 및 CPU32에서 지원됩니다.
프로세서, 그러나 68000 또는 5200은 아닙니다.

-mno-rtd
에서 선택한 호출 규칙을 사용하지 마십시오. -mrtd. 이것이 기본값입니다.

-악성-int
-mno-정렬-int
GCC가 "int", "long", "long long", "float", "double" 및 "long"을 정렬할지 여부를 제어합니다.
32비트 경계의 "더블" 변수(-악성-int) 또는 16비트 경계
(-mno-정렬-int). 32비트 경계에 변수를 정렬하면 실행되는 코드가 생성됩니다.
더 많은 메모리를 희생하면서 32비트 버스가 있는 프로세서에서 다소 더 빠릅니다.

경고: 당신이 -악성-int 스위치, GCC는 다음을 포함하는 구조를 정렬합니다.
위의 유형은 대부분의 게시된 애플리케이션 바이너리 인터페이스와 다릅니다.
m68k 사양입니다.

-mprel
전역을 사용하는 대신 68000의 PC 상대 주소 지정 모드를 직접 사용하십시오.
오프셋 테이블. 현재 이 옵션은 다음을 의미합니다. -fpic, 최대 16비트 오프셋 허용
PC 상대 주소 지정용. -fPIC 현재 지원되지 않습니다 -mprel하지만
이것은 68020 이상 프로세서에서 지원될 수 있습니다.

-mno-엄격한 정렬
-mstrict-정렬
정렬되지 않은 메모리 참조가 시스템에서 처리될 것이라고 가정하지 마십시오.

-msep-데이터
데이터 세그먼트가 메모리의 다른 영역에 위치할 수 있도록 하는 코드 생성
텍스트 세그먼트에서. 이것은 환경에서 실행을 허용합니다.
가상 메모리 관리. 이 옵션은 다음을 의미합니다. -fPIC.

-mno-XNUMX월-데이터
데이터 세그먼트가 텍스트 세그먼트를 따른다고 가정하는 코드를 생성하십시오. 이것은
기본값.

-중간 공유 라이브러리
라이브러리 ID 방식을 통해 공유 라이브러리를 지원하는 코드를 생성합니다. 이것은 허용
가상 메모리가 없는 환경에서 제자리 실행 및 공유 라이브러리용
관리. 이 옵션은 다음을 의미합니다. -fPIC.

-mno-id-공유 라이브러리
ID 기반 공유 라이브러리가 사용되고 있다고 가정하지 않는 코드를 생성합니다. 이것은
기본값.

-mshared-library-id=n
컴파일되는 ID 기반 공유 라이브러리의 식별 번호를 지정했습니다.
값을 0으로 지정하면 더 간결한 코드가 생성되고 다른 값을 지정하면
현재 라이브러리에 해당 번호를 강제로 할당하지만 더 이상 공간이 없거나
이 옵션을 생략하는 것보다 시간 효율적입니다.

-mxgot
-mno-xgot
ColdFire용 위치 독립적 코드를 생성할 때 다음과 같은 경우 작동하는 코드를 생성하십시오.
GOT에는 8192개 이상의 항목이 있습니다. 이 코드는 코드보다 크고 느립니다.
이 옵션 없이 생성됩니다. M680x0 프로세서에서는 이 옵션이 필요하지 않습니다. -fPIC
충분합니다.

GCC는 일반적으로 단일 명령어를 사용하여 GOT에서 값을 로드합니다. 이 동안
상대적으로 효율적이며 GOT가 약 64k보다 작은 경우에만 작동합니다. 아무것
크면 링커가 다음과 같은 오류를 보고하도록 합니다.

맞게 잘린 재배치: R_68K_GOT16O foobar

이런 일이 발생하면 다음을 사용하여 코드를 다시 컴파일해야 합니다. -mxgot. 그것은 다음과 함께 작동해야합니다
매우 큰 GOT. 그러나 다음으로 생성된 코드 -mxgot 하기 때문에 효율성이 떨어집니다.
전역 기호의 값을 가져오기 위해 4개의 명령이 필요합니다.

최신 버전의 GNU 링커를 포함한 일부 링커는 다음을 생성할 수 있습니다.
여러 GOT 및 정렬 GOT 항목. 그러한 링커가 있는 경우에만 필요합니다.
사용 -mxgot 8192개 이상의 GOT에 접근하는 단일 오브젝트 파일을 컴파일할 때
항목. 아주 소수만이 할 수 있습니다.

이 옵션은 GCC가 위치 독립적인 코드를 생성하지 않는 한 아무런 효과가 없습니다.

엠코어 옵션

이들은 있습니다 -m Motorola M*Core 프로세서에 대해 정의된 옵션입니다.

-mhardlit
-mno-hardlit
XNUMX개 이하의 명령어로 수행할 수 있는 경우 상수를 코드 스트림에 인라인하십시오.

-mdiv
-mno-div
나누기 명령을 사용합니다. (기본적으로 활성화됨).

-mrelax-즉시
-mno-relax-즉시
비트 연산에서 임의 크기의 즉시를 허용합니다.

-mwide-비트 필드
-mno 와이드 비트 필드
항상 비트 필드를 int 크기로 처리하십시오.

-m4byte-함수
-mno-4byte-함수
모든 기능을 4바이트 경계에 맞춰 정렬합니다.

-mcallgraph-데이터
-mno-callgraph-데이터
callgraph 정보를 내보냅니다.

-mslow-바이트
-mno-느린 바이트
바이트 수량을 읽을 때 워드 액세스를 선호합니다.

-미리틀 엔디안
-mbig-엔디안
리틀 엔디안 대상에 대한 코드를 생성합니다.

-m210
-m340
210 프로세서용 코드를 생성합니다.

-mno-lsim
런타임 지원이 제공되었다고 가정하고 시뮬레이터 라이브러리를 생략하십시오.
(libsim.a) 링커 명령줄에서.

-mstack 증가=크기
단일 스택 증분 작업의 최대량을 설정합니다. 큰 값은
많은 양을 필요로 하는 기능을 포함하는 프로그램의 속도를 높입니다.
스택 공간이지만 스택이 확장되면 분할 오류를 유발할 수도 있습니다.
너무 많은. 기본값은 0x1000입니다.

MeP 옵션

-맙스디프
두 레지스터 간의 절대 차이인 "abs" 명령을 활성화합니다.

-몰 옵션
평균, 곱하기, 나누기, 비트 연산,
선행 XNUMX, 절대 차이, 최소/최대, 클립 및 채도.

-평균
두 레지스터의 평균을 계산하는 "ave" 명령을 활성화합니다.

-m 기반=n
크기 변수 n 바이트 이하의 데이터는 ".based" 섹션에 다음과 같이 배치됩니다.
기본. 기반 변수는 $tp 레지스터를 기본 레지스터로 사용하며
".based" 섹션에 대한 128바이트 제한.

-엠비탑스
비트 작업 명령 활성화 - 비트 테스트("btstm"), 설정("bsetm"), 지우기
("bclrm"), 반전("bnotm") 및 테스트 및 설정("tas").

-MC=name
어떤 섹션 상수 데이터를 배치할지 선택합니다. name "작은", "가까운" 또는
"멀리".

-mclip
"클립" 명령을 활성화합니다. "-mclip"은 다음과 같은 경우가 아니면 유용하지 않습니다.
"-mminmax"를 제공합니다.

-mconfig=name
기본 제공 코어 구성 중 하나를 선택합니다. 각 MeP 칩에는 하나 이상의
그 안에 모듈; 각 모듈에는 코어 CPU와 다양한 보조 프로세서가 있습니다.
지침 및 주변 장치. GCC의 일부가 아닌 "MeP-Integrator" 도구는 다음을 제공합니다.
이 옵션을 통해 이러한 구성; 이 옵션을 사용하는 것은 모든
해당 명령줄 옵션. 기본 구성은 "기본"입니다.

-엠캅
보조 프로세서 명령을 활성화합니다. 기본적으로 이것은 32비트 보조 프로세서입니다. 메모
보조 프로세서는 일반적으로 "-mconfig=" 옵션을 통해 활성화됩니다.

-mcop32
32비트 보조 프로세서의 명령을 활성화합니다.

-mcop64
64비트 보조 프로세서의 명령을 활성화합니다.

-mivc2
IVC2 스케줄링을 활성화합니다. IVC2는 64비트 VLIW 보조 프로세서입니다.

-MDC
상수 변수가 ".near" 섹션에 배치되도록 합니다.

-mdiv
"div" 및 "divu" 명령어를 활성화합니다.

-메브
빅 엔디안 코드를 생성합니다.

-멜
리틀 엔디안 코드를 생성합니다.

-mio-휘발성
"io" 속성으로 표시된 모든 변수가
휘발성으로 간주됩니다.

-ml 기본적으로 변수가 ".far" 섹션에 할당되도록 합니다.

-mleadz
"leadz"(선행 XNUMX) 명령을 활성화합니다.

-mm 변수가 기본적으로 ".near" 섹션에 할당되도록 합니다.

-mminmax
"최소" 및 "최대" 명령을 활성화합니다.

-멀티
곱하기 및 곱하기 누산 명령어를 활성화합니다.

-mno 옵션
"-mall-opts"에 의해 활성화된 모든 선택적 지침을 비활성화합니다.

-mrepeat
낮은 오버헤드 루핑에 사용되는 "반복" 및 "erepeat" 명령을 활성화합니다.

-ms 모든 변수가 ".tiny" 섹션으로 기본 설정되도록 합니다. 있음을 참고하세요
이 섹션에 대한 65536바이트 제한입니다. 이러한 변수에 대한 액세스는 %gp 기반을 사용합니다.
등록하십시오.

-msatur
포화 지침을 활성화합니다. 컴파일러는 현재
자체적으로 생성하지만 이 옵션은 다른 도구와의 호환성을 위해 포함되어 있습니다.
"처럼"처럼.

-msdram
기본 ROM 기반 런타임 대신 SDRAM 기반 런타임을 연결합니다.

-msim
시뮬레이터 런타임 라이브러리를 연결합니다.

-msimnovec
재설정을 위한 내장 지원을 제외하고 시뮬레이터 런타임 라이브러리를 연결하고
예외 벡터 및 테이블.

-MTF
모든 함수가 ".far" 섹션으로 기본 설정되도록 합니다. 이 옵션이 없으면 기능
기본값은 ".near" 섹션입니다.

-최소 =n
변수 n 바이트 이하가 ".tiny" 섹션에 할당됩니다. 이것들
변수는 $gp 기본 레지스터를 사용합니다. 이 옵션의 기본값은 4이지만 주의하십시오.
".tiny" 섹션에는 65536바이트 제한이 있습니다.

마이크로블레이즈 옵션

-msoft-float
부동 소수점에 소프트웨어 에뮬레이션을 사용합니다(기본값).

-mhard-float
하드웨어 부동 소수점 명령어를 사용합니다.

-mmemcpy
블록 이동을 최적화하지 말고 "memcpy"를 사용하십시오.

-mno-clearbss
이 옵션은 더 이상 사용되지 않습니다. 사용하다 -fno-zero-initialized-in-bss 대신.

-mcpu =CPU 유형
주어진 CPU의 기능 및 스케줄 코드를 사용합니다. 지원되는 값은 형식입니다.
vX.YY.Z어디로 X 메이저 버전이며, YY 는 부 버전이고 Z 호환성이다
암호. 예시 값은 v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.

-mxl-소프트-뮬
소프트웨어 곱하기 에뮬레이션을 사용합니다(기본값).

-mxl-소프트-div
분할에 소프트웨어 에뮬레이션을 사용합니다(기본값).

-mxl-배럴 시프트
하드웨어 배럴 시프터를 사용하십시오.

-mxl-패턴-비교
패턴 비교 지침을 사용하십시오.

-m작은 나누기
작은 부호 있는 정수 나누기에 대해 테이블 ​​조회 최적화를 사용합니다.

-mxl-스택 검사
이 옵션은 더 이상 사용되지 않습니다. 대신 -fstack-check를 사용하십시오.

-mxl-gp-opt
GP 상대 sdata/sbss 섹션을 사용합니다.

-mxl-곱하기-높음
32x32 곱셈의 높은 부분에 높은 곱셈 명령어를 사용합니다.

-mxl-플로트 변환
하드웨어 부동 소수점 변환 명령어를 사용하십시오.

-mxl-플로트-sqrt
하드웨어 부동 소수점 제곱근 명령어를 사용합니다.

-mxl-모드-앱 모델
애플리케이션 모델 선택 앱 모델. 유효한 모델은

실행 파일
일반 실행 파일(기본값), 시작 코드 사용 crt0.o.

xmdstub
Xilinx XMD(Microprocessor Debugger) 기반 소프트웨어 침입 디버그와 함께 사용
xmdstub라는 에이전트. 이것은 시작 파일을 사용합니다 crt1.o 시작 주소를 설정합니다.
프로그램은 0x800이 됩니다.

부트 스트랩
부트로더를 사용하여 로드되는 애플리케이션의 경우. 이 모델은 시작 파일을 사용합니다.
crt2.o 프로세서 리셋 벡터 핸들러를 포함하지 않습니다. 이것은 적합하다
프로세서 리셋에 대한 제어를 부트로더가 아닌 부트로더로 이전하기 위해
응용 프로그램.

노벡터
MicroBlaze 벡터가 필요하지 않은 애플리케이션용. 이 옵션
모니터링 응용 프로그램 내에서 실행되는 응용 프로그램에 유용할 수 있습니다. 이 모델
사용 crt3.o 시작 파일로.

선택권 -xl-모드-앱 모델 에 대한 더 이상 사용되지 않는 별칭입니다. -mxl-모드-앱 모델.

MIPS 옵션

-EB 빅 엔디안 코드를 생성합니다.

-엘자 리틀 엔디안 코드를 생성합니다. 에 대한 기본값입니다. 밉스*엘-*-* 구성.

-행진=아치
실행할 코드 생성 아치, 일반 MIPS ISA의 이름일 수 있습니다. 또는
특정 프로세서의 이름. ISA 이름은 다음과 같습니다. 밉스1, 밉스2, 밉스3, 밉스4,
밉스32, 밉스32r2, 밉스64밉스64r2. 프로세서 이름은 다음과 같습니다. 4kc, 4km, 4kp, 4ksc,
4kec, 4켐, 4킵, 4ksd, 5kc, 5 년, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, 룽손2e, 룽손2f, 룽손3a, m4k, 옥테온, 옥테온+, 옥테온2, 오리온,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500xlr. 특별한 가치 프롬아비 가장 호환 가능한 선택
선택한 ABI에 대한 아키텍처(즉, 밉스1 32비트 ABI 및 밉스3 64비트용
ABI).

기본 Linux/GNU 및 IRIX 도구 체인도 값을 지원합니다. 출신, 선택하는
호스트 프로세서를 위한 최상의 아키텍처 옵션입니다. -march = 네이티브 GCC인 경우에는 효과가 없습니다.
프로세서를 인식하지 못합니다.

프로세서 이름에서 최종 000 다음과 같이 축약 될 수 있습니다. k (예 : -행진=r2k).
접두사는 선택 사항이며 vr 쓰여질 수 있습니다 r.

양식의 이름 nf2_1 FPU가 클럭의 절반으로 클럭된 프로세서를 참조하십시오.
핵심, 양식의 이름 nf1_1 동일한 속도로 클럭된 FPU가 있는 프로세서를 참조하십시오.
핵심으로, 형식의 이름 nf3_2 비율로 클럭된 FPU가 있는 프로세서를 참조하십시오.
코어에 대해 3:2의 비율입니다. 호환성을 위해, nf 로 받아들여진다.
동의어 nf2_1 동안 nxbfx 의 동의어로 받아들여집니다. nf1_1.

GCC는 이 옵션의 값에 따라 두 개의 매크로를 정의합니다. 첫 번째는 _MIPS_ARCH,
대상 아키텍처의 이름을 문자열로 제공합니다. 두 번째는 형식이 있습니다.
_MIPS_ARCH_어디로 의 대문자 값입니다. _MIPS_ARCH. 예를 들어,
-2000월=rXNUMX 설정됩니다 _MIPS_ARCH"r2000" 매크로를 정의하고 _MIPS_ARCH_R2000.

참고로 _MIPS_ARCH 매크로는 위에 주어진 프로세서 이름을 사용합니다. 다시 말해,
전체 접두어가 있고 약어가 없습니다. 000 as k. 의 경우 에서-
ABI, 매크로는 확인된 아키텍처의 이름을 지정합니다( "밉스1" or "밉스3"). 그것은 이름
아니오일 때 기본 아키텍처 -XNUMX 월 옵션이 주어집니다.

-mtune=아치
최적화 아치. 무엇보다도 이 옵션은 명령이 실행되는 방식을 제어합니다.
예정된 산술 연산의 인지된 비용. 목록 아치
와 동일하다 -XNUMX 월.

이 옵션을 사용하지 않으면 GCC는 다음에 의해 지정된 프로세서에 대해 최적화됩니다. -XNUMX 월.
사용하여 -XNUMX 월-mtune 함께 실행될 코드를 생성하는 것이 가능합니다.
프로세서 제품군이지만 그 중 하나의 특정 구성원에 대해 코드를 최적화합니다.
가족.

-mtune 매크로 정의 _MIPS_TUNE_MIPS_TUNE_, 와 같은 방식으로 작동합니다.
전에, -XNUMX 월 위에서 설명한 것들.

-밉스1
에 해당 -march=밉스1.

-밉스2
에 해당 -march=밉스2.

-밉스3
에 해당 -march=밉스3.

-밉스4
에 해당 -march=밉스4.

-밉스32
에 해당 -march=밉스32.

-mips32r2
에 해당 -행진=mips32r2.

-밉스64
에 해당 -march=밉스64.

-mips64r2
에 해당 -행진=mips64r2.

-밉스16
-mno-mips16
MIPS16 코드를 생성(생성하지 않음)합니다. GCC가 MIPS32 또는 MIPS64를 대상으로 하는 경우
아키텍처에서 MIPS16e ASE를 사용합니다.

MIPS16 코드 생성은 다음을 통해 기능별로 제어할 수도 있습니다.
"mips16" 및 "nomips16" 속성.

-mflip-mips16
교대 기능에서 MIPS16 코드를 생성합니다. 이 옵션은 회귀용으로 제공됩니다.
혼합 MIPS16/비 MIPS16 코드 생성 테스트, 일반용이 아닙니다.
사용자 코드를 컴파일하는 데 사용합니다.

-minterlink-mips16
-mno-interlink-mips16
MIPS16이 아닌 코드가 MIPS16 코드와 링크 호환되어야 함을 요구합니다(요구하지 않음).

예를 들어, 비 MIPS16 코드는 MIPS16 코드로 직접 점프할 수 없습니다. 다음 중 하나를 사용해야 합니다.
호출 또는 간접 점프. -minterlink-mips16 따라서 직접 점프를 비활성화합니다.
GCC는 점프의 대상이 MIPS16이 아니라는 것을 알고 있습니다.

-마비=32
-마비=o64
-마비=n32
-마비=64
-마비=에비
주어진 ABI에 대한 코드를 생성합니다.

EABI에는 32비트 및 64비트 변형이 있습니다. GCC는 일반적으로 64비트를 생성합니다.
64비트 아키텍처를 선택할 때 코드를 -mgp32 32비트 코드를 얻으려면
대신.

O64 ABI에 대한 정보는 다음을 참조하십시오.http://gcc.gnu.org/projects/mipso64-abi.html>.

GCC는 부동 소수점 레지스터가 32가 아닌 o64 ABI의 변형을 지원합니다.
32비트보다 넓습니다. 다음과 같이 이 조합을 선택할 수 있습니다. -마비=32 -mfp64. 이 ABI
에 의존 mthc1MFHC1 지침이므로 다음에만 지원됩니다.
MIPS32R2 프로세서.

인수 및 반환 값에 대한 레지스터 할당은 동일하게 유지되지만 각각
스칼라 값은 한 쌍의 64비트가 아닌 단일 32비트 레지스터로 전달됩니다.
레지스터. 예를 들어 스칼라 부동 소수점 값은 $f0 만이 아니라
$f0/$f1 쌍. 호출 저장 레지스터 세트도 동일하게 유지되지만 모든 64비트
저장됩니다.

-마비콜
-mno-abicals
SVR4 스타일의 동적 객체에 적합한 코드를 생성(생성하지 않음)합니다.
-마비콜 SVR4 기반 시스템의 기본값입니다.

-m공유
-mno 공유
완전히 위치 독립적인 코드를 생성(생성하지 않음)할 수 있습니다.
따라서 공유 라이브러리에 연결됩니다. 이 옵션은 다음에만 영향을 미칩니다. -마비콜.

All -마비콜 코드는 전통적으로 옵션에 관계없이 위치 독립적이었습니다.
처럼 -fPIC-fpic. 그러나 확장으로서 GNU 툴체인은 실행 파일을 허용합니다.
로컬 바인딩 기호에 대한 절대 액세스를 사용합니다. 더 짧은 GP를 사용할 수도 있습니다.
초기화 시퀀스를 생성하고 로컬로 정의된 함수에 대한 직접 호출을 생성합니다. 이것
모드는 에 의해 선택됩니다. -mno 공유.

-mno 공유 binutils 2.16 이상에 의존하며 다음과 같은 객체만 생성합니다.
GNU 링커에 의해 연결됩니다. 그러나 옵션은 최종 ABI에 영향을 미치지 않습니다.
실행 가능; 재배치 가능한 개체의 ABI에만 영향을 줍니다. 사용 -mno 공유 의지
일반적으로 실행 파일을 더 작고 빠르게 만듭니다.

-m공유 기본값입니다.

-MPLT
-mno-plt
정적 및 동적 링커가 PLT 및 복사를 지원한다고 가정(가정하지 않음)
재배치. 이 옵션은 다음에만 영향을 미칩니다. -mno 공유 -마비콜. n64 ABI의 경우 이
옵션이 없으면 효과가 없습니다. -msym32.

당신은 할 수 있습니다 -MPLT GCC를 구성하여 기본값 --mips-plt 포함. 기본값
is -mno-plt 그렇지 않으면.

-mxgot
-mno-xgot
전역 오프셋 테이블의 크기에 대한 일반적인 제한을 들어 올립니다(들어 올리지 않음).

GCC는 일반적으로 단일 명령어를 사용하여 GOT에서 값을 로드합니다. 이 동안
상대적으로 효율적이며 GOT가 약 64k보다 작은 경우에만 작동합니다.
더 크면 링커가 다음과 같은 오류를 보고하게 됩니다.

맞게 잘린 재배치: R_MIPS_GOT16 foobar

이런 일이 발생하면 다음을 사용하여 코드를 다시 컴파일해야 합니다. -mxgot. 그것은 다음과 함께 작동해야합니다
매우 큰 GOT, 비록 XNUMX개의 시간이 걸리기 때문에 덜 효율적이겠지만
전역 기호의 값을 가져오는 명령.

일부 링커는 여러 GOT를 생성할 수 있습니다. 이러한 링커가 있는 경우
만 사용해야합니다 -mxgot 단일 개체 파일이 64k 이상의 파일에 액세스할 때
GOT 항목의 가치. 아주 소수만이 할 수 있습니다.

이러한 옵션은 GCC가 위치 독립 코드를 생성하지 않는 한 아무 효과가 없습니다.

-mgp32
범용 레지스터의 너비가 32비트라고 가정합니다.

-mgp64
범용 레지스터의 너비가 64비트라고 가정합니다.

-mfp32
부동 소수점 레지스터의 너비가 32비트라고 가정합니다.

-mfp64
부동 소수점 레지스터의 너비가 64비트라고 가정합니다.

-mhard-float
부동 소수점 보조 프로세서 명령어를 사용합니다.

-msoft-float
부동 소수점 보조 프로세서 명령어를 사용하지 마십시오. 부동 소수점 구현
대신 라이브러리 호출을 사용하여 계산합니다.

-msingle-float
부동 소수점 보조 프로세서가 단정밀도 연산만 지원한다고 가정합니다.

-m더블 플로트
부동 소수점 보조 프로세서가 배정밀도 연산을 지원한다고 가정합니다. 이것
기본값입니다.

-mllsc
-mno-llsc
사용(사용하지 않음) ll, sc동기화 원자 메모리 내장 구현 지침
기능. 두 옵션이 모두 지정되지 않은 경우 GCC는 다음과 같은 경우 지침을 사용합니다.
대상 아키텍처가 이를 지원합니다.

-mllsc 런타임 환경이 지침을 에뮬레이트할 수 있고 -mno-llsc
비표준 ISA용으로 컴파일할 때 유용할 수 있습니다. 두 옵션 중 하나를 만들 수 있습니다.
기본적으로 GCC를 구성하여 ---llsc 포함--llsc 없이 각각.
---llsc 포함 일부 구성의 기본값입니다. 설치 문서 참조
자세한 내용은.

-mdsp
-mno-dsp
MIPS DSP ASE의 개정판 1을 사용(사용하지 마십시오).
이 옵션은 전처리기 매크로를 정의합니다. __mips_dsp. 그것은 또한 정의
__mips_dsp_rev 1합니다.

-MDSPR2
-mno-dspr2
MIPS DSP ASE의 개정판 2을 사용(사용하지 마십시오).
이 옵션은 전처리기 매크로를 정의합니다. __mips_dsp__mips_dspr2. 그것은 또한
정의 __mips_dsp_rev 2합니다.

-msmartmips
-mno-smartmips
MIPS SmartMIPS ASE를 사용(사용하지 마십시오).

-mpaired-단일
-mno 쌍 단일
쌍을 이루는 단일 부동 소수점 명령어를 사용합니다(사용하지 않음).
이 옵션을 사용하려면 하드웨어 부동 소수점 지원이 활성화되어야 합니다.

-mdmx
-mno-mdmx
MIPS 디지털 미디어 확장 지침을 사용합니다(사용하지 않음). 이 옵션은
64비트 코드를 생성할 때 사용되며 하드웨어 부동 소수점 지원이 필요합니다.
사용하도록 설정되었습니다.

-mips3d
-mno-mips3d
MIPS-3D ASE를 사용하십시오(사용하지 마십시오). 옵션 -mips3d 의미하다 -mpaired-단일.

-mmt
-mno-mt
MT 멀티스레딩 명령어를 사용합니다(사용하지 않음).

-mlong64
"긴" 유형을 64비트 너비로 강제 설정합니다. 보다 -mlong32 기본값에 대한 설명
포인터 크기가 결정되는 방식.

-mlong32
"long", "int" 및 포인터 유형을 32비트 너비로 강제 설정합니다.

"int", "long" 및 포인터의 기본 크기는 ABI에 따라 다릅니다. 모든
지원되는 ABI는 32비트 "int"를 사용합니다. n64 ABI는 64비트와 마찬가지로 64비트 "long"을 사용합니다.
에비; 나머지는 32비트 "long"을 사용합니다. 포인터는 "long"과 크기가 같거나
정수 레지스터와 같은 크기 중 더 작은 것.

-msym32
-mno-sym32
선택한 기호에 관계없이 모든 기호에 32비트 값이 있다고 가정(가정하지 않음)
아비. 이 옵션은 다음과 함께 사용하면 유용합니다. -마비=64-mno-abicals 때문에
GCC는 기호 주소에 대한 더 짧고 빠른 참조를 생성할 수 있습니다.

-G NUM
데이터가 없는 경우 외부에서 볼 수 있는 데이터의 정의를 작은 데이터 섹션에 넣습니다.
보다 큰 NUM 바이트. 그러면 GCC는 데이터에 더 효율적으로 액세스할 수 있습니다. 보다 -mgpopt for
세부.

기본값은 -G 옵션은 구성에 따라 다릅니다.

-mlocal-sdata
-mno-로컬-sdata
연장(연장하지 않음) -G 정적 변수와 같은 로컬 데이터에도 동작
C. -mlocal-sdata 모든 구성의 기본값입니다.

링커가 응용 프로그램이 너무 많은 작은 데이터를 사용하고 있다고 불평하는 경우
성능에 덜 중요한 부품을 -mno-로컬-sdata. 당신
로 큰 라이브러리를 구축할 수도 있습니다. -mno-로컬-sdata, 그래서 라이브러리는
메인 프로그램을 위한 더 많은 공간을 남겨두십시오.

-mextern-sdata
-mno-외부-sdata
다음과 같은 경우 외부 정의 데이터가 작은 데이터 섹션에 있다고 가정(가정하지 않음)
그 데이터는 -G 한도. -mextern-sdata 모두의 기본값입니다
구성.

모듈을 컴파일하면 방법-mextern-sdata -G NUM -mgpopt방법 참조
변수 바르 그보다 크지 않다 NUM 다음을 확인해야 합니다. 바르 배치되다
작은 데이터 섹션에서. 만약에 바르 다른 모듈에 의해 정의된 경우 다음 중 하나를 컴파일해야 합니다.
충분히 높은 모듈 -G "섹션" 속성 설정 또는 첨부 바르's
정의. 만약에 바르 일반적이므로 응용 프로그램을 충분히 높은 -G
환경.

이러한 제한 사항을 충족하는 가장 쉬운 방법은 모든 모듈을 컴파일하고 연결하는 것입니다.
같은과 -G 옵션. 그러나 다음을 지원하는 라이브러리를 구축할 수 있습니다.
여러 다른 작은 데이터 제한. 라이브러리를 컴파일하여 이 작업을 수행할 수 있습니다.
가장 높은 지원 -G 설정 및 추가 사용 -mno-외부-sdata 중지하려면
라이브러리는 외부 정의 데이터에 대해 가정하지 않습니다.

-mgpopt
-mno-gpopt
작은 데이터에 있는 것으로 알려진 기호에 대해 GP 관련 액세스 사용(사용하지 않음)
부분; 보다 -G, -mlocal-sdata-mextern-sdata. -mgpopt 모두의 기본값입니다
구성.

-mno-gpopt $gp 레지스터가 다음 값을 보유하지 않을 수 있는 경우에 유용합니다.
"_gp". 예를 들어 코드가 부팅에 사용될 수 있는 라이브러리의 일부인 경우
모니터에서 부트 모니터 루틴을 호출하는 프로그램은 $gp에 알 수 없는 값을 전달합니다.
(이러한 상황에서 부트 모니터 자체는 일반적으로 다음과 같이 컴파일됩니다. -G0.)

-mno-gpopt 의미하다 -mno-로컬-sdata-mno-외부-sdata.

-포함된 데이터
-mno-embedded-데이터
가능한 경우 먼저 읽기 전용 데이터 섹션에 변수를 할당한 다음
가능하면 작은 데이터 섹션, 그렇지 않으면 데이터에서. 이것은 약간 느린 코드를 제공합니다
기본값보다 크지만 실행할 때 필요한 RAM의 양이 줄어들므로
일부 임베디드 시스템에서 선호됩니다.

-muninit-const-in-rodata
-mno-unit-const-in-rodata
읽기 전용 데이터 섹션에 초기화되지 않은 "const" 변수를 넣습니다. 이 옵션은
와 함께만 의미 있는 -포함된 데이터.

-mcode 판독 가능=설정
GCC가 실행 가능한 섹션에서 읽는 코드를 생성할 수 있는지 여부를 지정합니다. 있다
세 가지 가능한 설정:

-mcode-readable=예
지침은 실행 가능한 섹션에 자유롭게 액세스할 수 있습니다. 이것이 기본 설정입니다.

-mcode-판독 가능=pcrel
MIPS16 PC 기준 로드 명령은 실행 가능한 섹션에 액세스할 수 있지만 다른
지시는 그렇게 해서는 안 됩니다. 이 옵션은 4KSc 및 4KSd 프로세서에서 유용합니다.
코드 TLB에 읽기 금지 비트가 설정되어 있을 때. 프로세서에서도 유용합니다.
이중 명령/데이터 SRAM 인터페이스를 갖도록 구성할 수 있으며,
M4K와 마찬가지로 PC 관련 로드를 명령 RAM으로 자동 리디렉션합니다.

-mcode 판독 가능=아니요
지침은 실행 가능한 섹션에 액세스해서는 안 됩니다. 이 옵션은 다음에서 유용할 수 있습니다.
이중 명령/데이터 SRAM 인터페이스를 갖도록 구성된 대상이지만
(M4K와 달리) PC 관련 부하를 자동으로 리디렉션하지 않습니다.
명령어 램.

-msplit 주소
-mno-분할 주소
"%hi()" 및 "%lo()" 어셈블러 재배치 연산자의 사용을 활성화(비활성화)합니다. 이것
옵션이 다음으로 대체되었습니다. -mexplicit-relocs 그러나 뒤로 유지됩니다.
호환성.

-mexplicit-relocs
-mno-명시적-relocs
기호 주소를 처리할 때 어셈블러 재배치 연산자를 사용합니다(사용하지 않음).
에서 선택한 대안 -mno-명시적-relocs, 대신 어셈블러 매크로를 사용하는 것입니다.

-mexplicit-relocs GCC가 다음을 수행하는 어셈블러를 사용하도록 구성된 경우 기본값입니다.
재배치 연산자를 지원합니다.

-mcheck-XNUMX 나눗셈
-mno-check-zero-division
XNUMX으로 정수 나누기를 트랩(트랩하지 않음)합니다.

디폴트는 -mcheck-XNUMX 나눗셈.

-mdivide-트랩
-mdivide-break
MIPS 시스템은 조건부 트랩 또는
휴식 지시. 트랩을 사용하면 코드가 작아지지만 MIPS에서만 지원됩니다.
II 이후. 또한 일부 Linux 커널 버전에는 트랩을 방지하는 버그가 있습니다.
적절한 신호("SIGFPE")를 생성하지 않습니다. 사용하다 -mdivide-트랩 조건부 허용
이를 지원하는 아키텍처의 함정과 -mdivide-break 강제로 사용
휴식.

기본값은 일반적으로 -mdivide-트랩, 그러나 이것은 구성할 때 재정의될 수 있습니다.
사용 --with-divide=나누기. 다음을 사용하여 XNUMX으로 나누기 검사를 완전히 비활성화할 수 있습니다.
-mno-check-zero-division.

-mmemcpy
-mno-memcpy
중요하지 않은 블록 이동에 "memcpy()"를 강제로 사용합니다(강제하지 않음). 기본값
is -mno-memcpy, 이를 통해 GCC는 대부분의 일정한 크기의 복사본을 인라인할 수 있습니다.

-mlong-통화
-mno-long-통화
"jal" 명령어 사용을 비활성화(비활성화하지 않음)합니다. "jal"을 사용하여 함수 호출
더 효율적이지만 호출자와 수신자가 동일한 256MB에 있어야 합니다.
세그먼트.

이 옵션은 abcalls 코드에 영향을 주지 않습니다. 기본값은 -mno-long-통화.

-mmad
-mno-mad
"mad", "madu" 및 "mul" 명령어의 사용을 활성화(비활성화)합니다.
R4650 이사.

-머퓨즈드-매드
-mno-융합-매드
부동 소수점 곱하기 누산 명령어의 사용을 활성화(비활성화)합니다.
사용할 수 있습니다. 기본값은 -머퓨즈드-매드.

곱하기 누산 명령어를 사용하면 중간 곱이 계산됩니다.
무한정 정밀도로 FCSR Flush to Zero 비트의 영향을 받지 않습니다. 이것은 수 있습니다
어떤 상황에서는 바람직하지 않습니다.

-nocpp
사용자 어셈블러 파일에 대해 전처리기를 실행하지 않도록 MIPS 어셈블러에 지시합니다(
.s 접미사) 조립할 때.

-mfix-24k
-mno-fix-24k
24K E48(충전 중 매장 데이터 손실) 오류를 해결하십시오. 해결 방법
GCC가 아닌 어셈블러에 의해 구현됩니다.

-mfix-r4000
-mno-fix-r4000
특정 R4000 CPU 에라타 해결:

- 더블 워드 또는 변수 시프트를 실행하면 잘못된 결과가 나타날 수 있습니다.
정수 나누기를 시작한 직후.

- 더블 워드 또는 변수 시프트는 실행하는 동안 잘못된 결과를 줄 수 있습니다.
정수 곱셈이 진행 중입니다.

- 정수 나누기는 의 지연 슬롯에서 시작하면 잘못된 결과를 줄 수 있습니다.
취한 지점 또는 점프.

-mfix-r4400
-mno-fix-r4400
특정 R4400 CPU 에라타 해결:

- 더블 워드 또는 변수 시프트를 실행하면 잘못된 결과가 나타날 수 있습니다.
정수 나누기를 시작한 직후.

-mfix-r10000
-mno-fix-r10000
특정 R10000 에라타 해결:

- "ll"/"sc" 시퀀스는 3.0 이전 버전에서 원자적으로 작동하지 않을 수 있습니다. 그들은 아마도
개정판 2.6 및 이전 버전에서 교착 상태가 발생했습니다.

이 옵션은 대상 아키텍처가 분기 가능성을 지원하는 경우에만 사용할 수 있습니다.
도움말을 참조하십시오. -mfix-r10000 기본값은 다음과 같습니다. -10000월=rXNUMX 사용; -mno-fix-r10000
그렇지 않으면 기본값입니다.

-mfix-vr4120
-mno-fix-vr4120
특정 VR4120 정오표 해결:

- "dmultu"가 항상 올바른 결과를 생성하는 것은 아닙니다.

- "div" 및 "ddiv"는 피연산자 중 하나가
부정적이다.

분할 정오표에 대한 해결 방법은 다음의 특수 기능에 의존합니다. libgcc.a. 에
현재 이러한 기능은 "mips64vr*-elf" 구성에서만 제공됩니다.

다른 VR4120 정오표에는 특정 쌍 사이에 nop를 삽입해야 합니다.
지침. 이러한 정오표는 GCC 자체가 아니라 어셈블러에서 처리합니다.

-mfix-vr4130
VR4130 "mflo"/"mfhi" 오류를 해결하십시오. 해결 방법은
GCC가 아닌 어셈블러이지만 GCC는 다음과 같은 경우 "mflo" 및 "mfhi"를 사용하지 않습니다.
VR4130 "macc", "macchi", "dmacc" 및 "dmacchi" 명령어를 대신 사용할 수 있습니다.

-mfix-sb1
-mno-fix-sb1
특정 SB-1 CPU 코어 오류를 해결하십시오. (이 플래그는 현재 SB-1 주변에서 작동합니다.
개정 2 "F1" 및 "F2" 부동 소수점 정오표.)

-mr10k-캐시-배리어=설정
GCC가 다음의 부작용을 피하기 위해 캐시 장벽을 삽입해야 하는지 여부를 지정합니다.
R10K 프로세서에 대한 추측.

많은 프로세서와 마찬가지로 R10K는 조건부 결과를 예측하려고 시도합니다.
분기하고 추측적으로 "취한" 분기의 명령을 실행합니다. 나중에
예측된 결과가 잘못된 경우 이러한 명령을 중단합니다. 그러나 R10K에서는
중단된 명령에도 부작용이 있을 수 있습니다.

이 문제는 커널 저장소에만 영향을 미치며 시스템에 따라 커널 로드에 영향을 줍니다.
예를 들어, 투기적으로 실행된 저장소는 대상 메모리를 캐시에 로드할 수 있습니다.
저장소 자체가 나중에 중단되더라도 캐시 라인을 더티로 표시합니다. DMA라면
작업은 "더티" 라인이 플러시되기 전에 동일한 메모리 영역에 기록합니다.
캐시된 데이터는 DMA 기반 데이터를 덮어씁니다. 전체 내용은 R10K 프로세서 설명서를 참조하십시오.
다른 잠재적인 문제를 포함한 설명.

한 가지 해결 방법은 모든 메모리 액세스 전에 캐시 배리어 명령을 삽입하는 것입니다.
투기적으로 실행될 수 있으며 중단되더라도 부작용이 있을 수 있습니다.
-mr10k-캐시-배리어=설정 이 해결 방법의 GCC 구현을 제어합니다. 그것
다음 영역의 모든 바이트에 대한 중단된 액세스에는 측면이 없다고 가정합니다.
효과 :

1. 현재 함수의 스택 프레임이 차지하는 메모리

2. 들어오는 스택 인수가 차지하는 메모리;

3. 링크 시간 상수 주소를 가진 객체가 차지하는 메모리.

이러한 영역에 대한 추측적 액세스를 보장하는 것은 커널의 책임입니다.
실제로 안전합니다.

입력 프로그램에 다음과 같은 함수 선언이 포함된 경우:

무효 foo(무효);

그런 다음 "foo"의 구현은 "j foo" 및 "jal foo"가 실행되도록 허용해야 합니다.
추측으로. GCC는 자체 컴파일하는 함수에 대해 이 제한을 준수합니다. 그것
GCC가 아닌 함수(예: 손으로 작성한 어셈블리 코드)도 동일한 작업을 수행할 것으로 예상합니다.

옵션에는 세 가지 형식이 있습니다.

-mr10k-cache-barrier=로드-스토어
추측에 따라 실행될 수 있는 로드 또는 저장 앞에 캐시 장벽을 삽입합니다.
중단하더라도 부작용이 있을 수 있습니다.

-mr10k-cache-barrier=저장
투기적으로 실행될 수 있는 저장소 앞에 캐시 장벽을 삽입하고
중단하더라도 부작용이 있을 수 있습니다.

-mr10k-cache-barrier=없음
캐시 배리어 삽입을 비활성화합니다. 이것이 기본 설정입니다.

-mflush-func=펑크
-mno-플러시-펑크
I 및 D 캐시를 플러시하거나 이러한 캐시를 호출하지 않도록 호출할 함수를 지정합니다.
기능. 호출되는 경우 함수는 공통 인수와 동일한 인수를 취해야 합니다.
"_flush_func()", 즉 캐시가 저장되는 메모리 범위의 주소입니다.
flushed, 메모리 범위의 크기, 숫자 3(두 캐시를 모두 플러시하기 위해). NS
기본값은 대상 GCC가 구성된 대상에 따라 다르지만 일반적으로 다음 중 하나입니다.
_플러시_펑크 or __cpu_플러시.

mbranch 비용 =NUM
분기 비용을 대략적으로 설정 NUM "간단한" 지침. 이 비용은 단지
발견적이며 릴리스 간에 일관된 결과를 생성한다고 보장되지 않습니다. 제로
비용은 중복으로 기본값을 선택합니다. -mtune 환경.

-mbranch 가능성이 있는
-mno-branch-like
기본값에 관계없이 분기 가능성이 있는 명령어의 사용을 활성화 또는 비활성화합니다.
선택한 아키텍처. 기본적으로 다음과 같은 경우 분기 가능성 지침이 생성될 수 있습니다.
선택한 아키텍처에서 지원됩니다. MIPS32 및
MIPS64 아키텍처 및 이러한 아키텍처를 구현하는 프로세서 그들을 위해,
MIPS32 및
MIPS64 아키텍처는 특히 사용을 권장하지 않습니다.

-mfp-예외
-mno-fp-예외
FP 예외가 사용 가능한지 여부를 지정합니다. 이것은 우리가 FP를 예약하는 방법에 영향을 미칩니다.
일부 프로세서에 대한 지침. 기본값은 FP 예외가 활성화된 것입니다.

예를 들어, SB-1에서 FP 예외가 비활성화되고 64비트
코드를 입력하면 두 FP 파이프를 모두 사용할 수 있습니다. 그렇지 않으면 하나의 FP 파이프만 사용할 수 있습니다.

-mvr4130-정렬
-mno-vr4130-정렬
VR4130 파이프라인은 양방향 슈퍼스칼라이지만 두 개의 명령어만 발행할 수 있습니다.
첫 번째 것이 8바이트로 정렬된 경우 함께. 이 옵션이 활성화되면 GCC는
병렬로 실행되어야 한다고 생각하는 명령어 쌍을 정렬합니다.

이 옵션은 VR4130에 최적화할 때만 효과가 있습니다. 일반적으로 코드를 만듭니다.
더 빠르지만 더 크게 만드는 대가를 치러야 합니다. 기본적으로 활성화되어 있습니다.
최적화 수준 -O3.

-msynci
-mno-synci
지원하는 아키텍처에서 "synci" 명령어 생성을 활성화(비활성화)합니다.
"synci" 명령(활성화된 경우)은 다음과 같은 경우에 생성됩니다.
"__builtin__clear_cache()"가 컴파일됩니다.

이 옵션의 기본값은 "-mno-synci"이지만 기본값은 다음을 구성하여 무시할 수 있습니다.
"--with-synci"로.

단일 프로세서 시스템용 코드를 컴파일할 때 일반적으로 "synci"를 사용하는 것이 안전합니다.
그러나 많은 다중 코어(SMP) 시스템에서 명령을 무효화하지 않습니다.
모든 코어에 캐시되어 정의되지 않은 동작이 발생할 수 있습니다.

-mrelax-픽-콜
-mno-relax-pic-calls
일반적으로 $25 레지스터를 통해 전달되는 PIC 호출을 직접 호출로 전환하십시오.
이는 링커가 링크 타임에 대상을 확인할 수 있고 다음과 같은 경우에만 가능합니다.
대상이 직접 호출 범위 내에 있습니다.

-mrelax-픽-콜 GCC가 어셈블러와
".reloc" 어셈블리 지시문과 "-mexplicit-relocs"를 지원하는 링커는
효과. "-mno-explicit-relocs"를 사용하여 이 최적화를 수행할 수 있습니다.
컴파일러의 도움 없이 어셈블러와 링커만 사용할 수 있습니다.

-mmcount-ra-주소
-mno-mcount-ra-주소
"_mcount"가 호출 함수의 반환을 수정할 수 있도록 하는 코드를 내보냅니다(내보내지 않음).
주소. 활성화되면 이 옵션은 새 인터페이스로 일반적인 "_mcount" 인터페이스를 확장합니다.
주소 "intptr_t *" 유형이 있고 레지스터 $12에 전달되는 매개변수입니다.
"_mcount"는 다음을 모두 수행하여 반환 주소를 수정할 수 있습니다.

· 레지스터 $31에 새 주소 반환.

· 새 주소를 "*에 저장주소"만약 주소 null이 아닙니다.

디폴트는 -mno-mcount-ra-주소.

엠믹스 옵션

이러한 옵션은 MMIX에 대해 정의됩니다.

-mlibfuncs
-mno-libfuncs
내장 라이브러리 함수가 컴파일 중임을 지정하고 모든 값을
크기에 관계없이 레지스터.

-멤실론
-mno-엡실론
"rE"와 관련하여 비교하는 부동 소수점 비교 명령어 생성
엡실론 레지스터.

-마비=mmixware
-마비=누
함수 매개변수를 전달하는 코드를 생성하고 (호출된
함수)는 전역 레지스터를 사용하는 GNU ABI와 달리 $0 이상의 레지스터로 간주됩니다.
$231 이상을 등록합니다.

-mzero 확장
-mno-제로 확장
64비트보다 짧은 크기의 메모리에서 데이터를 읽을 때 XNUMX을 사용(사용하지 않음)
부호 확장이 아닌 기본적으로 로드 명령을 확장합니다.

-mknuthdiv
-mno-knuthdiv
나머지를 산출하는 나눗셈의 결과가 제수와 같은 부호를 갖도록 합니다.
기본값으로, -mno-knuthdiv, 나머지 기호는 다음 기호를 따릅니다.
피제수. 두 방법 모두 산술적으로 유효하며 후자는 거의 독점적입니다.
익숙한.

-mtoplevel-심볼
-mno-toplevel-기호
앞에 추가(앞에 추가하지 않음) : 어셈블리 코드를 사용할 수 있도록 모든 전역 기호에
"PREFIX" 어셈블리 지시문을 사용합니다.

-멜프
기본값이 아닌 ELF 형식으로 실행 파일 생성 mmo 에서 사용하는 형식
전에, 믹스 모의 실험 장치.

-mbranch 예측
-mno-분기-예측
정적 분기 예측 시 가능한 분기 명령어를 사용(사용하지 않음)
가능한 분기를 나타냅니다.

-mbase 주소
-mno-base-주소
다음을 사용하는 코드 생성(생성하지 않음) 기지 구애. 기본 주소 사용
자동으로 요청(어셈블러와 링커에서 처리)을 생성합니다.
전역 레지스터에 설정할 상수입니다. 레지스터는 하나 이상의 베이스에 사용됩니다.
레지스터에 있는 값에서 0에서 255 사이의 주소 요청. NS
일반적으로 짧고 빠른 코드로 이어지지만,
제한적으로 처리할 수 있습니다. 이것은 많은 정적 데이터를 사용하는 프로그램을 의미합니다.
필요할 수 있습니다 -mno-base-주소.

-ms단일 종료
-mno-단일 종료
생성된 코드가 각 함수에 단일 종료 지점을 갖도록 강제(강제하지 않음)합니다.

MN10300 옵션

Bowman의 -m 옵션은 Matsushita MN10300 아키텍처에 대해 정의됩니다.

- 복합 버그
MN10300 프로세서에 대한 곱셈 명령어의 버그를 방지하기 위해 코드를 생성합니다.
이것이 기본값입니다.

-mno-multi-bug
MN10300에 대한 곱하기 명령어의 버그를 피하기 위해 코드를 생성하지 마십시오.
프로세서.

-mam33
AM33 프로세서에 특정한 기능을 사용하여 코드를 생성합니다.

-mno-am33
AM33 프로세서에 특정한 기능을 사용하여 코드를 생성하지 마십시오. 이것이
태만.

-mam33-2
AM33/2.0 프로세서에 특정한 기능을 사용하여 코드를 생성합니다.

-mam34
AM34 프로세서에 특정한 기능을 사용하여 코드를 생성합니다.

-mtune=CPU 유형
명령을 스케줄링할 때 표시된 CPU 유형의 타이밍 특성을 사용하십시오.
대상 프로세서 유형은 변경되지 않습니다. CPU 유형은 다음 중 하나여야 합니다.
mn10300, am33, 오전33-2 or am34.

-mreturn-포인터-on-d0
포인터를 반환하는 함수를 생성할 때 "a0"과 "aXNUMX" 모두에 포인터를 반환합니다.
"d0". 그렇지 않으면 포인터는 0에서만 반환되고 그러한 호출을 시도합니다.
프로토타입이 없는 함수는 오류가 발생합니다. 이 옵션은
기본; 사용하다 -mno-return-pointer-on-d0 그것을 해제하십시오.

-mno-crt0
C 런타임 초기화 개체 파일에 연결하지 마십시오.

-mrelax
이완 최적화 전달을 수행해야 함을 링커에 표시합니다.
분기, 호출 및 절대 메모리 주소를 줄입니다. 이 옵션은 효과만 있습니다
최종 링크 단계의 명령줄에서 사용되는 경우.

이 옵션은 심볼릭 디버깅을 불가능하게 만듭니다.

-밀리
컴파일러가 생성하도록 허용 교수 워드 대상이 다음과 같은 경우 지침
AM33 또는 나중에. 이것이 기본값입니다. 이 옵션은 전처리기 매크로를 정의합니다.
__LIW__.

-mnoliw
컴파일러가 생성하도록 허용하지 않음 교수 워드 지침. 이 옵션
전처리기 매크로 정의 __NO_LIW__.

-msetlb
컴파일러가 SETLBLCC 대상이 다음과 같은 경우 지침
AM33 또는 나중에. 이것이 기본값입니다. 이 옵션은 전처리기 매크로를 정의합니다.
__SETLB__.

-mnosetlb
컴파일러가 생성하도록 허용하지 않음 SETLB or LCC 지침. 이 옵션은 다음을 정의합니다.
전처리기 매크로 __NO_SETLB__.

PDP-11 옵션

다음 옵션은 PDP-11에 대해 정의됩니다.

-mfpu
하드웨어 FPP 부동 소수점을 사용합니다. 이것이 기본값입니다. (FIS 부동 소수점
PDP-11/40은 지원하지 않습니다.)

-msoft-float
하드웨어 부동 소수점을 사용하지 마십시오.

-mac0
부동 소수점 결과를 ac0(Unix 어셈블러 구문의 fr0)으로 반환합니다.

-mno-ac0
메모리에 부동 소수점 결과를 반환합니다. 이것이 기본값입니다.

-m40
PDP-11/40용 코드를 생성합니다.

-m45
PDP-11/45용 코드를 생성합니다. 이것이 기본값입니다.

-m10
PDP-11/10용 코드를 생성합니다.

-mbcopy 내장
메모리 복사에 인라인 "movmemhi" 패턴을 사용합니다. 이것이 기본값입니다.

-mbcopy
메모리 복사에 인라인 "movmemhi" 패턴을 사용하지 마십시오.

-민트16
-mno-int32
16비트 "int"를 사용합니다. 이것이 기본값입니다.

-민트32
-mno-int16
32비트 "int"를 사용합니다.

-mfloat64
-mno-float32
64비트 "부동"을 사용합니다. 이것이 기본값입니다.

-mfloat32
-mno-float64
32비트 "부동"을 사용합니다.

-맛시
"abshi2" 패턴을 사용합니다. 이것이 기본값입니다.

-mno-abshi
"abshi2" 패턴을 사용하지 마십시오.

-mbranch-비싼
가지가 비싼 척하십시오. 이것은 코드 생성을 실험하기 위한 것입니다.
로 작성되어야 합니다.

-mbranch-저렴한
가지가 비싼 척하지 마십시오. 이것이 기본값입니다.

-munix-asm
Unix 어셈블러 구문을 사용합니다. 에 대해 구성된 경우 기본값입니다. pdp11-*-bsd.

-mdec-asm
DEC 어셈블러 구문을 사용합니다. 이것은 모든 PDP-11 대상에 대해 구성된 경우 기본값입니다.
이외의 pdp11-*-bsd.

피코칩 옵션

Bowman의 -m 옵션은 PicoChip 구현에 대해 정의됩니다.

-매=ae_type
어레이에 대한 명령어 세트, 레지스터 세트 및 명령어 스케줄링 매개변수 설정
요소 유형 ae_type. 지원되는 값 ae_type are 이 중 하나를 이용하세요, MUL.

-매=ANY 완전히 일반적인 AE 유형을 선택합니다. 이 옵션으로 생성된 코드는
다른 AE 유형에서 실행하십시오. 코드는 다음과 같이 효율적이지 않을 것입니다.
특정 AE 유형 및 일부 유형의 연산(예: 곱셈)에 대해 컴파일됨
모든 유형의 AE에서 제대로 작동하지 않습니다.

-매=MUL MUL AE 유형을 선택합니다. 이것은 컴파일된 코드에 가장 유용한 AE 유형입니다.
및 기본값입니다.

-매=맥 DSP 스타일의 MAC AE를 선택합니다. 이 옵션으로 컴파일된 코드는 다음과 같은 문제를 겪을 수 있습니다.
DSP AE가 제공하지 않기 때문에 바이트(char) 조작의 열악한 성능
바이트 로드/저장에 대한 하드웨어 지원.

-msymbol-주소
컴파일러가 로드/저장에서 주소로 기호 이름을 직접 사용할 수 있도록 합니다.
레지스터에 먼저 로드하지 않고 명령. 일반적으로 이 사용
옵션은 옵션이 아닐 때보다 더 빠르게 실행되는 더 큰 프로그램을 생성합니다.
사용 된. 그러나 결과는 프로그램마다 다르므로 사용자로 남겨둡니다.
영구적으로 활성화되는 것이 아니라 옵션입니다.

-mno-inefficiency-warnings
비효율적인 코드 생성에 대한 경고를 비활성화합니다. 이러한 경고는
예를 들어 바이트 수준 메모리 작업을 수행하는 코드를 컴파일할 때 생성됩니다.
MAC AE 유형에서. MAC AE는 바이트 수준 메모리에 대한 하드웨어 지원이 없습니다.
모든 바이트 로드/저장은 워드 로드/저장에서 합성되어야 합니다.
작업. 이것은 비효율적이며 다음을 나타내는 경고가 생성됩니다.
프로그래머는 바이트 연산을 피하기 위해 코드를 다시 작성하거나
필요한 하드웨어 지원이 있는 AE 유형입니다. 이 옵션을 사용하면 경고가
꺼져.

PowerPC 옵션

이들은 아래에 나열됩니다

RL78 옵션

-msim
시뮬레이터 내에서 작업을 지원하기 위한 추가 대상 라이브러리의 링크.

-mmul=없음
-mmul=g13
-mmul=rl78
사용할 하드웨어 곱셈 지원 유형을 지정합니다. 기본값은
소프트웨어 곱셈 기능을 사용하는 "없음". "g13" 옵션은
하드웨어는 RL78/G13 타겟에서만 주변 장치를 곱하거나 나눕니다. "rl78" 옵션
RL78 소프트웨어 매뉴얼에 정의된 표준 하드웨어 곱셈용입니다.

IBM RS/6000 PowerPC 옵션

Bowman의 -m 옵션은 IBM RS/6000 및 PowerPC에 대해 정의됩니다.

-mpower
-mno-파워
-mpower2
-mno-power2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-하드-dfp
GCC는 RS/6000 및 PowerPC에 대해 두 가지 관련 명령어 세트 아키텍처를 지원합니다.
XNUMXD덴탈의 명령어 세트는 다음에서 지원하는 명령어입니다. 리오스 사용된 칩셋
원래 RS/6000 시스템 및 PowerPC 명령어 세트는 아키텍처
Freescale MPC5xx, MPC6xx, MPC8xx 마이크로프로세서 및 IBM 4xx, 6xx 및
후속 마이크로프로세서.

어느 아키텍처도 다른 아키텍처의 하위 집합이 아닙니다. 그러나 큰 공통 하위 집합이 있습니다.
둘 다에서 지원하는 지침. MQ 레지스터는 프로세서에 포함됩니다.
POWER 아키텍처를 지원합니다.

이 옵션을 사용하여 프로세서에서 사용할 수 있는 명령을 지정합니다.
사용하고 있습니다. 이러한 옵션의 기본값은 GCC를 구성할 때 결정됩니다.
지정 -mcpu =CPU_유형 이러한 옵션의 사양을 재정의합니다. 우리
당신이 사용하는 것이 좋습니다 -mcpu =CPU_유형 위에 나열된 옵션이 아닌 옵션입니다.

XNUMXD덴탈의 -mpower 이 옵션을 사용하면 GCC가
POWER 아키텍처 및 MQ 레지스터를 사용합니다. 지정 -mpower2 의미하다 전력
또한 GCC는 POWER2 아키텍처에 있는 명령어를 생성할 수 있습니다.
그러나 원래 POWER 아키텍처는 아닙니다.

XNUMXD덴탈의 -mpowerpc 이 옵션을 사용하면 GCC가
PowerPC 아키텍처의 32비트 하위 집합입니다. 지정 -mpowerpc-gpopt 의미하다
-mpowerpc 또한 GCC가 옵션인 PowerPC 아키텍처 명령을 사용할 수 있도록 합니다.
부동 소수점 제곱근을 포함한 범용 그룹. 지정
-mpowerpc-gfxopt 의미하다 -mpowerpc 또한 GCC가 옵션인 PowerPC를 사용할 수 있도록 합니다.
부동 소수점 선택을 포함한 그래픽 그룹의 아키텍처 명령.

XNUMXD덴탈의 -mmfcrf 옵션을 사용하면 GCC가 조건 레지스터 필드에서 이동을 생성할 수 있습니다.
POWER4 프로세서 및 지원하는 기타 프로세서에서 구현된 명령
PowerPC V2.01 아키텍처. NS -mpopcntb 옵션을 사용하면 GCC가 팝카운트를 생성할 수 있습니다.
POWER5에 구현된 배정밀도 FP 역추정 명령어
PowerPC V2.02 아키텍처를 지원하는 프로세서 및 기타 프로세서. NS
-mpopcntd 옵션을 사용하면 GCC에서 구현된 popcount 명령을 생성할 수 있습니다.
PowerPC V7 아키텍처를 지원하는 POWER2.06 프로세서 및 기타 프로세서.
XNUMXD덴탈의 -mfprnd 옵션을 사용하면 GCC가 FP를 정수로 반올림하는 명령어를 생성할 수 있습니다.
POWER5+ 프로세서 및 PowerPC를 지원하는 기타 프로세서에서 구현
V2.03 아키텍처. NS -mcmpb 옵션을 사용하면 GCC가 비교 바이트를 생성할 수 있습니다.
POWER6 프로세서 및 지원하는 기타 프로세서에서 구현된 명령
PowerPC V2.05 아키텍처. NS -mmfpgpr 옵션을 사용하면 GCC가 FP 이동을 생성할 수 있습니다.
POWER6X 프로세서에 구현된 범용 레지스터 명령어 및
확장된 PowerPC V2.05 아키텍처를 지원하는 다른 프로세서. NS -mhard-dfp
옵션을 사용하면 GCC에서 구현된 XNUMX진수 부동 소수점 명령어를 생성할 수 있습니다.
일부 POWER 프로세서.

XNUMXD덴탈의 -mpowerpc64 옵션을 사용하면 GCC가 추가 64비트 명령어를 생성할 수 있습니다.
전체 PowerPC64 아키텍처에서 찾을 수 있으며 GPR을 64비트, 더블워드로 처리합니다.
수량. GCC는 기본적으로 -mno-powerpc64.

둘 다 지정하면 -mno-파워-mno-powerpc, GCC는 다음 지침만 사용합니다.
두 아키텍처의 공통 하위 집합과 일부 특수 AIX 공통 모드 호출 및
MQ 레지스터를 사용하지 않습니다. 둘 다 지정 -mpower-mpowerpc GCC를 허용합니다.
두 아키텍처 중 하나의 명령을 사용하고 MQ 레지스터 사용을 허용합니다.
Motorola MPC601에 대해 이것을 지정하십시오.

-mnew-니모닉
-금형 니모닉
생성된 어셈블러 코드에서 사용할 니모닉을 선택합니다. 와 함께 -mnew-니모닉,
GCC는 PowerPC 아키텍처에 대해 정의된 어셈블러 니모닉을 사용합니다. 와 함께
-금형 니모닉 POWER 아키텍처에 대해 정의된 어셈블러 니모닉을 사용합니다.
하나의 아키텍처에서만 정의된 명령어에는 하나의 니모닉만 있습니다. GCC는 그것을 사용합니다.
이러한 옵션 중 어느 것이 지정되었는지에 관계없이 니모닉입니다.

GCC는 기본적으로 사용 중인 아키텍처에 적합한 니모닉을 사용합니다. 지정
-mcpu =CPU_유형 때때로 이 옵션의 값을 무시합니다. 건물을 짓지 않는 한
크로스 컴파일러인 경우 일반적으로 다음 중 하나를 지정하지 않아야 합니다. -mnew-니모닉 or
-금형 니모닉, 그러나 대신 기본값을 수락해야 합니다.

-mcpu =CPU_유형
아키텍처 유형, 레지스터 사용, 니모닉 선택 및 명령어 스케줄링 설정
머신 유형에 대한 매개변수 CPU_유형. 지원되는 값 CPU_유형 are 401, 403,
405, 405fp, 440, 440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, EC603e, G3, G4, G5, 타이탄, , power2, power3, power4, power5,
파워5+, power6, 파워6x, power7, 공통의, 전원, 파워 pc64, 리오스, Rios1, Rios2, RSC,
rs64.

-mcpu=공통 완전히 일반적인 프로세서를 선택합니다. 이 옵션에서 생성된 코드
모든 POWER 또는 PowerPC 프로세서에서 실행됩니다. GCC는 설명서의 지침만 사용합니다.
두 아키텍처의 공통 하위 집합이며 MQ 레지스터를 사용하지 않습니다. GCC는 다음을 가정합니다.
스케줄링 목적을 위한 일반 프로세서 모델.

-mcpu=전원, -mcpu=파워2, -mcpu=파워PC-mcpu=powerpc64 일반 POWER를 지정하고,
POWER2, ​​순수 32비트 PowerPC(즉, MPC601 아님) 및 64비트 PowerPC 아키텍처
스케줄링을 위해 가정된 적절한 일반 프로세서 모델이 있는 머신 유형
목적.

다른 옵션은 특정 프로세서를 지정합니다. 해당 옵션에서 생성된 코드
해당 프로세서에서 가장 잘 실행되고 다른 프로세서에서는 전혀 실행되지 않을 수 있습니다.

XNUMXD덴탈의 -mcpu options는 다음 옵션을 자동으로 활성화하거나 비활성화합니다.

-말티벡 -mfprnd -mhard-float -mmfcrf -m다중 -mnew-니모닉 -mpopcntb
-mpopcntd -mpower -mpower2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -m더블 플로트 -ms단순-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

특정 CPU에 대해 설정된 특정 옵션은 컴파일러 버전에 따라 다릅니다.
어떤 설정이 해당 CPU에 대한 최적의 코드를 생성하는지에 따라; 그것은하지 않습니다
반드시 실제 하드웨어의 기능을 반영해야 합니다. 설정을 원하시면
개별 옵션을 특정 값으로 지정하려면 -mcpu 선택권,
처럼 -mcpu=970 -mno-altivec.

AIX에서는 -말티벡-mpowerpc64 옵션은 -mcpu
AIX는 이러한 옵션을 완벽하게 지원하지 않기 때문에 현재 옵션입니다. 당신은 할 수있다
여전히 작동할 것이라고 확신하는 경우 개별적으로 활성화하거나 비활성화합니다.
환경을 제공합니다.

-mtune=CPU_유형
머신 유형에 대한 명령어 스케줄링 매개변수 설정 CPU_유형, 그러나 설정하지 마십시오
아키텍처 유형, 레지스터 사용 또는 니모닉 선택 -mcpu =CPU_유형
일 것이다. 에 대한 동일한 값 CPU_유형 에 사용된다 -mtune 에 관해서 -mcpu. 둘 다 인 경우
지정된 경우 생성된 코드는 아키텍처, 레지스터 및 니모닉 세트를 사용합니다.
by -mcpu, 그러나 에 의해 설정된 스케줄링 매개변수 -mtune.

-mcmodel=작은
소형 모델용 PowerPC64 코드 생성: TOC는 64k로 제한됩니다.

-mcmodel=중간
중형 모델에 대한 PowerPC64 코드 생성: TOC 및 기타 정적 데이터가 작동 중일 수 있습니다.
총 4G 크기입니다.

-mcmodel=대형
대형 모델에 대한 PowerPC64 코드 생성: TOC의 크기는 최대 4G일 수 있습니다. 다른
데이터와 코드는 64비트 주소 공간에 의해서만 제한됩니다.

-말티벡
-mno-altivec
AltiVec 명령어를 사용하는(사용하지 않는) 코드 생성 및 사용 가능
AltiVec 명령어 세트에 대한 보다 직접적인 액세스를 허용하는 내장 함수.
설정해야 할 수도 있습니다. -마비=알티벡 AltiVec ABI로 현재 ABI 조정
향상.

-mvrsave
-mno-vrsave
AltiVec 코드를 생성할 때 VRSAVE 명령어를 생성합니다.

-mgen-cell-마이크로코드
Cell 마이크로코드 명령어 생성

-mwarn-cell-마이크로코드
Cell 마이크로코드 명령이 방출될 때 경고합니다. 셀의 예
마이크로코드 명령어는 가변 시프트입니다.

-msecure-plt
ld 및 ld.so가 다음을 사용하여 실행 파일 및 공유 라이브러리를 빌드할 수 있도록 하는 코드 생성
비-exec .plt 및 .got 섹션. 이것은 PowerPC 32비트 SYSV ABI 옵션입니다.

-mbss-plt
ld.so가 채우고 .plt가 필요한 BSS .plt 섹션을 사용하는 코드를 생성합니다.
쓰기 가능하고 실행 가능한 .got 섹션. 이것은 PowerPC 32비트 SYSV입니다.
ABI 옵션.

-미젤
-mno-isel
이 스위치는 ISEL 명령어 생성을 활성화하거나 비활성화합니다.

-미젤=예 아니오
이 스위치는 더 이상 사용되지 않습니다. 사용하다 -미젤-mno-isel 대신.

-mspe
-mno-sp
이 스위치는 SPE simd 명령어 생성을 활성화하거나 비활성화합니다.

-짝이 된
-mno 쌍
이 스위치는 PAIRED simd 명령어 생성을 활성화하거나 비활성화합니다.

-mspe=예 아니오
이 옵션은 더 이상 사용되지 않습니다. 사용하다 -mspe-mno-sp 대신.

-mvsx
-mno-vsx
벡터/스칼라(VSX) 명령어를 사용하는(사용하지 않는) 코드를 생성합니다.
VSX에 대한 보다 직접적인 액세스를 허용하는 내장 기능의 사용을 활성화합니다.
명령어 세트.

-mfloat-gprs=예/싱글/더블/아니요
-mfloat-gprs
이 스위치는 부동 소수점 연산 생성을 활성화하거나 비활성화합니다.
이를 지원하는 아키텍처용 범용 레지스터.

논쟁 거리 or 단일 단정밀도 부동 소수점 사용 가능
작업.

논쟁 거리 더블 단정밀도 및 배정밀도 부동 소수점 사용 가능
작업.

논쟁 거리 아니 범용 레지스터에서 부동 소수점 연산을 비활성화합니다.

이 옵션은 현재 MPC854x에서만 사용할 수 있습니다.

-m32
-m64
Darwin 및 SVR32 대상의 64비트 또는 4비트 환경용 코드 생성(포함
GNU/리눅스). 32비트 환경은 int, long 및 포인터를 32비트로 설정하고
모든 PowerPC 변형에서 실행되는 코드를 생성합니다. 64비트 환경은 int를 다음으로 설정합니다.
32비트 및 long 및 64비트에 대한 포인터, 다음과 같이 PowerPC64용 코드 생성
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-합계-목차
-최소-toc
모든 항목에 대해 생성되는 TOC(목차) 생성 수정
실행 가능 파일. NS -mfull-toc 옵션이 기본적으로 선택되어 있습니다. 이 경우 GCC는
각각의 고유한 자동이 아닌 변수 참조에 대해 하나 이상의 TOC 항목을 할당합니다.
당신의 프로그램에서. GCC는 또한 TOC에 부동 소수점 상수를 배치합니다. 하지만,
목차에서는 16,384개의 항목만 사용할 수 있습니다.

사용 가능한 리소스를 오버플로했다는 링커 오류 메시지가 표시되는 경우
TOC 공간, 당신은 함께 사용되는 TOC 공간의 양을 줄일 수 있습니다 -mno-fp-in-toc
-mno-합계-목차 옵션을 제공합니다. -mno-fp-in-toc GCC가 부동 소수점을 넣는 것을 방지합니다.
목차의 상수 및 -mno-합계-목차 GCC가 계산을 위해 코드를 생성하도록 합니다.
그 합계를 TOC에 넣는 대신 런타임에 주소와 상수의 합계.
이 옵션 중 하나 또는 둘 다를 지정할 수 있습니다. 각각은 GCC가 매우
TOC 공간을 절약하는 대신 약간 더 느리고 더 큰 코드.

이 두 옵션을 모두 지정했는데도 목차의 공간이 부족하면
지정하다 -최소-toc 대신에. 이 옵션을 사용하면 GCC가 다음 항목에 대해 하나의 TOC 항목만
모든 파일. 이 옵션을 지정하면 GCC는 더 느리고
더 크지만 매우 적은 TOC 공간을 사용합니다. 이 옵션을 사용하고 싶을 수도 있습니다.
덜 자주 실행되는 코드가 포함된 파일에만 적용됩니다.

-maix64
-maix32
64비트 AIX ABI 및 호출 규칙 사용: 64비트 포인터, 64비트 "long" 유형 및
그들을 지원하는 데 필요한 인프라. 지정 -maix64 의미하다 -mpowerpc64
-mpowerpc반면 -maix32 64비트 ABI를 비활성화하고 -mno-powerpc64. GCC
기본값은 -maix32.

-mxl-호환
-mno-xl-컴패트
AIX-
호환 가능한 ABI. 부동 소수점 인수를 다음을 넘어 프로토타입된 함수에 전달
인수 FPR 외에 스택에 저장 영역(RSA)을 등록합니다. 가정하지 마십시오
128비트 long double 값에서 가장 중요한 double은 다음과 같은 경우 적절하게 반올림됩니다.
값을 비교하고 double로 변환합니다. long double에 XL 기호 이름 사용
루틴을 지원합니다.

AIX 호출 규칙이 확장되었지만 처음에는 처리하도록 문서화되지 않았습니다.
인수의 주소를 취하는 함수를 호출하는 모호한 K&R C 사례
선언된 것보다 적은 인수. IBM XL 컴파일러는 부동 소수점 인수에 액세스합니다.
서브루틴이 다음 없이 컴파일될 때 스택의 RSA에 맞지 않습니다.
최적화. 스택에 부동 소수점 인수를 항상 저장하는 것은
비효율적이고 거의 필요하지 않은 이 옵션은 기본적으로 활성화되어 있지 않습니다.
최적화 없이 IBM XL 컴파일러에 의해 컴파일된 서브루틴을 호출할 때 필요합니다.

-mp
고객 지원 IBM RS/6000 SP 평행 환경 (체육). 사용하도록 작성된 응용 프로그램 연결
응용 프로그램을 실행할 수 있도록 특수 시작 코드와 함께 메시지를 전달합니다. NS
시스템에는 표준 위치(/usr/lpp/ppe.poe/), 아니면 그
명세서 파일은 다음으로 재정의되어야 합니다. -사양= 적절한 지정 옵션
디렉토리 위치. 병렬 환경은 스레드를 지원하지 않으므로 -mp
옵션과 -pthread 옵션이 호환되지 않습니다.

-악성 - 자연
-악의력
AIX, 32비트 Darwin 및 64비트 PowerPC GNU/Linux에서 옵션 -악성 - 자연
부동 소수점 double과 같은 더 큰 유형의 ABI 정의 정렬을 재정의합니다.
자연 크기 기반 경계에서. 옵션 -악의력 GCC에 지시
ABI 지정 정렬 규칙을 따릅니다. GCC는 기본적으로 표준 정렬을 사용합니다.
ABI에 정의되어 있습니다.

64비트 Darwin에서는 자연 정렬이 기본값이며 -악의력 하지 않습니다
지원.

-msoft-float
-mhard-float
부동 소수점 레지스터 세트를 사용(사용)하지 않는 코드를 생성합니다. 소프트웨어
사용하는 경우 부동 소수점 에뮬레이션이 제공됩니다. -msoft-float 옵션을 선택하고 통과
링크할 때 GCC에 옵션.

-msingle-float
-m더블 플로트
단정밀도 또는 배정밀도 부동 소수점 연산을 위한 코드를 생성합니다.
-m더블 플로트 의미하다 -msingle-float.

-ms단순-fpu
하드웨어 부동 소수점 단위에 대한 sqrt 및 div 명령어를 생성하지 마십시오.

-mfpu
부동 소수점 단위의 유형을 지정합니다. 유효한 값은 sp_lite 에 (동등한
-msingle-float -msimple-fpu), dp_lite (-mdouble-float -msimple-fpu와 동일),
sp_full (-msingle-float와 동일) 및 dp_가득 (-mdouble-float과 동일).

-mxilinx-fpu
Xilinx PPC 405/440에서 부동 소수점 장치에 대한 최적화를 수행합니다.

-m다중
-mno-다중
여러 단어 로드 명령어를 사용(사용하지 않음)하는 코드 생성 및
여러 단어 명령을 저장합니다. 이 지침은 기본적으로 다음에서 생성됩니다.
POWER 시스템이며 PowerPC 시스템에서 생성되지 않습니다. 사용하지 마세요 -m다중 조금에-
엔디안 PowerPC 시스템은 프로세서가
리틀 엔디안 모드. 예외는 다음을 허용하는 PPC740 및 PPC750입니다.
리틀 엔디안 모드의 명령어.

-mstring
-mno-문자열
로드 문자열 명령어와 스토어를 사용(사용하지 않음)하는 코드 생성
여러 레지스터를 저장하고 작은 블록 이동을 수행하는 문자열 워드 명령어. 이것들
명령어는 기본적으로 POWER 시스템에서 생성되며 PowerPC에서는 생성되지 않습니다.
시스템. 사용하지 마세요 -mstring 리틀 엔디안 PowerPC 시스템에서는
프로세서가 리틀 엔디안 모드에 있을 때 명령이 작동하지 않습니다. 예외
리틀 엔디안 모드에서 이러한 명령을 허용하는 PPC740 및 PPC750입니다.

-업데이트
-mno-업데이트
업데이트하는 로드 또는 저장 명령어를 사용(사용하지 않음)하는 코드 생성
기본 레지스터를 계산된 메모리 위치의 주소로 변경합니다. 이 지침
기본적으로 생성됩니다. 사용하는 경우 -mno-업데이트, 사이에 작은 창이 있습니다.
스택 포인터가 업데이트되고 이전 프레임의 주소가
이는 인터럽트 또는 신호를 가로질러 스택 프레임을 이동하는 코드가
손상된 데이터를 얻습니다.

-mavoid-색인 주소
-mno-avoid-색인 주소
인덱싱된 로드 또는 저장의 사용을 피하려는(회피하지 않는) 코드 생성
지침. 이러한 명령은 Power6 프로세서에서 성능 저하를 초래할 수 있습니다.
16M을 넘는 대형 어레이를 통과할 때와 같은 특정 상황에서
경계. 이 옵션은 Power6을 대상으로 할 때 기본적으로 활성화되고 비활성화됩니다.
그렇지 않으면.

-머퓨즈드-매드
-mno-융합-매드
부동 소수점 곱하기 및 누적을 사용(사용하지 않음)하는 코드 생성
지침. 이러한 명령어는 하드웨어 부동 소수점 경우 기본적으로 생성됩니다.
사용. 기계 의존 -머퓨즈드-매드 이제 옵션이 시스템에 매핑됩니다.
독립 -ffp-계약=빠른 옵션 및 -mno-융합-매드 매핑됩니다
-ffp-계약=해제.

-mmulhw
-mno-물흐
하프워드 곱셈 및 곱셈 누산을 사용(사용하지 않음)하는 코드 생성
IBM 405, 440, 464 및 476 프로세서에 대한 지침. 이러한 지침은
해당 프로세서를 대상으로 할 때 기본적으로 생성됩니다.

-mdlmzb
-mno-dlmzb
문자열 검색을 사용(사용하지 않음)하는 코드 생성 dlmzb IBM에 대한 지시
405, 440, 464 및 476 프로세서. 이 명령어는 다음과 같은 경우 기본적으로 생성됩니다.
해당 프로세서를 대상으로 합니다.

-mno 비트 정렬
-mbit 정렬
System V.4와 임베디드 PowerPC 시스템에서 구조와 결합을 강제하지 않습니다.
비트 필드의 기본 유형에 맞춰 정렬될 비트 필드를 포함합니다.

예를 들어 기본적으로 8개의 "부호 없는" 비트 필드만 포함하는 구조
길이 1은 4바이트 경계에 맞춰 정렬되며 크기는 4바이트입니다. 사용하여
-mno 비트 정렬, 구조는 1바이트 경계에 맞춰 정렬되고 크기는 1바이트입니다.

-mno-엄격한 정렬
-mstrict-정렬
System V.4 및 임베디드 PowerPC 시스템에서 정렬되지 않은 메모리가 있다고 가정하지 않습니다.
참조는 시스템에서 처리됩니다.

-m 재배치 가능
-mno 재배치 가능
정적 실행 파일을
런타임에 다른 주소. 간단한 임베디드 PowerPC 시스템 로더는
".got2"의 전체 내용과 ".fixup"에 나열된 4바이트 위치를 재배치합니다.
섹션, 이 옵션에 의해 생성된 32비트 주소 테이블. 이것이 작동하려면 모든
함께 연결된 개체는 다음으로 컴파일해야 합니다. -m 재배치 가능 or -mrelocateable-lib.
-m 재배치 가능 코드는 스택을 8바이트 경계에 맞춥니다.

-mrelocateable-lib
-mno-relocateable-lib
처럼 -m 재배치 가능, -mrelocateable-lib 정적을 허용하는 ".fixup"섹션을 생성합니다.
실행 파일은 런타임에 재배치되지만 -mrelocateable-lib 사용하지 않는다
더 작은 스택 정렬 -m 재배치 가능. 다음으로 컴파일된 객체 -mrelocateable-lib 5월
모든 조합으로 컴파일된 개체와 연결 -m 재배치 가능 옵션을 제공합니다.

-mno-toc
-mtoc
System V.4와 임베디드 PowerPC 시스템에서 레지스터 2가 다음을 포함한다고 가정하지 않습니다.
프로그램에서 사용되는 주소를 가리키는 전역 영역에 대한 포인터.

-조금
-미리틀 엔디안
System V.4 및 임베디드 PowerPC 시스템에서 프로세서용 코드를 약간의 컴파일
엔디안 모드. NS -미리틀 엔디안 옵션은 다음과 같습니다. -조금.

-mbig
-mbig-엔디안
System V.4 및 임베디드 PowerPC 시스템에서 프로세서용 코드를 컴파일합니다.
엔디안 모드. NS -mbig-엔디안 옵션은 다음과 같습니다. -mbig.

-mdynamic-no-pic
Darwin 및 Mac OS X 시스템에서는 재배치할 수 없도록 코드를 컴파일하지만
외부 참조는 재배치 가능합니다. 결과 코드는 다음에 적합합니다.
응용 프로그램이지만 공유 라이브러리는 아닙니다.

-msingle-pic-base
PIC 주소 지정에 사용되는 레지스터를 로드하는 대신 읽기 전용으로 처리하십시오.
각 기능에 대한 프롤로그. 런타임 시스템은 이것을 초기화할 책임이 있습니다.
실행이 시작되기 전에 적절한 값으로 등록하십시오.

- 우선 순위 제한 - inns =우선
이 옵션은 디스패치 슬롯 제한에 할당되는 우선 순위를 제어합니다.
두 번째 스케줄링 패스 동안 지시. 논쟁 거리 우선 가치를 취하다
0/1/2 할당하다 아니오/최고/두 번째로 높은 디스패치 우선순위가 제한된 슬롯
도움말을 참조하십시오.

-msched-비용이 많이 드는-dep=의존 유형
이 옵션은 대상에서 비용이 많이 드는 것으로 간주되는 종속성을 제어합니다.
명령 스케줄링. 논쟁 거리 의존 유형 다음 중 하나를 취합니다.
값 : 아니: 의존성 비용이 들지 않음, 모든: 모든 의존은 비용이 많이 듭니다.
true_store_to_load: 상점에서 로드까지의 진정한 의존은 비용이 많이 들며, store_to_load: any
상점에서 로드까지의 의존은 비용이 많이 들며, 번호: 대기 시간 >=에 대한 모든 종속성
번호 비용이 많이 듭니다.

-minsert-sched-nops=계획
이 옵션은 두 번째 동안 사용할 nop 삽입 체계를 제어합니다.
스케줄링 패스. 논쟁 거리 계획 다음 값 중 하나를 사용합니다. 아니: 하지마
놉을 삽입하십시오. 인주: 빈 문제 슬롯이 있는 모든 디스패치 그룹에 nops가 있는 패드,
스케줄러의 그룹화에 따라. 재그룹_정확: 비용이 많이 드는 강제로 nops를 삽입하십시오.
종속 숙박 시설을 별도의 그룹으로 나눕니다. 강제로 필요한 만큼 정확하게 nop을 삽입합니다.
추정된 프로세서 그룹화에 따라 insn을 새 그룹으로 보냅니다. 번호: 삽입
비용이 많이 드는 종속 여관을 별도의 그룹으로 강제 실행하는 nops. 끼워 넣다 번호
여관을 새 그룹으로 강제합니다.

-mcall-sysv
System V.4 및 임베디드 PowerPC 시스템에서 다음과 같은 호출 규칙을 사용하여 코드를 컴파일합니다.
System V Application Binary Interface, PowerPC의 1995년 XNUMX월 초안을 준수합니다.
프로세서 보충. 다음을 사용하여 GCC를 구성하지 않는 한 기본값입니다.
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
둘 다 지정 -mcall-sysv-메이비 옵션을 제공합니다.

-mcall-sysv-noeabi
둘 다 지정 -mcall-sysv-mno-eabi 옵션을 제공합니다.

-mcall-aixdesc
System V.4 및 임베디드 PowerPC 시스템에서 AIX 운영 체제용 코드를 컴파일합니다.

-mcall-리눅스
System V.4 및 임베디드 PowerPC 시스템에서 Linux 기반 GNU용 컴파일 코드
시스템.

-mcall-freebsd
System V.4 및 임베디드 PowerPC 시스템에서 FreeBSD 운영을 위한 코드 컴파일
시스템.

-mcall-netbsd
System V.4 및 임베디드 PowerPC 시스템에서 NetBSD 운영을 위한 코드 컴파일
시스템.

-mcall-openbsd
System V.4 및 임베디드 PowerPC 시스템에서 OpenBSD 운영을 위한 코드 컴파일
시스템.

-maix-구조체-반환
메모리의 모든 구조를 반환합니다(AIX ABI에서 지정한 대로).

-msvr4-구조체 반환
레지스터에서 8바이트보다 작은 구조를 반환합니다(SVR4 ABI에 의해 지정됨).

-마비=아비형
특정 확장으로 현재 ABI를 확장하거나 그러한 확장을 제거하십시오. 유효한
값은 알티벡, 무알티벡, spe, 노스페, ibmlongdouble, ieeelongdouble.

-마비=스페
SPE ABI 확장으로 현재 ABI를 확장합니다. 이것은 기본 ABI를 변경하지 않으며,
대신 현재 ABI에 SPE ABI 확장을 추가합니다.

-마비=노스페
현재 ABI에 대해 Booke SPE ABI 확장을 비활성화합니다.

-마비=ibmlongdouble
IBM 확장 정밀도 long double을 사용하도록 현재 ABI를 변경하십시오. 파워피씨입니다
32비트 SYSV ABI 옵션.

-mabi=이에롱더블
IEEE 확장 정밀도 long double을 사용하도록 현재 ABI를 변경합니다. 파워피씨입니다
32비트 Linux ABI 옵션.

-m프로토타입
-mno 프로토타입
System V.4 및 임베디드 PowerPC 시스템에서 모든 호출은 가변 인수로 간주됩니다.
기능이 제대로 프로토타입됩니다. 그렇지 않으면 컴파일러는 명령어를 삽입해야 합니다.
조건 코드 레지스터의 비트 6을 설정하거나 지우기 위한 프로토타입이 아닌 모든 호출 전에
(CR) 부동 소수점 값이 부동 소수점으로 전달되었는지 여부를 나타냅니다.
함수가 변수 인수를 취하는 경우를 대비하여 등록합니다. 와 함께 -m프로토타입, 통화만
프로토타입된 변수 인수 함수는 비트를 설정하거나 지웁니다.

-msim
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. sim-crt0.o
표준 C 라이브러리는 libsim.alibc.a. 에 대한 기본값입니다.
powerpc-*-에비심 구성.

-mmvme
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. crt0.o 그리고
표준 C 라이브러리는 libmvme.alibc.a.

- 미친
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. crt0.o 그리고
표준 C 라이브러리는 libads.alibc.a.

-골수칼
임베디드 PowerPC 시스템에서 시작 모듈이 호출된다고 가정합니다. crt0.o 그리고
표준 C 라이브러리는 libyk.alibc.a.

-mvxworks
System V.4 및 임베디드 PowerPC 시스템에서 컴파일 중임을 지정하십시오.
VxWorks 시스템.

-멤버
임베디드 PowerPC 시스템에서 다음을 설정하십시오. PPC_EMB 나타내는 ELF 플래그 헤더의 비트
에비 확장 재배치가 사용됩니다.

-메이비
-mno-eabi
System V.4 및 임베디드 PowerPC 시스템에서 Embedded
System V.4에 대한 수정 세트인 애플리케이션 바이너리 인터페이스(eabi)
명세서. 선택 -메이비 스택이 8바이트로 정렬되었음을 의미합니다.
경계에서 "main"에서 "__eabi" 함수를 호출하여 eabi 환경을 설정하고,
그리고 -msdata 옵션은 "r2"와 "r13"을 모두 사용하여 두 개의 개별 작은 데이터를 가리킬 수 있습니다.
지역. 선택 -mno-eabi 스택이 16바이트 경계에 맞춰 정렬되었음을 의미합니다.
"main"에서 초기화 함수를 호출하지 않고 -msdata 옵션은 만 사용합니다
"r13"은 하나의 작은 데이터 영역을 가리킵니다. NS -메이비 옵션은 기본적으로 켜져 있습니다.
다음 중 하나를 사용하여 구성된 GCC powerpc*-*-eabi* 옵션을 제공합니다.

-msdata=에비
System V.4 및 임베디드 PowerPC 시스템에서 초기화된 작은 "const" 전역 및
정적 데이터 .sdata2 레지스터 "r2"가 가리키는 섹션. 작게 넣어
초기화된 비 "const" 전역 및 정적 데이터 .sdata. 가리키는 부분
레지스터 "r13"에 의해. 초기화되지 않은 작은 전역 및 정적 데이터를 .sbss
옆에 있는 섹션, .sdata. 부분. NS -msdata=에비 옵션은
와 호환되지 않는 -m 재배치 가능 선택권. 그만큼 -msdata=에비 옵션은 또한
-멤버 옵션을 선택합니다.

-msdata=sysv
System V.4 및 임베디드 PowerPC 시스템에서 작은 전역 및 정적 데이터를
.sdata. 레지스터 "r13"이 가리키는 섹션. 작은 초기화되지 않은 전역 넣어
및 정적 데이터 .sbss 옆에 있는 섹션, .sdata. 부분. NS
-msdata=sysv 옵션이 호환되지 않습니다. -m 재배치 가능 옵션을 선택합니다.

-msdata=기본값
-msdata
System V.4 및 임베디드 PowerPC 시스템에서 다음과 같은 경우 -메이비 사용되는 경우 코드를 동일하게 컴파일
as -msdata=에비, 그렇지 않으면 다음과 같은 코드를 컴파일합니다. -msdata=sysv.

-msdata=데이터
System V.4 및 임베디드 PowerPC 시스템에서 작은 글로벌 데이터를 .sdata.
부분. 초기화되지 않은 작은 전역 데이터를 .sbss 부분. 사용하지 마세요
그러나 작은 데이터를 처리하려면 "r13"을 등록하십시오. 다음이 아니면 기본 동작입니다.
other -msdata 옵션이 사용됩니다.

-msdata=없음
-mno-sdata
임베디드 PowerPC 시스템에서 초기화된 모든 전역 및 정적 데이터를 .data
섹션 및 초기화되지 않은 모든 데이터 .bss 안내

-mblock-이동-인라인-제한=NUM
모든 블록 이동(예: "memcpy" 또는 구조 복사본 호출)을 인라인하거나
동일 NUM 바이트. 에 대한 최소값 NUM 32비트 대상에서는 32바이트이고 64비트에서는
64비트 대상에서 바이트. 기본값은 대상에 따라 다릅니다.

-G NUM
임베디드 PowerPC 시스템에서 전역 및 정적 항목을 다음보다 작거나 같음 NUM
바이트를 일반 데이터 또는 bss 섹션 대신 작은 데이터 또는 bss 섹션에 넣습니다.
기본적으로, NUM 8입니다. -G NUM 스위치도 링커로 전달됩니다. 모든 모듈
같은 것으로 컴파일해야합니다 -G NUM 값.

-mregnames
-mno-regnames
System V.4 및 임베디드 PowerPC 시스템에서 레지스터 이름을 내보내지 않습니다.
기호 형식을 사용한 어셈블리 언어 출력

-mlongcall
-mno-longcall
기본적으로 모든 통화가 멀리 떨어져 있다고 가정하여 더 긴 비용이 더 많이 드는 통화가
순서가 필요합니다. 32MB 이상의 통화에 필요합니다.
(33,554,432바이트) 현재 위치에서. 다음과 같은 경우 짧은 통화가 생성됩니다.
컴파일러는 호출이 그렇게 멀리 떨어져 있을 수 없다는 것을 알고 있습니다. 이 설정은 다음으로 재정의할 수 있습니다.
"단기 호출" 기능 속성 또는 "#pragma" 롱콜(0)".

일부 링커는 범위를 벗어난 호출을 감지하고 글루 코드를 생성할 수 있습니다.
파리. 이러한 시스템에서는 긴 호출이 필요하지 않으며 더 느린 코드를 생성합니다. 같이
이 글에서 AIX 링커는 PowerPC/64용 GNU 링커와 마찬가지로 이 작업을 수행할 수 있습니다. 그것
32비트 PowerPC 시스템용 GNU 링커에도 이 기능을 추가할 계획입니다.

Darwin/PPC 시스템에서 "#pragma longcall"은 "jbsr callee, L42"를 생성하고
"지점 섬"(접착제 코드). 두 개의 대상 주소는 수신자와
"가지 섬". Darwin/PPC 링커는 첫 번째 주소를 선호하고
PPC "bl" 명령이 수신자에게 직접 도달할 경우 "bl callee"; 그렇지 않으면
링커는 "브랜치 아일랜드"를 호출하기 위해 "bl L42"를 생성합니다. "가지 섬"은
호출 함수의 본문에 추가됨. 전체 32비트 주소를 계산합니다.
수신자와 점프합니다.

Mach-O(Darwin) 시스템에서 이 옵션은 컴파일러가 글루로 방출하도록 지시합니다.
모든 직접 호출, 그리고 Darwin 링커는 이를 사용할지 버릴지 결정합니다.

미래에는 링커가
접착제를 생성하는 것으로 알려져 있습니다.

-mtls-마커
-mno-tls-마커
기능을 지정하는 재배치로 "__tls_get_addr"에 대한 호출을 표시(표시하지 않음)
논쟁. 재배치는 ld가 함수 호출을 인수와 안정적으로 연결할 수 있도록 합니다.
TLS 최적화를 위한 설정 지침을 통해 gcc가 더 나은 일정을 잡을 수 있습니다.
시퀀스.

-pthread
멀티스레딩 지원 추가 pthread 도서관. 이 옵션은 플래그를 설정합니다.
전처리기와 링커 모두.

-mrecip
-mno-recipe
이 옵션을 사용하면 GCC가 역 추정 및 역 제곱근을 사용할 수 있습니다.
정확도를 높이기 위해 추가 Newton-Raphson 단계로 명령어 추정
부동 소수점 인수에 대해 나누기 또는 제곱근 및 나누기를 수행하는 대신. 너
사용해야합니다 -빠른 수학 사용시 옵션 -mrecip (아니면 적어도
-재미있는 수학 최적화, - 유한 수학 전용, - 분수 수학
-fno 트래핑 수학). 시퀀스의 처리량은 일반적으로
non-reciprocal 명령의 처리량보다 높으면,
시퀀스는 최대 2 ulp까지 감소될 수 있습니다(즉, 1.0의 역수는 0.99999994와 같습니다).
역제곱근의 경우.

-mrecip=고르다
이 옵션을 사용하면 사용할 상호 추정 지침을 제어할 수 있습니다. 고르다
"!"가 앞에 올 수 있는 쉼표로 구분된 옵션 목록입니다. 를 반전시키다
옵션: "all": 모든 추정 지침 활성화, "default": 기본값 활성화
에 해당하는 지침 -mrecip, "없음": 모든 추정 지침을 비활성화합니다.
에 해당 -mno-recipe; "div": 역 근사 명령을 활성화합니다.
단정밀도와 배정밀도 모두; "divf": 단정밀도 역수 활성화
근사치 지침; "divd": 배정밀도 역수 활성화
근사치 지침; "rsqrt": 역 제곱근 근사를 활성화합니다.
단정밀도 및 배정밀도 모두에 대한 지침; "rsqrtf": 단일 활성화
정밀 역제곱근 근사 명령어; "rsqrtd": 활성화
배정밀도 역제곱근 근사 명령어;

예를 들어 -mrecip=모두,!rsqrtd 모든 상호 추정을 가능하게 할 것입니다.
"FRSQRTE", "XSRSQRTEDP" 및 "XVRSQRTEDP" 명령어 제외
배정밀도 역 제곱근 계산을 처리합니다.

-mrecip-정밀도
-mno-precision.
상호 추정 지침이 더 높은 값을 제공한다고 가정(가정하지 않음)
PowerPC ABI에서 요구하는 것보다 정확한 추정치. 선택 -mcpu=파워6 or
-mcpu=파워7 자동으로 선택 -mrecip-정밀도. 배정밀도 정사각형
루트 추정 명령어는 정밀도가 낮은 기계에서 기본적으로 생성되지 않습니다.
세 단계 후에 수렴하는 추정치를 제공하지 않기 때문입니다.

-mveclibabi=유형
외부 라이브러리를 사용하여 내장 함수를 벡터화하는 데 사용할 ABI 유형을 지정합니다.
현재 지원되는 유일한 유형은 IBM의
다음을 사용하여 내장 함수를 벡터화하기 위한 MASS(수학적 가속 하위 시스템) 라이브러리
외부 라이브러리. GCC는 현재 "acosd2", "acosf4", "acoshd2",
"acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2",
"atanf4", "atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2",
"coshf4", "erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
"expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4", "log10d2",
"log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2",
"powf4", "sind2", "sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4",
power2에 대한 코드를 생성할 때 "tanhd4" 및 "tanhf7". 둘 다 -ftree 벡터화
-재미있는 수학 최적화 활성화해야 합니다. MASS 라이브러리는 다음과 같아야 합니다.
링크 시간에 지정됩니다.

-mfriz
-mno-friz
"friz" 명령어를 생성(생성하지 않음)할 때 -재미있는 수학 최적화
옵션은 부동 소수점 값의 반올림을 64비트 정수로 최적화하는 데 사용되며
부동 소수점으로 돌아갑니다. "friz" 명령어는 다음과 같은 경우 동일한 값을 반환하지 않습니다.
부동 소수점 숫자가 너무 커서 정수에 맞지 않습니다.

-중첩 함수에 대한 mpointers
-중첩 함수에 대한 mno 포인터
정적 체인 레지스터(r11) 언제
함수 포인터가 있는 AIX 및 64비트 Linux 시스템에서 포인터를 통해 호출
함수 주소, 로드할 TOC 값을 제공하는 3워드 디스크립터를 가리킵니다.
회원가입 r2, 레지스터에 로드할 정적 체인 값 r11. 그만큼
-중첩 함수에 대한 mpointers 기본적으로 켜져 있습니다. 를 통해 전화를 걸 수 없습니다.
중첩된 함수에 대한 포인터 또는 다른 언어로 컴파일된 함수에 대한 포인터
다음을 사용하는 경우 정적 체인을 사용하십시오. -중첩 함수에 대한 mno 포인터.

-msave-toc-간접
-mno-save-toc-간접
예약된 스택 위치에 TOC 값을 저장하는 코드 생성(생성하지 않음)
함수가 AIX 및 64비트의 포인터를 통해 호출하는 경우 함수 프롤로그에서
리눅스 시스템. TOC 값이 프롤로그에 저장되지 않은 경우 직전에 저장됩니다.
포인터를 통한 호출 NS -mno-save-toc-간접 옵션이 기본값입니다.

RX 옵션

다음 명령줄 옵션은 RX 대상에 대해 정의됩니다.

-m64bit-더블
-m32bit-더블
"이중" 데이터 유형을 64비트(-m64bit-더블) 또는 32비트(-m32bit-더블)
크기에. 기본값은 -m32bit-더블. 주의 사항 RX 부동 소수점 하드웨어만 작동
32비트 값에서 기본값은 다음과 같습니다. -m32bit-더블.

-fpu
-노푸
활성화(-fpu) 또는 비활성화(-노푸) RX 부동 소수점 하드웨어 사용. NS
에 대해 기본값이 활성화되어 있습니다. RX600 시리즈 및 비활성화 RX200 시리즈.

부동 소수점 명령어는 32비트 부동 소수점 값에 대해서만 생성됩니다.
그러나 만약 그렇다면 -m64bit-더블 옵션이 사용 중인 경우 FPU 하드웨어는
더블에 사용.

주의 사항 경우 -fpu 옵션이 활성화되면 -재미있는 수학 최적화 도 활성화됩니다
자동으로. RX FPU 명령어 자체가 안전하지 않기 때문입니다.

-mcpu =name
대상으로 할 RX CPU 유형을 선택합니다. 현재 세 가지 유형이 지원되며,
일반적인 RX600RX200 시리즈 하드웨어 및 특정 RX610 CPU. 기본값은
RX600.

유일한 차이점은 RX600RX610 동부 표준시 가야 르 RX610 지원하지 않습니다
"MVTIPL" 명령.

XNUMXD덴탈의 RX200 시리즈에는 하드웨어 부동 소수점 단위가 없으므로 -노푸 사용 가능
이 유형을 선택하면 기본적으로

-mbig-endian-데이터
-mlittle-endian-데이터
빅 엔디안 형식으로 데이터(코드 제외)를 저장합니다. 기본값은
-mlittle-endian-데이터, 즉, 리틀 엔디안 형식으로 데이터를 저장합니다.

-m작은 데이터 제한=N
배치할 수 있는 전역 및 정적 변수의 최대 크기를 바이트 단위로 지정합니다.
작은 데이터 영역으로 작은 데이터 영역을 사용하면 더 작고 빨라질 수 있습니다.
코드이지만 영역의 크기는 제한되어 있으며 프로그래머가 이를 확인하는 것은
영역이 넘치지 않습니다. 또한 작은 데이터 영역이 RX 중 하나를 사용하는 경우
레지스터(보통 "r13")는 이 영역을 가리키는 용도로 예약되어 있으므로
컴파일러에서 더 오래 사용할 수 있습니다. 이로 인해 속도가 느려지거나 커질 수 있습니다.
한 번 예약된 레지스터에 보관될 수 있었던 변수가 현재 코드인 경우
스택에 푸시됩니다.

공통 변수(초기화되지 않은 변수)와 상수는
다른 섹션에 할당되므로 작은 데이터 영역에 배치되지 않습니다.
출력 실행 가능.

기본값은 이 기능을 비활성화하는 XNUMX입니다. 참고로 이 기능은
더 높은 최적화 수준에서 기본적으로 활성화됨(-O2 등) 때문에
레지스터 예약의 잠재적으로 해로운 영향. 그것은 프로그래머에게 달려있다.
이 기능이 프로그램에 유용한지 여부를 실험하고 발견합니다. 보다
에 대한 설명 -mpid 실제 등록 방법에 대한 설명을 위한 옵션
작은 데이터 영역 포인터가 선택된 상태를 유지합니다.

-msim
-mno-sim
시뮬레이터 런타임을 사용하십시오. 기본값은 libgloss 보드 특정 런타임을 사용하는 것입니다.

-mas100-구문
-mno-as100-구문
어셈블러 출력을 생성할 때 Renesas의 AS100과 호환되는 구문을 사용하십시오.
어셈블러. 이 구문은 GAS 어셈블러에서도 처리할 수 있지만 일부
제한이 있으므로 생성은 기본 옵션이 아닙니다.

-mmax-일정 크기=N
에서 피연산자로 사용할 수 있는 상수의 최대 크기(바이트)를 지정합니다.
RX 명령. RX 명령어 세트는 최대 4의 상수를 허용하지만
명령어에서 사용할 길이의 바이트, 더 긴 값은 더 긴 것과 동일합니다.
지침. 따라서 어떤 상황에서는 크기를 제한하는 것이 유리할 수 있습니다.
명령어에 사용되는 상수. 너무 큰 상수는 대신
상수 풀에 배치되고 레지스터 간접 참조를 통해 참조됩니다.

가치 N 0과 4 사이일 수 있습니다. 0(기본값) 또는 4 값은 다음을 의미합니다.
모든 크기의 상수가 허용됩니다.

-mrelax
링커 이완을 활성화합니다. 링커 이완은 링커가
다양한 버전의 더 짧은 버전을 찾아 프로그램의 크기를 줄이려고 시도합니다.
지침. 기본적으로 비활성화되어 있습니다.

-민트 레지스터=N
고속 인터럽트 처리기 기능을 위해 예약할 레지스터 수를 지정합니다. NS
가치 N 0과 4 사이일 수 있습니다. 값이 1이면 레지스터 "r13"이
고속 인터럽트 핸들러 전용으로 예약되어 있습니다. 2 예비의 가치
"r13" 및 "r12". 값 3은 "r13", "r12" 및 "r11"을 예약하고 값 4를 예약합니다.
"r13"부터 "r10"까지를 예약합니다. 기본값인 0 값은 아무 것도 예약하지 않습니다.
레지스터.

-msave-ACC -에 - 인터럽트
인터럽트 처리기 기능이 누산기 레지스터를 보존해야 함을 지정합니다.
이것은 일반 코드가 누산기 레지스터를 사용할 수 있는 경우에만 필요합니다.
64비트 곱셈을 수행하기 때문입니다. 기본값은 누산기를 무시하는 것입니다.
이것은 인터럽트 핸들러를 더 빠르게 만들기 때문입니다.

-mpid
-mno-pid
위치 독립 데이터의 생성을 가능하게 합니다. 모든 액세스가 활성화되면
상수 데이터는 레지스터에 있는 기본 주소의 오프셋을 통해 수행됩니다. 이것
필요 없이 런타임에 상수 데이터의 위치를 ​​결정할 수 있습니다.
실행 파일을 재배치할 수 있으며, 이는 긴밀한
메모리 제약. 수정할 수 있는 데이터는 이 옵션의 영향을 받지 않습니다.

이 기능을 사용하면 상수 데이터에 대해 레지스터(보통 "r13")를 예약합니다.
기본 주소. 이것은 특히 복잡한 코드에서 더 느리거나 더 큰 코드를 초래할 수 있습니다.
기능.

일정한 데이터베이스 주소를 유지하기 위해 선택된 실제 레지스터는 다음 여부에 따라 다릅니다.
전에, -m작은 데이터 제한 및 / 또는 -민트 레지스터 명령줄 옵션이 활성화됩니다.
레지스터 "r13"부터 시작하여 아래쪽으로 진행하면 레지스터가 먼저 할당됩니다.
의 요구 사항을 충족하기 위해 -민트 레지스터다음, -mpid 그리고 마지막으로
-m작은 데이터 제한. 따라서 작은 데이터 영역 레지스터는 "r8"이 될 수 있습니다.
둘 다 -민트 레지스터=4-mpid 명령줄에 지정됩니다.

기본적으로 이 기능은 활성화되어 있지 않습니다. 기본값은 다음을 통해 복원할 수 있습니다. -mno-pid
명령줄 옵션.

참고 : 일반 GCC 명령줄 ​​옵션 -고정-등록 번호 RX에 특별한 의미가 있습니다.
"인터럽트" 기능 속성과 함께 사용되는 경우 포트입니다. 이 속성은 다음을 나타냅니다.
빠른 인터럽트를 처리하기 위한 기능입니다. GCC는
"r10", "r11", "r12" 및/또는 "r13"을 등록하고
해당 레지스터는 다음을 통해 제한되었습니다. -고정-등록 번호 or -민트 레지스터
명령줄 옵션.

S / 390 z 시리즈 옵션

이들은 있습니다 -m S/390 및 zSeries 아키텍처에 대해 정의된 옵션.

-mhard-float
-msoft-float
부동 소수점 명령어 및 부동 소수점 레지스터를 사용(사용하지 않음)
포인트 작업. 언제 -msoft-float 가 지정되면 기능 libgcc.a 으로 사용될 것
부동 소수점 연산을 수행합니다. 언제 -mhard-float 지정되면 컴파일러
IEEE 부동 소수점 명령어를 생성합니다. 이것이 기본값입니다.

-mhard-dfp
-mno-하드-dfp
XNUMX진수에 대한 하드웨어 XNUMX진수 부동 소수점 명령어를 사용(사용하지 않음)
부동 소수점 연산. 언제 -mno-하드-dfp 가 지정되면 기능 libgcc.a
소수점 부동 소수점 연산을 수행하는 데 사용됩니다. 언제 -mhard-dfp is
지정된 경우 컴파일러는 XNUMX진수 부동 소수점 하드웨어 명령어를 생성합니다. 이것
의 기본값입니다. -행진=z9-ec 이상.

-mlong-더블-64
-mlong-더블-128
이 스위치는 "롱 더블" 유형의 크기를 제어합니다. 64비트의 크기는
"long double" 유형은 "double" 유형에 해당합니다. 이것이 기본값입니다.

-mbackchain
-mno-백체인
호출자의 프레임 주소를 백체인 포인터로 저장(저장하지 않음)
수신자의 스택 프레임. 다음과 같은 도구를 사용하여 디버깅을 허용하려면 백체인이 필요할 수 있습니다.
DWARF-2 호출 프레임 정보를 이해하지 못합니다. 언제 -mno-packed-스택
효과, 백체인 포인터는 스택 프레임의 맨 아래에 저장됩니다. 언제
-mpacked-스택 실제로 백체인은 최상위 단어에 배치됩니다.
96/160바이트 레지스터 저장 영역.

일반적으로 컴파일된 코드는 -mbackchain 다음으로 컴파일된 코드와 호출 호환 가능
-mmo-백체인; 그러나 디버깅 목적으로 백체인을 사용하려면 일반적으로 다음이 필요합니다.
전체 바이너리가 -mbackchain. 의 조합에 유의하십시오.
-mbackchain, -mpacked-스택-mhard-float 지원되지 않습니다. 구축하기 위해서는
리눅스 커널 사용 -msoft-float.

기본값은 백체인을 유지하지 않는 것입니다.

-mpacked-스택
-mno-packed-스택
패킹된 스택 레이아웃을 사용(사용하지 않음)합니다. 언제 -mno-packed-스택 지정되고,
컴파일러는 96/160바이트 레지스터 저장 영역의 모든 필드를 사용합니다.
기본 목적; 사용하지 않는 필드는 여전히 스택 공간을 차지합니다. 언제 -mpacked-스택 is
지정되면 레지스터 저장 슬롯은 레지스터 저장 상단에 조밀하게 채워집니다.
지역; 사용하지 않은 공간은 다른 용도로 재사용되어 보다 효율적으로 사용할 수 있습니다.
사용 가능한 스택 공간 그러나 언제 -mbackchain 도 유효합니다. 최상위
저장 영역의 단어는 항상 백체인을 저장하는 데 사용되며 반환 주소
레지스터는 항상 백체인 아래에 두 단어로 저장됩니다.

스택 프레임 백체인을 사용하지 않는 한 다음으로 생성된 코드는 -mpacked-스택
로 생성된 코드와 통화 호환 가능 -mno-packed-스택. 일부 비 FSF
스택 프레임을 사용하는 S/2.95 또는 zSeries 생성 코드용 GCC 390 릴리스
디버깅 목적뿐만 아니라 런타임에 백체인. 이러한 코드는 호출되지 않습니다.
로 컴파일된 코드와 호환 가능 -mpacked-스택. 또한, 다음의 조합에 유의하십시오.
-mbackchain, -mpacked-스택-mhard-float 지원되지 않습니다. 구축하기 위해서는
리눅스 커널 사용 -msoft-float.

기본값은 패킹된 스택 레이아웃을 사용하지 않는 것입니다.

-msmall-exec
-mno-소형-exec
서브루틴을 수행하기 위해 "bras" 명령어를 사용하여 코드 생성(또는 생성하지 않음)
전화. 이것은 전체 실행 파일 크기가 64k를 초과하지 않는 경우에만 안정적으로 작동합니다.
기본값은 대신 "basr" 명령을 사용하는 것입니다.
한정.

-m64
-m31
인셀덤 공식 판매점인 -m31 지정되면 S/390 ABI용 GNU/Linux와 호환되는 코드를 생성합니다. 언제
-m64 지정되면 zSeries ABI용 GNU/Linux와 호환되는 코드를 생성합니다. 이것
GCC는 특히 64비트 명령어를 생성할 수 있습니다. 를 위해 s390 대상,
기본값은 -m31반면, s390x 기본적으로 대상 -m64.

-mzarch
-메사
인셀덤 공식 판매점인 -mzarch 가 지정되면 에서 사용 가능한 지침을 사용하여 코드를 생성합니다.
z/아키텍처. 언제 -메사 지정된 경우 지침을 사용하여 코드 생성
ESA/390에서 사용할 수 있습니다. 참고 -메사 로는 불가능 -m64. 생성할 때
S/390 ABI용 GNU/Linux와 호환되는 코드, 기본값은 -메사. 생성할 때
zSeries ABI용 GNU/Linux와 호환되는 코드, 기본값은 -mzarch.

-mmvcle
-mno-mvcle
블록을 수행하기 위해 "mvcle" 명령어를 사용하여 코드 생성(또는 생성하지 않음)
움직인다. 언제 -mno-mvcle 지정된 경우 대신 "mvc" 루프를 사용하십시오. 이것은 기본값입니다
크기를 최적화하지 않는 한.

-m디버그
-mno 디버그
컴파일할 때 추가 디버그 정보를 인쇄하거나 인쇄하지 마십시오. 기본값은
디버그 정보를 인쇄하지 않습니다.

-행진=CPU 유형
실행할 코드 생성 CPU 유형를 나타내는 시스템의 이름입니다.
특정 프로세서 유형. 가능한 값 CPU 유형 are g5, g6, z900, z990, z9-109,
Z9-ECz10. 에서 사용 가능한 지침을 사용하여 코드를 생성할 때
z/Architecture, 기본값은 -행진=z900. 그렇지 않으면 기본값은 -행진=g5.

-mtune=CPU 유형
튜닝 CPU 유형 ABI를 제외하고 생성된 코드에 적용 가능한 모든 것
사용 가능한 지침 세트. 목록 CPU 유형 값은 다음과 같습니다.
-XNUMX 월. 기본값은 다음에 사용되는 값입니다. -XNUMX 월.

-mtpf 추적
-mno-tpf-추적
추적 루틴에 TPF OS 특정 분기에 추가(추가하지 않음)하는 코드 생성
운영 체제에서. 이 옵션은 기본적으로 해제되어 있습니다.
TPF OS.

-머퓨즈드-매드
-mno-융합-매드
부동 소수점 곱하기 및 누적을 사용(사용하지 않음)하는 코드 생성
지침. 이러한 명령어는 하드웨어 부동 소수점 경우 기본적으로 생성됩니다.
사용.

-mwarn-프레임 크기=프레임 크기
현재 기능이 주어진 프레임 크기를 초과하면 경고를 내보냅니다. 왜냐하면 이것은
컴파일 타임 체크는 프로그램이 실행될 때 실제 문제가 될 필요가 없습니다. 그것
스택 오버플로를 일으킬 가능성이 가장 높은 함수를 식별하기 위한 것입니다. 그것은이다
Linux 커널과 같이 스택 크기가 제한된 환경에서 사용하면 유용합니다.

-mwarn-동적 스택
함수가 alloca를 호출하거나 동적으로 크기가 조정된 배열을 사용하는 경우 경고를 내보냅니다. 이것은
일반적으로 스택 크기가 제한된 나쁜 생각입니다.

-mstack-가드=스택 가드
-mstack-크기=스택 크기
이러한 옵션이 제공되면 s390 백엔드는
스택 크기가 다음과 같은 경우 트랩을 트리거하는 함수 프롤로그 스택 가드 위의 바이트
전에, 스택 크기 (s390의 스택은 아래쪽으로 커집니다.) 만약 스택 가드
옵션은 컴파일된 프레임 크기보다 큰 2의 최소 거듭제곱이 생략됩니다.
기능이 선택됩니다. 이 옵션은 스택 디버깅을 돕기 위해 사용됩니다.
오버플로 문제. 추가로 방출된 코드는 약간의 오버헤드만 발생시키고
따라서 더 나은 성능 없이 시스템과 같은 프로덕션에서도 사용할 수 있습니다.
하락. 주어진 값은 2의 정확한 거듭제곱이어야 하며 스택 크기 이어야한다
보다 큰 스택 가드 64k를 초과하지 않습니다. 효율적인 추가 작업을 위해
코드는 스택이 값에 정렬된 주소에서 시작한다고 가정합니다.
주어진 스택 크기. 그만큼 스택 가드 옵션은 다음과 함께만 사용할 수 있습니다.
스택 크기.

점수 옵션

다음 옵션은 점수 구현에 대해 정의됩니다.

-메브
빅 엔디안 모드에 대한 코드를 컴파일합니다. 이것이 기본값입니다.

-멜
리틀 엔디안 모드에 대한 코드를 컴파일합니다.

-mnhwloop
bcnz 명령어 생성을 비활성화합니다.

-물
정렬되지 않은 로드 및 저장 명령어 생성을 활성화합니다.

-mmac
곱하기 누산 명령어 사용을 활성화합니다. 기본적으로 비활성화되어 있습니다.

-mscore5
SCORE5를 대상 아키텍처로 지정합니다.

-mscore5u
대상 아키텍처의 SCORE5U를 지정합니다.

-mscore7
SCORE7을 대상 아키텍처로 지정합니다. 이것이 기본값입니다.

-mscore7d
SCORE7D를 대상 아키텍처로 지정합니다.

SH 옵션

Bowman의 -m 옵션은 SH 구현에 대해 정의됩니다.

-m1 SH1에 대한 코드를 생성합니다.

-m2 SH2에 대한 코드를 생성합니다.

-m2e
SH2e용 코드를 생성합니다.

-m2a-노푸
FPU 없이 SH2a용 코드를 생성하거나 다음과 같은 방식으로 SH2a-FPU용 코드를 생성합니다.
부동 소수점 단위는 사용되지 않습니다.

-m2a-단일 전용
배정밀도 부동 소수점이 없는 방식으로 SH2a-FPU용 코드를 생성합니다.
조작이 사용됩니다.

-m2a-단일
부동 소수점 단위가 단정밀도라고 가정하여 SH2a-FPU용 코드 생성
기본적으로 모드.

-m2a
부동 소수점 단위가 배정밀도라고 가정하고 SH2a-FPU용 코드 생성
기본적으로 모드.

-m3 SH3에 대한 코드를 생성합니다.

-m3e
SH3e용 코드를 생성합니다.

-m4-노푸
부동 소수점 단위 없이 SH4용 코드를 생성합니다.

-m4-단일 전용
단일 지원만 지원하는 부동 소수점 단위로 SH4용 코드 생성
정밀 산술.

-m4-단일
부동 소수점 단위가 단정밀도 모드에 있다고 가정하여 SH4용 코드 생성
기본적으로

-m4 SH4에 대한 코드를 생성합니다.

-m4a-노푸
SH4al-dsp 또는 SH4a에 대한 코드를 부동 소수점이
단위는 사용하지 않습니다.

-m4a-단일 전용
배정밀도 부동 소수점이 없는 방식으로 SH4a용 코드를 생성합니다.
조작이 사용됩니다.

-m4a-단일
부동 소수점 단위가 단정밀도라고 가정하고 SH4a에 대한 코드 생성
기본적으로 모드.

-m4a
SH4a용 코드를 생성합니다.

-m4al
과 동일 -m4a-노푸, 암시적으로 전달되는 것을 제외하고 -dsp 어셈블러에게. GCC
현재로서는 DSP 명령어를 생성하지 않습니다.

-mb 빅 엔디안 모드에서 프로세서에 대한 코드를 컴파일합니다.

-ml 리틀 엔디안 모드에서 프로세서용 코드를 컴파일합니다.

-mdalign
64비트 경계에서 두 배를 정렬합니다. 이것은 호출 규칙을 변경합니다.
따라서 다시 컴파일하지 않으면 표준 C 라이브러리의 일부 기능이 작동하지 않습니다.
그것으로 먼저 -mdalign.

-mrelax
가능하면 링크 시간에 일부 주소 참조를 줄이십시오. 링커 옵션을 사용
-편하게 하다.

-mbigtable
"스위치" 테이블에서 32비트 오프셋을 사용하십시오. 기본값은 16비트 오프셋을 사용하는 것입니다.

-엠비탑스
SH2A에서 비트 조작 명령어 사용을 활성화합니다.

-mfmovd
"fmovd" 명령 사용을 활성화합니다. 확인하다 -mdalign 정렬 제약 조건에 대해.

-미타치
Renesas가 정의한 호출 규칙을 준수합니다.

-므레네사스
Renesas가 정의한 호출 규칙을 준수합니다.

-mno-르네사스
Renesas 규칙 이전에 GCC에 대해 정의된 호출 규칙을 준수합니다.
이용 가능했습니다. 이 옵션은 SH 도구 체인의 모든 대상에 대한 기본값입니다.

-mnomac저장
"MAC" 레지스터를 call-clobbed로 표시합니다. -미타치 주어진다.

-이따
-mno-ieee
처리에 영향을 미치는 부동 소수점 비교의 IEEE 규정 준수 제어
비교 결과가 정렬되지 않은 경우. 기본적으로 -이따 is
암시적으로 활성화됩니다. 만약에 - 유한 수학 전용 사용 가능 -mno-ieee 암시적으로 설정되며,
결과적으로 더 빠른 부동 소수점 비교가 더 빠릅니다. NS
암시적 설정은 다음 중 하나를 지정하여 재정의할 수 있습니다. -이따 or -mno-ieee.

-minline-ic_invalidate
중첩 함수를 설정한 후 명령어 캐시 항목을 무효화하는 인라인 코드
트램폴린. -musermode가 유효하고 선택된 경우 이 옵션은 효과가 없습니다.
코드 생성 옵션(예: -m4)은 icbi 명령어의 사용을 허용하지 않습니다. 만약에
선택한 코드 생성 옵션은 icbi 명령어의 사용을 허용하지 않습니다.
-musermode가 적용되지 않으면 인라인 코드가 명령을 조작합니다.
연관 쓰기와 직접 캐시 주소 배열. 이것은 요구할 뿐만 아니라
특권 모드이지만 캐시 라인이 TLB를 통해 매핑된 경우에도 실패합니다.
매핑되지 않았습니다.

-사이즈를 잘못 맞추다
어셈블리 코드의 덤프 명령어 크기 및 위치.

-mpadstruct
이 옵션은 더 이상 사용되지 않습니다. 구조를 4바이트의 배수로 채웁니다.
SH ABI와 호환되지 않습니다.

-msoft-원자
원자 내장에 대한 GNU/Linux 호환 gUSA 소프트웨어 원자 시퀀스 생성
기능. 생성된 원자 시퀀스는 인터럽트 /
시스템의 예외 처리 코드이며 단일 코어 시스템에만 적합합니다.
멀티 코어 시스템에서는 제대로 작동하지 않습니다. 이 옵션은 다음에 의해 활성화됩니다.
대상이 "sh-*-linux*"인 경우 기본값입니다. 원자 내장에 대한 자세한 내용은
기능 참조 __원자 빌트인.

-mspace
속도 대신 공간에 최적화하십시오. 에 의해 암시 - 오스.

-mpfergot
위치 독립적인 코드를 생성할 때 전역 오프셋을 사용하여 함수 호출을 내보냅니다.
프로시저 연결 테이블 대신 테이블.

-muser 모드
특권 모드 전용 코드를 생성하지 마십시오. 다음과 같은 경우 -mno-inline-ic_invalidate를 의미합니다.
인라인 코드는 사용자 모드에서 작동하지 않습니다. 대상이 다음과 같을 때 기본값입니다.
"sh-*-linux*".

-다중 비용=번호
다중 숙박 시설에 대해 가정할 비용을 설정합니다.

-mdiv=전략
정수 나눗셈 연산에 사용할 나눗셈 전략을 설정합니다. SH미디어용
전략 다음 중 하나일 수 있습니다.

fp 부동 소수점 연산을 수행합니다. 이것은 매우 높은 대기 시간을 갖지만 다음이 필요합니다.
몇 가지 지침만 있으므로 코드에 충분한
컴파일러가 부동 소수점을 예약할 수 있도록 쉽게 악용할 수 있는 ILP
다른 지침과 함께 지침. XNUMX으로 나누면
부동 소수점 예외.

INV 정수 연산을 사용하여 제수의 역수를 계산한 다음
배당금에 역수를 곱합니다. 이 전략은 CSE 및 호이스팅을 허용합니다.
역 계산의. XNUMX으로 나누기는 지정되지 않은 결과를 계산하고,
그러나 트랩하지 않습니다.

인보이스:민라트
의 변형 INV CSE 또는 호이스팅 기회가 발견되지 않은 경우 또는
전체 작업이 같은 장소로 호이스트되었습니다.
역 계산은 전체를 줄이기 위해 최종 곱셈과 얽혀 있습니다.
몇 가지 더 많은 명령을 사용하여 더 적은 수의
다른 코드로 기회를 예약합니다.

전화
일반적으로 구현하는 라이브러리 함수를 호출합니다. 인보이스:민라트 전략. 이것
"m5-*media-nofpu" 컴파일에 높은 코드 밀도를 제공합니다.

call2
동일한 라이브러리 함수의 다른 진입점을 사용합니다.
룩업 테이블에 대한 포인터가 이미 설정되어 있어 포인터 로드가 노출됩니다.
CSE 및 코드 호이스팅 최적화.

인보이스:콜
인보이스:콜2
인보이스:FP
사용 INV 초기 코드 생성을 위한 알고리즘이지만 코드가 유지되는 경우
최적화되지 않은 상태로 되돌리기 전화, call2fp 전략, 각각. 참고
XNUMX으로 나누기의 잠재적인 트래핑 부작용은 별도의
모든 정수 명령어가 호이스트 아웃되는 것이 가능합니다.
그러나 부작용에 대한 마커는 그대로 유지됩니다. 에 대한 재조합
이 경우 부동 소수점 연산이나 호출이 불가능합니다.

inv20u
inv20l
의 변종 인보이스:민라트 전략. 역계산의 경우
곱하기에서 분리되지 않고 배당금이 맞는 나눗셈을 가속화합니다.
여러 번호를 건너뛰는 테스트를 삽입하여 20비트(해당되는 경우 더하기 기호)로
이 경우 작업; 이 테스트는 더 큰 배당금의 경우 속도를 늦춥니다.
inv20u 그러한 작은 배당금의 경우는 가능성이 없다고 가정하고, inv20l
가능성이 있다고 가정합니다.

SHmedia 이외의 대상용 전략 다음 중 하나일 수 있습니다.

전화 div1
단일 단계 나누기 명령 "div1"을 사용하여 라이브러리 함수를 호출하여
작업을 수행합니다. XNUMX으로 나누기는 지정되지 않은 결과를 계산하고 다음을 수행합니다.
트랩이 아닙니다. 이것은 SH4, SH2A 및 SHcompact를 제외한 기본값입니다.

호출 fp
배정밀도 부동에서 연산을 수행하는 라이브러리 함수를 호출합니다.
가리키다. XNUMX으로 나누면 부동 소수점 예외가 발생합니다. 이것은 기본값입니다
FPU가 있는 SHcompact용. double이 없는 대상에 대해 이것을 지정합니다.
정밀도 FPU는 기본적으로 "call-div1"로 설정됩니다.

콜 테이블
작은 제수에 대한 조회 테이블을 사용하는 라이브러리 함수를 호출하고
더 큰 제수에 대한 대소문자 구분이 있는 "div1" 명령어. XNUMX으로 나누기
지정되지 않은 결과를 계산하고 트랩하지 않습니다. 이것은 SH4의 기본값입니다.
동적 이동 지침이 없는 대상에 대해 이를 지정하면
기본값은 "call-div1"입니다.

분할 전략이 지정되지 않은 경우 기본 전략이 선택됩니다.
현재 목표를 기준으로 합니다. SH2A의 경우 기본 전략은 "divs"를 사용하고
라이브러리 함수 호출 대신 "divu" 명령.

-maccumulate-outgoing-args
주변이 아닌 함수 프롤로그에서 나가는 인수를 위해 공간을 한 번 예약하십시오.
각 호출. 일반적으로 성능과 크기에 유리합니다. 긴장을 푸는 데에도 필요
조건부 코드 주변의 스택 프레임 변경을 방지합니다.

-mdivsi3_libfunc=name
32비트 부호 있는 나누기에 사용되는 라이브러리 함수의 이름을 다음으로 설정합니다. name. 이
call 및 inv:call division 전략에 사용된 이름에만 영향을 미치며,
컴파일러는 여전히 동일한 입력/출력/클로버 레지스터 집합을 예상합니다.
이 옵션이 없었습니다.

-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자가 사용할 수 없는 것입니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.

-조정 해제
스로틀 언롤링을 통해 대상 레지스터 스래싱을 ​​방지합니다. 이 옵션에는
gcc 코드 베이스가 TARGET_ADJUST_UNROLL_MAX 대상 후크를 지원하는 경우 효과.

-mindexed 주소 지정
SHmedia32/SHcompact에 대해 인덱스 주소 지정 모드를 사용하도록 설정합니다. 이것은 단지
하드웨어 및/또는 OS가 인덱싱된 32비트 랩어라운드 의미 체계를 구현하는 경우 안전합니다.
주소 지정 모드. 아키텍처를 통해 64비트 프로세서를 구현할 수 있습니다.
OS가 32비트 주소 지정을 얻는 데 사용할 수 있지만 현재 하드웨어가 없기 때문에 MMU
구현은 인덱싱된 주소 지정 모드를 안전하게 만들기 위해 이 방법 또는 다른 방법을 지원합니다.
32비트 ABI에서 사용하려면 기본값은 -mno 인덱스 주소 지정.

-mgettr비용=번호
gettr 명령어에 대해 가정된 비용을 다음으로 설정합니다. 번호. 기본값은 2입니다.
-mpt 고정 유효하지 않으면 100입니다.

-mpt 고정
pt* 명령어가 트랩되지 않는다고 가정합니다. 이렇게 하면 일반적으로 더 나은 일정이 생성됩니다.
코드이지만 현재 하드웨어에서는 안전하지 않습니다. 현재 아키텍처 정의는 다음과 같이 말합니다.
그 ptabs와 ptrel은 3이 있는 대상과 3이 XNUMX일 때 트랩합니다.
분기 전에 ptabs / ptrel을 예약하는 것이 안전하지 않게 만드는 의도하지 않은 효과, 또는
루프 밖으로 들어 올리십시오. 예를 들어, 실행되는 libgcc의 일부인 __do_global_ctors
프로그램 시작 시 생성자는 -1로 구분된 목록에서 함수를 호출합니다.
-mpt-fixed 옵션을 사용하면 -1에 대해 테스트하기 전에 ptab이 수행됩니다. 저것
모든 생성자가 조금 더 빠르게 실행된다는 것을 의미하지만 루프가 올 때
목록의 끝에서 ptabs가 대상에 -1을 로드하기 때문에 프로그램이 충돌합니다.
등록하다. 이 옵션은 현재를 구현하는 모든 하드웨어에 안전하지 않기 때문에
아키텍처 사양에서 기본값은 -mno-pt-fixed입니다. 사용자가 지정하지 않는 한
특정 비용 -mgettr비용, -mno-pt-fixed도 의미합니다. -mgtrcost=100; 이
일반 정수를 저장하기 위한 대상 레지스터를 사용하여 레지스터 할당을 억제합니다.

-최소 유효 기호
기호가 유효하지 않을 수 있다고 가정합니다. 컴파일러에서 생성한 일반 함수 기호
movi/shori/ptabs 또는 movi/shori/ptrel로 로드하는 데 항상 유효하지만
어셈블러 및/또는 링커 트릭을 유발하는 기호를 생성할 수 있습니다.
ptabs / ptrel을 트랩합니다. 이 옵션은 다음과 같은 경우에만 의미가 있습니다. -mno-pt 고정
효과. 그런 다음 교차 기본 블록 cse, 호이스팅 및 대부분의 스케줄링을 방지합니다.
기호 로드. 기본값은 -mno-무효 기호.

-mbranch 비용=NUM
취하다 NUM 분기 명령에 대한 비용이 됩니다. 숫자가 높을수록
컴파일러는 가능한 경우 더 많은 분기 없는 코드를 생성하려고 합니다. 지정하지 않은 경우
값은 컴파일되는 프로세서 유형에 따라 선택됩니다.

-mcbranchdi
"cbranchdi4" 명령 패턴을 활성화합니다.

-mcmpeqdi
경우에도 "cmpeqdi_t" 명령 패턴을 내보냅니다. -mcbranchdi 유효합니다.

-머퓨즈드-매드
다음과 같은 경우 "fmac" 명령어(부동 소수점 곱하기 누산)의 사용을 허용합니다.
프로세서 유형이 지원합니다. 이 옵션을 활성화하면 다음을 생성하는 코드가 생성될 수 있습니다.
엄격한 IEEE 754 산술과 비교하여 다른 숫자 부동 소수점 결과.

-척-cmove
조건부 이동 명령에 대해 제로 변위 조건부 분기를 선호합니다.
패턴. 이로 인해 SH4 프로세서에서 더 빠른 코드가 생성될 수 있습니다.

솔라리스 2 옵션

Bowman의 -m 옵션은 Solaris 2에서 지원됩니다.

-불순한 텍스트
-불순한 텍스트, 이외에 사용 -공유, 컴파일러에게 전달하지 않도록 지시합니다. -z 본문
공유 개체를 연결할 때 링커. 이 옵션을 사용하여 위치를 연결할 수 있습니다.
종속 코드를 공유 개체로.

-불순한 텍스트 "재배치는 할당 가능하지만 쓰기 불가능에 대해 유지됩니다.
섹션" 링커 오류 메시지가 표시됩니다. 그러나 필요한 재배치는 복사를 트리거합니다.
쓰기 중이며 공유 개체는 실제로 프로세스 간에 공유되지 않습니다. 대신에
사용 -불순한 텍스트, 모든 소스 코드를 다음으로 컴파일해야 합니다. -fpic or -fPIC.

이러한 스위치는 Solaris 2에서 위에 추가로 지원됩니다.

-pthread
POSIX 스레드 라이브러리를 사용하여 멀티스레딩에 대한 지원을 추가합니다. 이 옵션은
전처리기와 링커 모두에 대한 플래그입니다. 이 옵션은 스레드에 영향을 미치지 않습니다.
컴파일러 또는 컴파일러와 함께 제공되는 라이브러리에 의해 생성된 개체 코드의 안전성.

-pthread
이것은 동의어입니다 -pthread.

SPARC 옵션

Bowman의 -m 옵션은 SPARC에서 지원됩니다.

-mno-app-regs
-map-regs
지정 -map-regs 전역 레지스터 2~4를 사용하여 출력을 생성합니다.
SPARC SVR4 ABI는 애플리케이션용으로 예약되어 있습니다. 전역 레지스터 1과 마찬가지로 각 전역
레지스터 2에서 4는 다음으로 클로버되는 할당 가능한 레지스터로 처리됩니다.
함수 호출. 이것이 기본값입니다.

약간의 성능 손실을 감수하면서 완전히 SVR4 ABI를 준수하려면 다음을 지정하십시오.
-mno-app-regs. 이 옵션을 사용하여 라이브러리와 시스템 소프트웨어를 컴파일해야 합니다.

-m플랫
-mno-플랫
-m플랫, 컴파일러는 저장/복원 명령을 생성하지 않고
"플랫" 또는 단일 레지스터 창 모델. 이 모델은 일반
윈도우 모델을 등록합니다. 로컬 레지스터와 입력 레지스터(0--5)는 여전히
"호출 저장" 레지스터로 취급되며 필요에 따라 스택에 저장됩니다.

-mno-플랫 (기본값), 컴파일러는 저장/복원 명령을 생성합니다(예외
리프 함수의 경우). 이것은 정상 작동 모드입니다.

-mfpu
-mhard-float
부동 소수점 명령어가 포함된 출력을 생성합니다. 이것이 기본값입니다.

-mno-fpu
-msoft-float
부동 소수점에 대한 라이브러리 호출이 포함된 출력을 생성합니다. 경고: 필수
모든 SPARC 대상에 대해 라이브러리를 사용할 수 있는 것은 아닙니다. 일반적으로 시설의
기계의 일반적인 C 컴파일러가 사용되지만 이것은 교차에서 직접 수행될 수 없습니다.
편집. 적절한 라이브러리를 제공하기 위해 스스로 준비해야 합니다.
크로스 컴파일을 위한 함수 임베디드 타겟 스파크-*-아웃스파클라이트-*-*
소프트웨어 부동 소수점 지원을 제공하십시오.

-msoft-float 출력 파일의 호출 규칙을 변경합니다. 그러므로 그것은 단지
컴파일하면 유용합니다. 모든 이 옵션이 있는 프로그램의 특히, 당신은
편집하다 libgcc.a, GCC와 함께 제공되는 라이브러리, -msoft-float 이를 위해
작동합니다.

-mhard-quad-float
쿼드 워드(long double) 부동 소수점 명령어를 포함하는 출력을 생성합니다.

-msoft-쿼드-플로트
쿼드 워드(long double) 부동 소수점에 대한 라이브러리 호출을 포함하는 출력 생성
지침. 호출된 기능은 SPARC ABI에 지정된 기능입니다. 이것이
태만.

이 글을 쓰는 시점에서 하드웨어를 지원하는 SPARC 구현은 없습니다.
쿼드 워드 부동 소수점 명령어. 그들은 모두 다음 중 하나에 대한 트랩 처리기를 호출합니다.
이러한 명령을 수행하면 트랩 처리기가 명령의 효과를 에뮬레이트합니다.
트랩 핸들러 오버헤드로 인해 ABI 라이브러리를 호출하는 것보다 훨씬 느립니다.
루틴. 그래서 -msoft-쿼드-플로트 옵션이 기본값입니다.

-mno-unaligned-double
-munaligned-더블
double에는 8바이트 정렬이 있다고 가정합니다. 이것이 기본값입니다.

-munaligned-더블, GCC는 double이 다음과 같은 경우에만 8바이트 정렬을 갖는다고 가정합니다.
다른 유형에 포함되거나 절대 주소가 있는 경우. 그렇지 않으면
4바이트 정렬이 있다고 가정합니다. 이 옵션을 지정하면 일부 희귀
다른 컴파일러에 의해 생성된 코드와의 호환성 문제. 기본값이 아닙니다.
특히 부동 소수점 코드의 경우 성능 손실이 발생하기 때문입니다.

-mno-빠른 구조
-mfaster-구조체
-mfaster-구조체, 컴파일러는 구조에 8바이트가 있어야 한다고 가정합니다.
조정. 이를 통해 사본에 대해 "ldd" 및 "std" 명령어 쌍을 사용할 수 있습니다.
구조 할당에서 "ld" 및 "st" 쌍의 두 배 대신. 그러나, 그
이 변경된 정렬을 사용하면 SPARC ABI를 직접 위반합니다. 따라서 의도된
개발자가 결과 코드가
ABI의 규칙에 직접적으로 부합하지 않습니다.

-mcpu =CPU_유형
명령어 세트, 레지스터 세트 및 명령어 스케줄링 매개변수 설정
기계 유형 CPU_유형. 지원되는 값 CPU_유형 are v7, 사이프러스, v8, 초석,
하이퍼스파크, 레온, 스파클라이트, f930, f934, 스파클라이트86x, 스파클렛, tsc701, v9,
극초단파, 극초단파3, 나이아가라, 나이아가라 2, 나이아가라 3나이아가라 4.

기본 Solaris 및 GNU/Linux 도구 모음도 값을 지원합니다. 출신, 선택
호스트 프로세서를 위한 최고의 아키텍처 옵션입니다. -mcpu=네이티브 경우에는 효과가 없습니다
GCC가 프로세서를 인식하지 못합니다.

기본 명령어 스케줄링 매개변수는 다음을 선택하는 값에 사용됩니다.
구현이 아니라 아키텍처입니다. 이것들은 v7, v8, 스파클라이트, 스파클렛, v9.

다음은 지원되는 각 아키텍처 및 지원되는 구현 목록입니다.

v7 사이프러스

v8 슈퍼스파크, 하이퍼스파크, 레온

스파클라이트
f930, f934, 스파클라이트86x

스파클렛
tsc701

v9 ultrasparc, ultrasparc3, ​​나이아가라, 나이아가라2, 나이아가라3, 나이아가라4

기본적으로(달리 구성하지 않는 한) GCC는 V7 변형에 대한 코드를 생성합니다.
SPARC 아키텍처. 와 함께 -mcpu=사이프러스, 컴파일러는 추가로 최적화합니다.
SPARCStation/SPARCServer 7xx 시리즈에서 사용되는 Cypress CY602C3 칩. 이것은
또한 이전 SPARCStation 1, 2, IPX 등에 적합합니다.

-mcpu=v8, GCC는 SPARC 아키텍처의 V8 변형에 대한 코드를 생성합니다. NS
V7 코드와의 유일한 차이점은 컴파일러가 정수 곱하기 및
SPARC-V8에는 있지만 SPARC-V7에는 없는 정수 나누기 명령어. 와 함께
-mcpu=슈퍼스파크, 컴파일러는 SuperSPARC 칩에 대해 추가로 최적화합니다.
SPARCStation 10, 1000 및 2000 시리즈에서 사용됩니다.

-mcpu=스파클라이트, GCC는 SPARC의 SPARClite 변형에 대한 코드를 생성합니다.
건축학. 이것은 정수 곱하기, 정수 나누기 단계 및 스캔("ffs")을 추가합니다.
SPARClite에는 있지만 SPARC-V7에는 없는 명령어. 와 함께 -mcpu=f930Walk Through California 프로그램,
컴파일러는 원래 Fujitsu MB86930 칩에 대해 추가로 최적화합니다.
FPU가 없는 SPARClite. 와 함께 -mcpu=f934, 컴파일러는 추가로 최적화합니다.
FPU가 있는 최신 SPARClite인 Fujitsu MB86934 칩.

-mcpu=스파클렛, GCC는 SPARC의 SPARClet 변형에 대한 코드를 생성합니다.
건축학. 이것은 정수 곱하기, 곱하기/누적하기, 정수 나누기를 추가합니다.
SPARClet에는 있지만 SPARC-V7에는 없는 단계 및 스캔("ffs") 명령. 와 함께
-mcpu=tsc701, 컴파일러는 TEMIC SPARClet 칩에 대해 추가로 최적화합니다.

-mcpu=v9, GCC는 SPARC 아키텍처의 V9 변형에 대한 코드를 생성합니다. 이것
64비트 정수 및 부동 소수점 이동 명령어 추가, 3개의 추가 부동 소수점
조건 코드 레지스터 및 조건부 이동 명령. 와 함께 -mcpu=울트라스파크,
컴파일러는 Sun UltraSPARC I/II/IIi 칩에 대해 추가로 최적화합니다. 와 함께
-mcpu=ultraparc3, 컴파일러는 Sun UltraSPARC에 대해 추가로 최적화합니다.
III/III+/IIIi/IIIi+/IV/IV+ 칩. 와 함께 -mcpu=나이아가라, 컴파일러는 추가로
Sun UltraSPARC T1 칩에 최적화합니다. 와 함께 -mcpu=나이아가라2, 컴파일러
Sun UltraSPARC T2 칩에 대해 추가로 최적화합니다. 와 함께 -mcpu=나이아가라3Walk Through California 프로그램,
컴파일러는 Sun UltraSPARC T3 칩에 대해 추가로 최적화합니다. 와 함께 -mcpu=나이아가라4,
컴파일러는 Sun UltraSPARC T4 칩에 대해 추가로 최적화합니다.

-mtune=CPU_유형
머신 유형에 대한 명령어 스케줄링 매개변수 설정 CPU_유형, 그러나 설정하지 마십시오
옵션을 나타내는 명령어 세트 또는 레지스터 세트 -mcpu =CPU_유형 할 것이다.

에 대한 동일한 값 -mcpu =CPU_유형 사용할 수 있습니다 -mtune=CPU_유형, 그러나 유일한
유용한 값은 특정 CPU 구현을 선택하는 값입니다. 사람들은
사이프러스, 초석, 하이퍼스파크, 레온, f930, f934, 스파클라이트86x, tsc701, 극초단파,
극초단파3, 나이아가라, 나이아가라 2, 나이아가라 3나이아가라 4. 기본 Solaris 및
GNU/리눅스 툴체인, 출신 또한 사용될 수있다.

-mv8plus
-mno-v8plus
-mv8plus, GCC는 SPARC-V8+ ABI용 코드를 생성합니다. V8과의 차이점
ABI는 전역 및 출력 레지스터가 64비트 너비로 간주된다는 것입니다. 이것은 활성화되어 있습니다
기본적으로 모든 SPARC-V32 프로세서에 대해 9비트 모드의 Solaris.

-mvis
-mno-vis
-mvis, GCC는 UltraSPARC Visual을 활용하는 코드를 생성합니다.
명령어 세트 확장. 기본값은 -mno-vis.

-mvis2
-mno-vis2
-mvis2, GCC는 UltraSPARC 버전 2.0을 활용하는 코드를 생성합니다.
비주얼 명령어 세트 확장. 기본값은 -mvis2 CPU를 대상으로 할 때
UltraSPARC-III 이상과 같은 명령을 지원합니다. 환경 -mvis2 또한
세트 -mvis.

-mvis3
-mno-vis3
-mvis3, GCC는 UltraSPARC 버전 3.0을 활용하는 코드를 생성합니다.
비주얼 명령어 세트 확장. 기본값은 -mvis3 CPU를 대상으로 할 때
niagara-3 이상과 같은 지침을 지원합니다. 환경 -mvis3 또한 세트
-mvis2-mvis.

-mpoc
-mno-popc
-mpoc, GCC는 UltraSPARC 모집단을 활용하는 코드를 생성합니다.
계산 지시. 기본값은 -mpoc 이러한 기능을 지원하는 CPU를 대상으로 할 때
Niagara-2 이상과 같은 지침.

-mfmaf
-mno-fmaf
-mfmaf, GCC는 UltraSPARC Fused Multiply-
부동 소수점 확장을 추가합니다. 기본값은 -mfmaf CPU를 대상으로 할 때
Niagara-3 이상과 같은 지침을 지원합니다.

-mfix-at697f
Atmel AT697F 프로세서의 단일 정오표에 대해 문서화된 해결 방법을 활성화합니다.
(AT13E 프로세서의 정오표 #697에 해당).

Bowman의 -m 옵션은 9비트의 SPARC-V64 프로세서에서 위에 추가로 지원됩니다.
환경 :

-m32
-m64
32비트 또는 64비트 환경용 코드를 생성합니다. 32비트 환경은 int,
long 및 32비트에 대한 포인터입니다. 64비트 환경은 int를 32비트로 설정하고 long 및
64비트에 대한 포인터.

-mc모델=어느
코드 모델을 다음 중 하나로 설정합니다.

메들로
중간/낮음 코드 모델: 64비트 주소, 프로그램은 낮은 32비트로 연결되어야 합니다.
메모리 비트. 프로그램은 정적으로 또는 동적으로 링크될 수 있습니다.

중간
중간/중간 코드 모델: 64비트 주소, 프로그램은 낮은
44비트 메모리, 텍스트 및 데이터 세그먼트의 크기는 2GB 미만이어야 하며
데이터 세그먼트는 텍스트 세그먼트의 2GB 이내에 있어야 합니다.

메다니
Medium/Anywhere 코드 모델: 64비트 주소, 프로그램은 어디에서나 링크될 수 있음
메모리에서 텍스트 및 데이터 세그먼트의 크기는 2GB 미만이어야 하며 데이터는
세그먼트는 텍스트 세그먼트의 2GB 이내에 있어야 합니다.

엠메다니
임베디드 시스템을 위한 Medium/Anywhere 코드 모델: 64비트 주소, 텍스트
데이터 세그먼트는 크기가 2GB 미만이어야 하며 둘 다 메모리의 아무 곳에서나 시작해야 합니다.
(링크 시간에 결정됨). 전역 레지스터 %g4는 데이터의 기준을 가리킵니다.
분절. 프로그램은 정적으로 연결되어 있으며 PIC는 지원되지 않습니다.

-메모리 모델=메모리 모델
프로세서에 적용되는 메모리 모델을 다음 중 하나로 설정합니다.

디폴트 값
프로세서 및 운영 체제의 기본 메모리 모델입니다.

rmo 릴렉스 메모리 오더

pso 부분 상점 주문

tso 총 매장 주문

sc 순차 일관성

이러한 메모리 모델은 Sparc V9 아키텍처의 부록 D에 공식적으로 정의되어 있습니다.
프로세서의 "PSTATE.MM" 필드에 설정된 대로 수동.

-mstack 바이어스
-mno-스택-바이어스
-mstack 바이어스, GCC는 스택 포인터와 프레임 포인터(있는 경우),
스택 프레임 참조를 만들 때 다시 추가해야 하는 -2047만큼 오프셋됩니다. 이것
64비트 모드의 기본값입니다. 그렇지 않으면 그러한 오프셋이 존재하지 않는다고 가정합니다.

SPU 옵션

Bowman의 -m 옵션은 SPU에서 지원됩니다.

-Mwarn-Reloc
-mererror-reloc
SPU용 로더는 동적 재배치를 처리하지 않습니다. 기본적으로 GCC는
동적 재배치가 필요한 코드를 생성할 때 오류가 발생합니다. -mno-오류-재배치
오류를 비활성화하고, -Mwarn-Reloc 대신 경고를 생성합니다.

-msafe-dma
-munsafe-dma
DMA를 시작하거나 완료를 테스트하는 명령은 다음으로 재정렬되어서는 안 됩니다.
액세스 중인 메모리의 로드 및 저장과 관련하여 사용자는 일반적으로
volatile 키워드를 사용하여 이 문제를 해결하지만 코드가 비효율적일 수 있습니다.
기억이 변하지 않는 것으로 알려진 장소에서. 메모리를 다음과 같이 표시하는 것보다
volatile은 DMA 명령어를 잠재적으로 모든 메모리에 영향을 미치는 것으로 취급합니다. 와 함께
-munsafe-dma 사용자는 volatile 키워드를 사용하여 메모리 액세스를 보호해야 합니다.

-mbranch 힌트
기본적으로 GCC는 파이프라인 중단을 피하기 위해 분기 힌트 명령을 생성합니다.
항상 취했거나 아마도 가지를 취했을 것입니다. 힌트는 8보다 가까이 생성되지 않습니다.
분기에서 멀리 떨어진 지시. 다음을 제외하고는 비활성화할 이유가 거의 없습니다.
디버깅 목적, 또는 개체를 조금 더 작게 만들기 위한 것입니다.

-msmall-mem
-mlarge-mem
기본적으로 GCC는 주소가 18비트보다 크지 않다는 가정 하에 코드를 생성합니다.
-mlarge-mem 전체 32비트 주소를 가정하는 코드가 생성됩니다.

-mstdmain
기본적으로 GCC는 SPU 스타일의 주요 기능을 가정하는 시작 코드에 대해 링크합니다.
인터페이스(전통적인 매개변수 목록이 있음). 와 함께 -mstdmain, GCC가 연결됩니다
"main"에 대한 C99 스타일 인터페이스를 가정하는 시작 코드에 대한 프로그램,
"argv" 문자열의 로컬 복사본을 포함합니다.

-m고정 범위=레지스터 범위
주어진 레지스터 범위를 고정 레지스터로 취급하는 코드를 생성합니다. 고정 레지스터
레지스터 할당자가 사용할 수 없는 것입니다. 이것은 커널을 컴파일할 때 유용합니다.
암호. 레지스터 범위는 대시로 구분된 두 개의 레지스터로 지정됩니다. 다수의
레지스터 범위는 쉼표로 구분하여 지정할 수 있습니다.

-mea32
-mea64
"__ea"를 통해 액세스되는 PPU 주소 공간에 대한 포인터를 가정하여 코드를 컴파일합니다.
명명된 주소 공간 한정자는 32비트 또는 64비트 너비입니다. 기본값은 32비트입니다.
ABI 변경 옵션이므로 실행 파일의 모든 개체 코드를 컴파일해야 합니다.
같은 설정으로.

-maddress 공간 변환
-mno 주소 공간 변환
"__ea" 주소 공간을 일반 주소의 상위 집합으로 처리하는 것을 허용/비허용
우주. 이것은 "__ea"와 제네릭 포인터 사이의 명시적 유형 캐스트를 가능하게 합니다.
"__ea" 포인터에 대한 일반 포인터의 암시적 변환. 기본값은 허용
주소 공간 포인터 변환

-mcache 크기=캐시 크기
이 옵션은 컴파일러가 실행 파일에 연결하는 libgcc 버전을 제어합니다.
"__ea" 주소의 변수에 액세스하기 위해 소프트웨어 관리 캐시를 선택합니다.
특정 캐시 크기의 공간. 가능한 옵션 캐시 크기 are 8, 16, 32, 64
128. 기본 캐시 크기는 64KB입니다.

-마토믹 업데이트
-mno-원자 업데이트
이 옵션은 컴파일러가 실행 파일에 연결하는 libgcc 버전을 제어합니다.
PPU 측 변수의 소프트웨어 관리 캐시에 대한 원자 업데이트 여부를 선택합니다.
사용됩니다. 원자 업데이트를 사용하는 경우 다음을 사용하여 SPU 코드에서 PPU 변수로 변경합니다.
"__ea"라는 이름의 주소 공간 한정자는 다른 PPU에 대한 변경을 방해하지 않습니다.
PPU 코드의 동일한 캐시 라인에 있는 변수. 원자를 사용하지 않는 경우
업데이트, 이러한 간섭이 발생할 수 있습니다. 그러나 캐시 라인을 다시 쓰는 것은
효율적인. 기본 동작은 원자적 업데이트를 사용하는 것입니다.

-mdual-nops
-mdual-nops=n
기본적으로 GCC는 증가할 것으로 예상되는 경우 이중 문제를 증가시키기 위해 nops를 삽입합니다.
성능을 제공합니다. n 0에서 10 사이의 값이 될 수 있습니다. n 더 적은 수의 nops를 삽입합니다. 10
는 기본값이고 0은 다음과 같습니다. -mno-dual-nops. 장애인 - 오스.

-mint-max-nops=n
분기 힌트에 대해 삽입할 최대 nops 수입니다. 분기 힌트는 8 이상이어야 합니다.
명령을 실행 중인 지점에서 멀리 떨어뜨립니다. GCC는 최대 n
이를 적용하지 않으면 분기 힌트가 생성되지 않습니다.

-mint-max-distance=n
분기 힌트 명령어의 인코딩은 힌트를 256 이내로 제한합니다.
영향을 미치는 지점의 지침. 기본적으로 GCC는
125.

-msafe-힌트
SPU를 무기한 정지시키는 하드웨어 버그를 해결하십시오. 기본적으로 GCC
이 지연이 발생하지 않도록 "hbrp" 명령을 삽입합니다.

옵션 for V

이러한 추가 옵션은 다른 시스템과의 호환성을 위해 System V 릴리스 4에서 사용할 수 있습니다.
해당 시스템의 컴파일러:

-G 공유 개체를 만듭니다. 다음을 수행하는 것이 좋습니다. - 상징적 or -공유 대신 사용하십시오.

-Qy ".ident" 어셈블러에서 컴파일러가 사용하는 각 도구의 버전을 식별합니다.
출력의 지시문.

-Qn 출력 파일에 ".ident" 지시문을 추가하지 마십시오(기본값).

- 응,dirs
디렉토리 검색 dirs로 지정된 라이브러리의 경우 -l.

-음,DIR
디렉토리를 살펴보세요 DIR M4 전처리기를 찾습니다. 어셈블러는 이것을 사용합니다.
옵션을 선택합니다.

타일-Gx 옵션

Bowman의 -m 옵션은 TILE-Gx에서 지원됩니다.

-mcpu =name
대상으로 할 CPU 유형을 선택합니다. 현재 지원되는 유일한 유형은 타일 ​​엑스.

-m32
-m64
32비트 또는 64비트 환경용 코드를 생성합니다. 32비트 환경은 int,
long, 32비트에 대한 포인터. 64비트 환경은 int를 32비트로 설정하고 long 및
64비트에 대한 포인터.

타일프로 옵션

Bowman의 -m 옵션은 TILEPro에서 지원됩니다.

-mcpu =name
대상으로 할 CPU 유형을 선택합니다. 현재 지원되는 유일한 유형은 타일프로.

-m32
int, long 및 포인터를 32비트로 설정하는 32비트 환경용 코드를 생성합니다.
이것은 유일하게 지원되는 동작이므로 플래그는 기본적으로 무시됩니다.

V850 옵션

Bowman의 -m 옵션은 V850 구현에 대해 정의됩니다.

-mlong-통화
-mno-long-통화
모든 통화를 멀리(가까운) 것으로 처리합니다. 통화가 멀리 있다고 가정하면
컴파일러는 항상 함수 주소를 레지스터에 로드하고 간접적으로 호출합니다.
포인터를 통해.

-mno-ep
-mep
동일한 인덱스 포인터 4 이상을 사용하는 기본 블록을 최적화(최적화)하지 마십시오.
포인터를 "ep" 레지스터에 복사하고 더 짧은 "sld" 및 "sst"를 사용합니다.
지침. NS -mep 옵션은 최적화하는 경우 기본적으로 켜져 있습니다.

-mno-prolog-함수
-mprolog-함수
프롤로그에서 레지스터를 저장하고 복원하기 위해 외부 기능을 사용하지 마십시오.
그리고 기능의 에필로그. 외부 기능은 느리지만 더 적은 코드를 사용합니다.
둘 이상의 함수가 동일한 수의 레지스터를 저장하는 경우 공간. NS
-mprolog-함수 옵션은 최적화하는 경우 기본적으로 켜져 있습니다.

-mspace
코드를 가능한 한 작게 만드십시오. 현재, 이것은 단지 켜집니다 -mep
-mprolog-함수 옵션을 제공합니다.

-mtda =n
크기가 다음과 같은 정적 또는 전역 변수를 넣습니다. n 작은 데이터 영역에 바이트 이하
"ep"가 가리키는 레지스터. 작은 데이터 영역은 총 256바이트까지 저장할 수 있습니다.
(바이트 참조의 경우 128바이트).

-msda=n
크기가 다음과 같은 정적 또는 전역 변수를 넣습니다. n 작은 데이터 영역에 바이트 이하
"gp"가 가리키는 레지스터. 작은 데이터 영역은 최대 64킬로바이트를 저장할 수 있습니다.

-mzda=n
크기가 다음과 같은 정적 또는 전역 변수를 넣습니다. n 처음 32바이트 이하
킬로바이트의 메모리.

-mv850
대상 프로세서가 V850임을 지정하십시오.

-mbig 스위치
큰 스위치 테이블에 적합한 코드를 생성합니다. 다음과 같은 경우에만 이 옵션을 사용하십시오.
어셈블러/링커가 스위치 테이블 내의 범위를 벗어난 분기에 대해 불평합니다.

-map-regs
이 옵션을 사용하면 컴파일러에서 생성한 코드에서 r2 및 r5가 사용됩니다.
이 설정은 기본값입니다.

-mno-app-regs
이 옵션을 사용하면 r2 및 r5가 고정 레지스터로 처리됩니다.

-mv850e2v3
대상 프로세서가 V850E2V3임을 지정하십시오. 전처리기 상수
__v850e2v3__ 이 옵션을 사용하는 경우 정의됩니다.

-mv850e2
대상 프로세서가 V850E2임을 지정하십시오. 전처리기 상수
__v850e2__ 이 옵션을 사용하는 경우 정의됩니다.

-mv850e1
대상 프로세서가 V850E1임을 지정하십시오. 전처리기 상수
__v850e1____v850e__ 이 옵션을 사용하는 경우 정의됩니다.

-mv850es
대상 프로세서가 V850ES임을 지정하십시오. 에 대한 별칭입니다. -mv850e1
옵션을 선택합니다.

-mv850e
대상 프로세서가 V850E임을 지정하십시오. 전처리기 상수 __v850e__
이 옵션을 사용하는 경우 정의됩니다.

둘 다 -mv850 ...도 아니다 -mv850e ...도 아니다 -mv850e1 ...도 아니다 -mv850e2 ...도 아니다 -mv850e2v3 정의된다
그러면 기본 대상 프로세서가 선택되고 관련 __v850*__ 전 처리기
상수가 정의됩니다.

전처리기 상수 __v850__v851__ 상관없이 항상 정의됩니다.
프로세서 변형이 대상입니다.

-mdisable-callt
이 옵션은 v850e, v850e1,
v850 아키텍처의 v2e850 및 v2e3v850 특징. 기본값은
-mno-비활성화-콜트 CALLT 명령어를 사용할 수 있도록 합니다.

백스 옵션

Bowman의 -m 옵션은 VAX에 대해 정의됩니다.

-뮤닉스
Unix 어셈블러가 실행하는 특정 점프 명령("aobleq" 등)을 출력하지 마십시오.
VAX는 장거리를 처리할 수 없습니다.

-mgnu
로 조립한다는 가정 하에 해당 점프 명령을 출력하십시오.
GNU 어셈블러.

-mg D 형식 대신 G 형식 부동 소수점 숫자에 대한 출력 코드입니다.

VxWorks 옵션

이 섹션의 옵션은 모든 VxWorks 대상에 대해 정의됩니다. 특정 옵션
대상 하드웨어는 해당 대상에 대한 다른 옵션과 함께 나열됩니다.

-mrtp
GCC는 VxWorks 커널과 실시간 프로세스(RTP) 모두에 대한 코드를 생성할 수 있습니다. 이것
옵션은 전자에서 후자로 전환됩니다. 또한 전처리기 매크로를 정의합니다.
"__RTP__".

-비정적
정적 라이브러리가 아닌 공유 라이브러리에 대해 RTP 실행 파일을 링크합니다. NS
옵션 -공전-공유 RTP에도 사용할 수 있습니다. -공전 기본값입니다.

-비정적
-비다이나믹
이러한 옵션은 링커로 전달됩니다. 다음과의 호환성을 위해 정의됩니다.
디아브.

-Xbind-게으른
함수 호출의 지연 바인딩을 활성화합니다. 이 옵션은 다음과 같습니다. -Wl,-z,지금 이고
Diab와의 호환성을 위해 정의되었습니다.

-X바인드-지금
함수 호출의 지연 바인딩을 비활성화합니다. 이 옵션은 기본값이며 다음에 대해 정의됩니다.
디아브와의 호환성

x86-64 옵션

이들은 아래에 나열됩니다

Xstormy16 옵션

다음 옵션은 Xstormy16에 대해 정의됩니다.

-msim
시뮬레이터에 적합한 시작 파일과 링커 스크립트를 선택하십시오.

엑스텐사 옵션

다음 옵션은 Xtensa 대상에 대해 지원됩니다.

-mconst16
-mno-const16
상수 값을 로드하기 위한 "CONST16" 명령어 사용을 활성화 또는 비활성화합니다. NS
"CONST16" 명령어는 현재 Tensilica의 표준 옵션이 아닙니다. 언제
활성화된 경우 "CONST16" 명령어는 항상 표준 "L32R" 대신 사용됩니다.
지침. "CONST16"의 사용은 "L32R"이
지시를 사용할 수 없습니다.

-머퓨즈드-매드
-mno-융합-매드
통합 곱하기/더하기 및 곱하기/빼기 명령어 사용을 활성화 또는 비활성화합니다.
부동 소수점 옵션. 부동 소수점 옵션도 설정되지 않은 경우에는 효과가 없습니다.
활성화. 융합된 곱하기/더하기 및 곱하기/빼기 명령어를 비활성화하면
컴파일러는 곱하기 및 더하기/빼기 연산에 대해 별도의 명령어를 사용합니다.
이것은 엄격한 IEEE 754 준수 결과가 필요한 일부 경우에 바람직할 수 있습니다.
필수: 융합된 곱하기 더하기/빼기 명령어는 중간을 반올림하지 않습니다.
결과를 통해 결과를 생성합니다. 배우기 에 의해 지정된 것보다 정밀도 비트
IEEE 표준. 융합 곱하기 더하기/빼기 명령어를 비활성화하면
프로그램 출력은 곱하기와 곱하기를 결합하는 컴파일러의 기능에 민감하지 않습니다.
더하기/빼기 연산.

- 직렬화 - 휘발성
-mno 직렬화 휘발성
이 옵션이 활성화되면 GCC는 "휘발성" 메모리 앞에 "MEMW" 명령어를 삽입합니다.
순차 일관성을 보장하기 위한 참조. 기본값은 - 직렬화 - 휘발성.
-mno 직렬화 휘발성 "MEMW" 명령을 생략합니다.

-mforce-no-pic
모든 사용자 모드 Xtensa 코드가 다음 위치에 있어야 하는 GNU/Linux와 같은 대상의 경우
PIC(독립 코드)에서 이 옵션은 커널 코드를 컴파일하기 위해 PIC를 비활성화합니다.

-mtext-섹션-리터럴
-mno-텍스트-섹션-리터럴
리터럴 풀의 처리를 제어합니다. 기본값은 -mno-텍스트-섹션-리터럴,
출력 파일의 별도 섹션에 리터럴을 배치합니다. 이것은 허용
리터럴 풀은 데이터 RAM/ROM에 배치되며 링커가 결합할 수도 있습니다.
중복 리터럴을 제거하고 코드를 개선하기 위해 별도의 개체 파일에서 리터럴 풀
크기. 와 함께 -mtext-섹션-리터럴, 리터럴은 텍스트 섹션에 산재되어 있습니다.
가능한 한 참조에 가깝게 유지하기 위해. 이것은 필요할 수 있습니다
큰 어셈블리 파일의 경우.

-mtarget-정렬
-mno-타겟-정렬
이 옵션이 활성화되면 GCC는 어셈블러가 자동으로 정렬하도록 지시합니다.
일부 코드 밀도를 희생시키면서 분기 패널티를 줄이기 위한 명령. NS
어셈블러는 분기 타겟을 정렬하기 위해 밀도 명령을 확장하려고 시도하고
호출 지시에 따른 지시. 선행 안전장치가 충분하지 않은 경우
밀도 명령을 사용하여 대상을 정렬하면 확대가 수행되지 않습니다. 기본값은
-mtarget-정렬. 이 옵션은 자동 정렬 처리에 영향을 미치지 않습니다.
어셈블러가 확장하거나 확장하여 항상 정렬하는 "LOOP"와 같은 명령
밀도 지침 또는 무작동 지침을 삽입합니다.

-긴 통화
-mno-longcalls
이 옵션이 활성화되면 GCC는 직접 호출을 다음으로 변환하도록 어셈블러에 지시합니다.
직접 호출의 대상이
호출 명령이 허용하는 범위. 이 번역은 일반적으로
다른 소스 파일의 기능. 특히, 어셈블러는 직접
"CALL" 명령어를 "L32R"로 입력한 다음 "CALLX" 명령어를 입력합니다. 기본값은
-mno-longcalls. 이 옵션은 호출 대상이 다음을 수행할 수 있는 프로그램에서 사용해야 합니다.
잠재적으로 범위를 벗어납니다. 이 옵션은 어셈블리가 아니라 어셈블러에서 구현됩니다.
컴파일러, 따라서 GCC에 의해 생성된 어셈블리 코드는 여전히 직접 호출을 표시합니다.
지침 --- 실제 지침을 보려면 디스어셈블된 개체 코드를 확인하십시오.
어셈블러는 파일 간 호출뿐만 아니라 모든 파일 간 호출에 대해 간접 호출을 사용합니다.
정말 범위를 벗어날 것입니다.

z 시리즈 옵션

이들은 아래에 나열됩니다

옵션 for 암호 세대 협약
이러한 기계 독립적인 옵션은 코드에서 사용되는 인터페이스 규칙을 제어합니다.
세대.

그들 대부분은 긍정적인 형태와 부정적인 형태를 모두 가지고 있습니다. 의 부정적인 형태 - 푸푸
-fno-foo. 아래 표에는 양식 중 하나만 나열되어 있습니다. --- 양식이 아닌 것은
기본. 다음 중 하나를 제거하여 다른 형식을 파악할 수 있습니다. 아니 - 또는 추가합니다.

-fbounds-체크
이를 지원하는 프런트 엔드의 경우 인덱스가 다음 작업에 사용되었는지 확인하는 추가 코드를 생성합니다.
액세스 배열이 선언된 범위 내에 있습니다. 이것은 현재 에 의해서만 지원됩니다.
이 옵션의 기본값은 true 및 false인 Java 및 Fortran 프런트 엔드
각각.

-ftrapv.
이 옵션은 덧셈, 뺄셈,
곱셈 연산.

-fwrapv
이 옵션은 컴파일러가 부호 있는 산술 오버플로를 가정하도록 지시합니다.
덧셈, 뺄셈 및 곱셈은 XNUMX의 보수를 사용하여 감쌉니다.
대표. 이 플래그는 일부 최적화를 활성화하고 나머지는 비활성화합니다. 이것
옵션은 Java 언어에서 요구하는 대로 Java 프런트 엔드에 대해 기본적으로 활성화됩니다.
사양.

-예외
예외 처리를 활성화합니다. 예외를 전파하는 데 필요한 추가 코드를 생성합니다. 을위한
일부 대상, 이는 GCC가 모든 대상에 대한 프레임 해제 정보를 생성함을 의미합니다.
상당한 데이터 크기 오버헤드를 생성할 수 있는 함수
실행에 영향을 미칩니다. 이 옵션을 지정하지 않으면 GCC에서 기본적으로 활성화합니다.
일반적으로 예외 처리가 필요한 C++와 같은 언어의 경우
일반적으로 필요하지 않은 C와 같은 언어. 그러나 다음을 활성화해야 할 수도 있습니다.
예외와 제대로 상호 운용해야 하는 C 코드를 컴파일할 때 이 옵션
C++로 작성된 핸들러. 다음과 같은 경우 이 옵션을 비활성화할 수도 있습니다.
예외 처리를 사용하지 않는 이전 C++ 프로그램 컴파일.

-fnon-call-exception
트래핑 명령이 예외를 throw하도록 허용하는 코드를 생성합니다. 이
어디에나 존재하지 않는 플랫폼별 런타임 지원이 필요합니다. 게다가,
그것은 단지 허용 함정 예외를 던지는 명령, 즉 메모리 참조 또는
부동 소수점 명령어. 임의의 예외가 발생하는 것을 허용하지 않습니다.
"SIGALRM"과 같은 신호 처리기.

-펀윈드 테이블
유사하게 -예외, 필요한 정적 데이터를 생성한다는 점을 제외하고는
다른 방식으로 생성된 코드에 영향을 주지 않습니다. 일반적으로 활성화하지 않습니다
이 옵션; 대신 이 처리가 필요한 언어 프로세서는
당신을 대신하여.

-fasynchronous-unwind-tables
대상 시스템에서 지원하는 경우 dwarf2 형식으로 해제 테이블을 생성합니다. 테이블은
각 명령어 경계에서 정확하므로 스택 해제에 사용할 수 있습니다.
비동기 이벤트(예: 디버거 또는 가비지 수집기).

-fpcc-구조체-반환
메모리에 있는 "short" "struct" 및 "union" 값을 더 긴 값처럼 반환합니다.
레지스터. 이 규칙은 덜 효율적이지만 다음을 허용하는 이점이 있습니다.
GCC로 컴파일된 파일과 다른 컴파일러로 컴파일된 파일 간의 상호호출성,
특히 휴대용 C 컴파일러(pcc).

메모리에서 구조를 반환하는 정확한 규칙은 대상에 따라 다릅니다.
구성 매크로.

짧은 구조와 공용체는 크기와 정렬이 일부 구조와 일치하는 것입니다.
정수형.

경고: 로 컴파일된 코드 -fpcc-구조체-반환 스위치가 바이너리와 호환되지 않습니다
로 컴파일된 코드로 -freg-구조체-반환 스위치. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.

-freg-구조체-반환
가능한 경우 레지스터에서 "구조체" 및 "결합" 값을 반환합니다. 이게 더 효율적이다
보다 작은 구조물의 경우 -fpcc-구조체-반환.

둘 다 지정하지 않으면 -fpcc-구조체-반환 ...도 아니다 -freg-구조체-반환, GCC는 기본적으로
어떤 규칙이 대상에 대한 표준입니다. 표준 규약이 없는 경우,
GCC는 기본적으로 -fpcc-구조체-반환, GCC가 주요 대상인 대상 제외
컴파일러. 이 경우 표준을 선택할 수 있으며 더 효율적인
등록 반환 대안.

경고: 로 컴파일된 코드 -freg-구조체-반환 스위치가 바이너리와 호환되지 않습니다
로 컴파일된 코드로 -fpcc-구조체-반환 스위치. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.

-fshort 열거형
선언된 범위에 필요한 만큼만 "열거형" 유형에 할당합니다.
가능한 값. 특히 "enum" 유형은 가장 작은 유형과 동일합니다.
충분한 공간이 있는 정수 유형입니다.

경고: 전에, -fshort 열거형 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.

-fshort-더블
"float"에 대해 "double"에 동일한 크기를 사용합니다.

경고: 전에, -fshort-더블 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.

-fshort-wchar
에 대한 기본 유형을 재정의합니다. wchar_t짧은 부호 INT 대신에
대상에 대한 기본값입니다. 이 옵션은 아래에서 실행할 프로그램을 빌드하는 데 유용합니다.
와인.

경고: 전에, -fshort-wchar 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 규정에 맞지 않게 사용하십시오.
기본 애플리케이션 바이너리 인터페이스.

-fno-공통
C 코드에서 초기화되지 않은 전역 변수의 배치를 제어합니다. 유닉스 C 컴파일러
전통적으로 이러한 변수에 대해 여러 정의를 허용했습니다.
변수를 공통 블록에 배치하여 컴파일 단위를 만듭니다. 이것이 행동이다
에 의해 지정된 -f공통이며 대부분의 대상에서 GCC의 기본값입니다. 반면에,
이 동작은 ISO C에서 요구하지 않으며 일부 대상에서는 속도 또는 코드가 포함될 수 있습니다.
변수 참조에 대한 크기 페널티. NS -fno-공통 옵션은 다음을 지정합니다.
컴파일러는 객체의 데이터 섹션에 초기화되지 않은 전역 변수를 배치해야 합니다.
파일을 일반 블록으로 생성하지 않습니다. 이는 다음과 같은 효과가 있습니다.
두 개의 다른 컴파일에서 동일한 변수가 선언되면("extern" 제외)
링크할 때 다중 정의 오류가 발생합니다. 이 경우 컴파일해야 합니다.
-f공통 대신에. 컴파일 -fno-공통 대상에 유용합니다.
더 나은 성능을 제공하거나 프로그램이 작동하는지 확인하려는 경우
초기화되지 않은 변수 선언을 항상 이런 식으로 처리하는 다른 시스템.

-fno-ident
무시 #ident 지침.

-finhibit-size-지시어
".size" 어셈블러 지시문이나 문제를 일으킬 수 있는 다른 것을 출력하지 마십시오.
함수가 중간에 분할되고 두 개의 절반이 멀리 떨어진 위치에 배치되는 경우
기억에 따로. 이 옵션은 컴파일할 때 사용됩니다. crtstuff.c; 당신은 필요하지 않습니다
다른 용도로 사용합니다.

-fverbose-asm
생성된 어셈블리 코드에 추가 주석 정보를 추가하여
읽을 수 있습니다. 이 옵션은 일반적으로 실제로 읽을 필요가 있는 사람들에게만 사용됩니다.
생성된 어셈블리 코드(아마도 컴파일러 자체를 디버깅하는 동안).

-fno-verbose-asm, 기본값은 추가 정보가 생략되도록 하고
두 개의 어셈블러 파일을 비교할 때 유용합니다.

-frecord-gcc-스위치
이 스위치를 사용하면 컴파일러를 호출하는 데 사용된 명령줄이
생성 중인 오브젝트 파일에 기록됩니다. 이 스위치는
일부 대상에서 정확한 녹음 형식은 대상 및 바이너리 파일 형식입니다.
종속적이지만 일반적으로 ASCII 텍스트가 포함된 섹션 형식을 취합니다. 이것
스위치는 다음과 관련이 있습니다. -fverbose-asm 스위치, 하지만 그 스위치는 기록만
어셈블러 출력 파일의 정보를 주석으로 사용하므로 개체에 도달하지 않습니다.
파일. 또한보십시오 -grecord-gcc-스위치 컴파일러 옵션을 저장하는 또 다른 방법
목적 파일.

-fpic
다음과 같은 경우 공유 라이브러리에서 사용하기에 적합한 위치 독립 코드(PIC)를 생성합니다.
대상 머신에 대해 지원됩니다. 이러한 코드는 다음을 통해 모든 상수 주소에 액세스합니다.
글로벌 오프셋 테이블(GOT). 동적 로더는 다음과 같은 경우 GOT 항목을 해결합니다.
프로그램이 시작됩니다(동적 로더는 GCC의 일부가 아닙니다.
체계). 링크된 실행 파일의 GOT 크기가 시스템별 최대값을 초과하는 경우
크기를 지정하면 링커에서 다음을 나타내는 오류 메시지가 나타납니다. -fpic 작동하지 않습니다. ~에
이 경우 다음으로 다시 컴파일하십시오. -fPIC 대신에. (이 최대값은 SPARC의 경우 8k이고 32k입니다.
m68k 및 RS/6000에서. 386은 그런 제한이 없습니다.)

위치 독립 코드에는 특별한 지원이 필요하므로 다음에서만 작동합니다.
특정 기계. 386의 경우 GCC는 System V용 PIC를 지원하지만 Sun용은 지원하지 않습니다.
386i. IBM RS/6000용으로 생성된 코드는 항상 위치 독립적입니다.

이 플래그가 설정되면 매크로 "__pic__" 및 "__PIC__"가 1로 정의됩니다.

-fPIC
대상 머신에 대해 지원되는 경우 위치 독립적인 코드를 내보냅니다.
동적 연결 및 전역 오프셋 테이블 크기 제한 방지. 이것
옵션은 m68k, PowerPC 및 SPARC에서 차이를 만듭니다.

위치 독립 코드에는 특별한 지원이 필요하므로 다음에서만 작동합니다.
특정 기계.

이 플래그가 설정되면 매크로 "__pic__" 및 "__PIC__"가 2로 정의됩니다.

-파이
-fPIE
이러한 옵션은 다음과 유사합니다. -fpic-fPIC, 그러나 생성된 위치 독립 코드
실행 파일에만 연결할 수 있습니다. 일반적으로 이러한 옵션은 다음과 같은 경우에 사용됩니다. -파이 GCC
옵션은 링크하는 동안 사용됩니다.

-파이-fPIE 둘 다 "__pie__" 및 "__PIE__" 매크로를 정의합니다. 매크로에는
값 1 -파이 및 2 for -fPIE.

-fno-점프 테이블
더 효율적인 경우에도 switch 문에 점프 테이블을 사용하지 마십시오.
다른 코드 생성 전략보다 이 옵션은 다음과 함께 사용됩니다.
-fpic or -fPIC 동적 링커의 일부를 형성하고 할 수 없는 코드를 작성하기 위해
점프 테이블의 주소를 참조하십시오. 일부 대상에서는 점프 테이블이 필요하지 않습니다.
GOT 및 이 옵션은 필요하지 않습니다.

-고정-등록 번호
명명된 레지스터를 처리합니다. 등록 번호 고정 레지스터로; 생성된 코드는 다음을 참조해서는 안 됩니다.
(아마도 스택 포인터, 프레임 포인터 또는 다른 고정 역할을 제외하고).

등록 번호 레지스터의 이름이어야 합니다. 허용되는 레지스터 이름은 시스템에 따라 다릅니다.
기계 설명 매크로 파일의 "REGISTER_NAMES" 매크로에 정의되어 있습니다.

이 플래그는 XNUMX방향 선택을 지정하기 때문에 음수 형식을 갖지 않습니다.

-fcall 사용-등록 번호
명명된 레지스터를 처리합니다. 등록 번호 기능에 의해 차단되는 할당 가능한 레지스터로
전화. 그것은 임시 또는 변수에 걸쳐 살지 않는 변수에 할당될 수 있습니다.
전화. 이 방법으로 컴파일된 함수는 레지스터를 저장하고 복원하지 않습니다. 등록 번호.

프레임 포인터 또는 스택 포인터와 함께 이 플래그를 사용하는 것은 오류입니다. 이것의 사용
기계 실행에서 고정된 퍼베이시브 역할이 있는 다른 레지스터에 대한 플래그
모델은 비참한 결과를 초래할 것입니다.

이 플래그는 XNUMX방향 선택을 지정하기 때문에 음수 형식을 갖지 않습니다.

-fcall 저장-등록 번호
명명된 레지스터를 처리합니다. 등록 번호 함수에 의해 저장된 할당 가능한 레지스터로. 그것은 수 있습니다
호출에 걸쳐 있는 임시 또는 변수에도 할당됩니다. 기능
이 방법으로 컴파일하면 레지스터가 저장되고 복원됩니다. 등록 번호 그들이 그것을 사용한다면.

프레임 포인터 또는 스택 포인터와 함께 이 플래그를 사용하는 것은 오류입니다. 이것의 사용
기계 실행에서 고정된 퍼베이시브 역할이 있는 다른 레지스터에 대한 플래그
모델은 비참한 결과를 초래할 것입니다.

레지스터에 이 플래그를 사용하면 다른 종류의 재난이 발생합니다.
반환될 수 있는 함수 값.

이 플래그는 XNUMX방향 선택을 지정하기 때문에 음수 형식을 갖지 않습니다.

-fpack-구조체[=n]
값을 지정하지 않으면 모든 구조 부재를 구멍 없이 함께 포장합니다. 언제
값이 지정됨(XNUMX의 작은 거듭제곱이어야 함), 팩 구조 멤버
이 값에 따라 최대 정렬을 나타내는(즉,
이보다 큰 기본 정렬 요구 사항은 잠재적으로 정렬되지 않은 상태로 출력됩니다.
다음 피팅 위치에서.

경고: 전에, -fpack-구조체 스위치로 인해 GCC가 바이너리가 아닌 코드를 생성합니다.
해당 스위치 없이 생성된 코드와 호환됩니다. 또한 코드를
차선책. 기본이 아닌 응용 프로그램 바이너리 인터페이스를 준수하는 데 사용합니다.

- 기구 기능
함수에 대한 진입 및 종료를 위한 계측 호출을 생성합니다. 함수 직후
입력 및 함수 종료 직전에 다음 프로파일링 함수가 호출됩니다.
현재 함수의 주소와 호출 사이트. (일부 플랫폼에서는
"__builtin_return_address"는 현재 기능 이상으로 작동하지 않으므로 호출 사이트
그렇지 않으면 프로파일링 기능에 정보가 제공되지 않을 수 있습니다.)

무효 __cyg_profile_func_enter (무효 *this_fn,
무효 *call_site);
무효 __cyg_profile_func_exit (무효 *this_fn,
무효 *call_site);

첫 번째 인수는 현재 함수의 시작 주소입니다.
기호 테이블에서 정확히 조회했습니다.

이 계측은 다른 기능에서 인라인으로 확장된 기능에 대해서도 수행됩니다.
프로파일링 호출은 개념적으로 인라인 함수가 입력되는 위치를 나타냅니다.
그리고 나갔습니다. 이는 이러한 기능의 주소 지정 가능한 버전을 사용할 수 있어야 함을 의미합니다.
함수의 모든 사용이 인라인으로 확장되는 경우 이는 추가 기능을 의미할 수 있습니다.
코드 크기 확장. 사용하는 경우 외부 인라인 C 코드에서 주소 지정 가능
이러한 기능의 버전이 제공되어야 합니다. (어쨌든 보통은 그렇지만,
운이 좋고 옵티마이저가 항상 함수를 인라인으로 확장하면
정적 사본을 제공하지 않고 도망쳤습니다.)

함수에는 "no_instrument_function" 속성이 부여될 수 있습니다. 이 경우
계측이 수행되지 않습니다. 예를 들어 프로파일링에 사용할 수 있습니다.
위에 나열된 기능, 우선 순위가 높은 인터럽트 루틴 및
프로파일링 함수는 안전하게 호출될 수 없습니다(아마도 신호 처리기가
프로파일링 루틴은 출력을 생성하거나 메모리를 할당합니다.

-finstrument-기능-제외-파일-목록=파일,파일, ...
계측에서 제외되는 기능 목록을 설정합니다(설명 참조
"-finstrument-functions"). 함수 정의가 포함된 파일이 일치하는 경우
중 하나와 파일, 그 기능은 계측되지 않습니다. 경기는
부분 문자열: 만약 파일 매개변수는 파일 이름의 하위 문자열이며 다음으로 간주됩니다.
시합이 되십시오.

예 :

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

경로 이름에 "/bits/stl"이 포함된 파일에 정의된 인라인 함수는 제외됩니다.
또는 "포함/시스템".

어떤 이유로 문자 ','를 다음 중 하나에 포함하려면 SYM, 쓰다 ','. 을위한
예: "-finstrument-functions-exclude-file-list=',,tmp'"(작은 따옴표에 주의
옵션을 둘러싸고 있습니다).

-finstrument-기능-제외-기능-목록=SYM,SYM, ...
이것은 "-finstrument-functions-exclude-file-list"와 유사하지만 이 옵션은
계측에서 제외할 함수 이름 목록입니다. 함수 이름에
be 일치는 "벡터 ㅋ(상수 벡터 &)",
내부 맹글링된 이름이 아닙니다(예: "_Z4blahRSt6vectorIiSaIiEE"). 경기가 끝났다
부분 문자열: 만약 SYM 매개변수는 함수 이름의 하위 문자열입니다.
일치로 간주됩니다. C99 및 C++ 확장 식별자의 경우 함수 이름
범용 문자 이름을 사용하지 않고 UTF-8로 지정해야 합니다.

-fstack-체크
스택의 경계를 넘지 않는지 확인하는 코드를 생성합니다. 너
다중 스레드가 있는 환경에서 실행 중인 경우 이 플래그를 지정해야 합니다.
그러나 스택 이후 단일 스레드 환경에서는 거의 지정하지 않아도 됩니다.
스택이 하나만 있는 경우 거의 모든 시스템에서 오버플로가 자동으로 감지됩니다.

이 스위치로 인해 실제로 검사가 수행되는 것은 아닙니다. 운영
시스템 또는 언어 런타임이 이를 수행해야 합니다. 스위치로 인해 코드 생성
스택이 확장되고 있는지 확인하십시오.

추가로 문자열 매개변수를 지정할 수 있습니다. "no"는 검사 없음을 의미하고 "generic"은
구식 검사를 강제로 사용하는 것을 의미하고 "특정"은 최상의 검사를 사용함을 의미합니다.
방법이며 베어와 동일합니다. -fstack-체크.

구식 검사는 특정 대상 지원이 필요하지 않은 일반 메커니즘입니다.
컴파일러는 다음과 같은 단점이 있습니다.

1. 큰 개체에 대한 수정된 할당 전략: 항상 할당됩니다.
크기가 고정 임계값을 초과하는 경우 동적으로

2. 함수의 정적 프레임 크기에 대한 고정 제한:
특정 기능, 스택 검사는 신뢰할 수 없으며 경고가 발행됩니다.
컴파일러.

3. 비효율성: 수정된 할당 전략과 일반
구현하면 코드의 성능이 저하됩니다.

구식 스택 검사는 "특정"에 대한 대체 방법이기도 합니다.
대상 지원이 컴파일러에 추가되었습니다.

-fstack 제한 레지스터=등록 번호
-fstack-제한-심볼=SYM
-fno-스택 제한
스택이 특정 값 이상으로 증가하지 않도록 코드를 생성합니다.
레지스터의 값 또는 기호의 주소. 스택이 그 이상으로 커질 경우
값, 신호가 발생합니다. 대부분의 타겟에 대해 신호는
스택이 경계를 초과하므로 데이터를 받지 않고도 신호를 잡을 수 있습니다.
특별한 예방 조치.

예를 들어 스택이 절대 주소에서 시작하는 경우 0 X 80000000 아래쪽으로 자라며,
당신은 플래그를 사용할 수 있습니다 -fstack-limit-symbol=__stack_limit
-Wl,--defsym,__stack_limit=0x7ffe0000 128KB의 스택 제한을 적용합니다. 참고
이것은 GNU 링커에서만 작동할 수 있습니다.

-fsplit 스택
오버플로가 발생하기 전에 스택을 자동으로 분할하는 코드를 생성합니다. 결과
프로그램에는 프로그램이 수행할 수 없는 경우에만 오버플로할 수 있는 불연속 스택이 있습니다.
더 많은 메모리를 할당하십시오. 이것은 스레드 프로그램을 실행할 때 가장 유용합니다.
더 이상 각 스레드에 사용할 적절한 스택 크기를 계산할 필요가 없습니다. 이것은
현재 GNU/Linux를 실행하는 i386 및 x86_64 백엔드에만 구현됩니다.

로 코드를 컴파일할 때 -fsplit 스택 없이 컴파일된 코드를 호출합니다. -fsplit 스택거기
후자의 코드를 실행하는 데 사용할 수 있는 스택 공간이 많지 않을 수 있습니다. 모두 컴파일하면
라이브러리 코드를 포함한 코드, -fsplit 스택 옵션이 아닌 경우 링커는
코드가 다음 없이 컴파일되도록 이러한 호출을 수정합니다. -fsplit 스택 항상 큰
스택. 이에 대한 지원은 GNU binutils 릴리스의 골드 링커에서 구현됩니다.
2.21 년 이후

- 밑줄을 긋다
이 옵션과 해당 옵션은 -fno 선행 밑줄, 강제로 C 방식을 변경
기호는 개체 파일에 표시됩니다. 한 가지 용도는 레거시와의 연결을 돕는 것입니다.
어셈블리 코드.

경고: 전에, - 밑줄을 긋다 스위치는 GCC가 그렇지 않은 코드를 생성하도록 합니다.
해당 스위치 없이 생성된 코드와 호환되는 바이너리. 에 맞게 사용하십시오.
기본이 아닌 응용 프로그램 바이너리 인터페이스. 모든 대상이 완전한 지원을 제공하는 것은 아닙니다.
이 스위치의 경우.

-ftls-모델=모델
사용할 스레드 로컬 저장소 모델을 변경합니다. NS 모델 인수는 다음 중 하나여야 합니다.
"global-dynamic", "local-dynamic", "initial-exec" 또는 "local-exec".

없는 기본값 -fpic "초기 실행"입니다. ~와 함께 -fpic 기본값은
"글로벌 다이내믹".

-가시성=기본값|내부|숨김|보호됨
기본 ELF 이미지 기호 가시성을 지정된 옵션으로 설정 --- 모든 기호는
코드 내에서 재정의되지 않는 한 this로 표시됩니다. 이 기능을 사용하면 매우
공유 개체 라이브러리의 링크 및 로드 시간을 크게 개선하고 더 많은 것을 생성합니다.
최적화된 코드, 거의 완벽한 API 내보내기를 제공하고 기호 충돌을 방지합니다. 그것은이다
강하게 배포하는 모든 공유 개체에서 이것을 사용하는 것이 좋습니다.

명명법에도 불구하고 "기본값"은 항상 공개를 의미합니다. 즉, 연결 가능
공유 객체 외부에서 반대합니다. "보호된"과 "내부"는 꽤 쓸모가 없습니다.
실제 사용에서 일반적으로 사용되는 유일한 옵션은 "숨김"입니다. NS
기본값 -가시성 지정되지 않은 것은 "기본값"입니다. 즉, 모든 기호를 만듭니다.
공개 ---이전 버전의 GCC와 동일한 동작을 유발합니다.

ELF 기호가 올바른지 확인함으로써 제공되는 이점에 대한 좋은 설명
가시성은 Ulrich Drepper의 "How To Write Shared Libraries"에 의해 제공됩니다.
에서 발견http://people.redhat.com/~drepper/>>--그러나 우수한 솔루션을 만들었습니다.
이 옵션을 사용하면 기본값이 공개일 때 숨겨진 항목을 표시할 수 있습니다.
기본 숨김 및 공개로 표시합니다. 이것은 Windows에서 DLL의 표준이며
-fvisibility=숨김 및 "__attribute__ ((visibility("default")))" 대신
"__declspec(dllexport)" 동일한 구문으로 거의 동일한 의미를 얻습니다.
이것은 크로스 플랫폼 프로젝트를 수행하는 사람들에게 큰 이점입니다.

기존 코드에 가시성 지원을 추가하는 경우 다음을 찾을 수 있습니다. #프라그마 GCC
가시성 사용. 이것은 설정하려는 선언을 묶음으로써 작동합니다.
with에 대한 가시성(예:) #프라그마 GCC 가시성 푸시(숨김)#프라그마 GCC
가시성 대중적인. 기호 가시성을 확인해야 함을 명심하십시오. as 부품 of 전에,
API 인터페이스 계약 따라서 모든 새 코드는 항상 가시성을 지정해야 합니다.
기본값이 아닙니다. 즉, 지역 DSO 내에서만 사용하기 위한 선언은 다음과 같아야 합니다. 항상
PLT 간접 참조 오버헤드를 피하기 위해 명시적으로 숨김으로 표시해야 합니다.
풍부하게 명확하면 코드의 가독성과 자체 문서화에도 도움이 됩니다. 참고
ISO C++ 사양 요구 사항으로 인해 operator new 및 operator delete는 반드시
항상 기본 가시성을 유지하십시오.

프로젝트 외부의 헤더, 특히 시스템 헤더 및
사용하는 다른 라이브러리의 헤더는 다음과 같이 컴파일될 것으로 예상되지 않을 수 있습니다.
기본값 이외의 가시성. 명시 적으로 말해야 할 수도 있습니다. #프라그마 GCC
가시성 푸시(기본값) 그러한 헤더를 포함하기 전에.

외부 선언은 영향을 받지 않습니다 -가시성, 그래서 많은 코드가
로 재컴파일 -fvisibility=숨김 수정 없이. 그러나 이것은 다음을 의미합니다
에 전화 외부 명시적 가시성이 없는 함수는 PLT를 사용하므로
사용에 효과적인 __기인하다 ((시계)) 및 / 또는 #프라그마 GCC 가시성 말하다
컴파일러 외부 선언은 숨겨진 것으로 처리되어야 합니다.

참고 -가시성 C++ 모호한 연결 엔터티에 영향을 줍니다. 이것은 다음을 의미합니다.
인스턴스에서 DSO 간에 throw될 예외 클래스는 명시적으로
기본 가시성으로 표시되도록 유형_정보 노드는
DSO.

이러한 기술, 이점 및 사용 방법에 대한 개요는 다음을 참조하십시오.
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-휘발성 비트 필드
이 옵션은 휘발성 비트 필드(또는 다른 구조
필드, 컴파일러는 일반적으로 어쨌든 이러한 유형을 존중하지만) 단일 필드를 사용해야 합니다.
가능한 경우 자연 정렬에 맞춰 정렬된 필드 유형의 너비에 대한 액세스.
예를 들어, 메모리 매핑된 주변 장치 레지스터가 있는 대상에는 이러한 모든 것이 필요할 수 있습니다.
16비트 폭의 액세스; 이 플래그를 사용하여 사용자는 모든 주변 장치 비트를 선언할 수 있습니다.
필드를 "unsigned short"(이 대상에서 short가 16비트라고 가정)로 GCC를 강제 실행합니다.
아마도 더 효율적인 16비트 액세스 대신 32비트 액세스를 사용하는 것입니다.

이 옵션이 비활성화되면 컴파일러는 가장 효율적인 명령어를 사용합니다. 에
이전 예에서는 32비트 로드 명령일 수 있지만
비트 필드 또는 메모리 매핑된 부분을 포함하지 않는 액세스 바이트
업데이트 중인 것과 관련이 없는 레지스터입니다.

대상에 엄격한 정렬이 필요하고 필드 유형을 준수하려면 다음이 필요합니다.
이 정렬을 위반하면 경고가 발행됩니다. 필드에 "packed" 속성이 있는 경우
필드 유형을 준수하지 않고 액세스가 수행됩니다. 필드에 없는 경우
"packed" 속성인 경우 필드 유형을 준수하여 액세스가 수행됩니다. 두 경우 모두 GCC
사용자가 대상 하드웨어에 대해 알지 못하는 무언가를 알고 있다고 가정합니다.

이 옵션의 기본값은 응용 프로그램 바이너리 인터페이스에 의해 결정됩니다.
대상 프로세서.

환경


이 섹션에서는 GCC 작동 방식에 영향을 주는 여러 환경 변수에 대해 설명합니다. 일부
그 중 다양한 종류를 검색할 때 사용할 디렉토리 또는 접두사를 지정하여 작동합니다.
파일의. 일부는 컴파일 환경의 다른 측면을 지정하는 데 사용됩니다.

다음과 같은 옵션을 사용하여 검색할 장소를 지정할 수도 있습니다. -B, -I-L.
이들은 환경 변수를 사용하여 지정된 위치보다 우선합니다.
GCC 구성에서 지정한 것보다 우선합니다.


LC_CTYPE
LC_메시지
LC_ALL
이러한 환경 변수는 GCC가 현지화 정보를 사용하는 방식을 제어합니다.
이를 통해 GCC는 다양한 국가 협약과 협력할 수 있습니다. GCC는 로케일을 검사합니다.
카테고리 LC_CTYPELC_메시지 그렇게 하도록 구성된 경우. 이러한 로케일
범주는 설치에서 지원하는 모든 값으로 설정할 수 있습니다. 대표적인 값은
en_GB.UTF-8 UTF-8로 인코딩된 영국 영어의 경우.

XNUMXD덴탈의 LC_CTYPE 환경 변수는 문자 분류를 지정합니다. GCC는 이를 사용하여
문자열의 문자 경계를 결정합니다. 이것은 일부 멀티 바이트에 필요합니다.
그렇지 않으면 해석될 따옴표 및 이스케이프 문자가 포함된 인코딩
문자열 끝 또는 이스케이프.

XNUMXD덴탈의 LC_메시지 환경 변수는 진단에 사용할 언어를 지정합니다.
메시지.

경우 LC_ALL 환경 변수가 설정되면 값을 재정의합니다. LC_CTYPE
LC_메시지; 그렇지 않으면, LC_CTYPELC_메시지 기본값으로
환경 변수. 이러한 변수가 설정되지 않은 경우 GCC는 기본적으로 기존
C 영어 행동.

TMPDIR
If TMPDIR 설정되면 임시 파일에 사용할 디렉토리를 지정합니다. GCC 사용
다음으로 사용될 컴파일의 한 단계의 출력을 보관하는 임시 파일
다음 단계로의 입력: 예를 들어 전처리기의 출력
컴파일러에 적절한 입력.

GCC_COMPARE_DEBUG
환경 GCC_COMPARE_DEBUG 합격과 거의 같다 -fcompare-디버그 ~로
컴파일러 드라이버. 자세한 내용은 이 옵션의 설명서를 참조하십시오.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX 가 설정되면 이름에 사용할 접두사를 지정합니다.
컴파일러에 의해 실행되는 서브 프로그램. 이 접두어가 결합되면 슬래시가 추가되지 않습니다.
하위 프로그램의 이름을 사용하지만 다음과 같은 경우 슬래시로 끝나는 접두사를 지정할 수 있습니다.
당신이 원하는.

If GCC_EXEC_PREFIX 설정되지 않은 경우 GCC는 적절한 접두사를 파악하려고 시도합니다.
호출된 경로 이름을 기반으로 사용합니다.

GCC가 지정된 접두사를 사용하여 하위 프로그램을 찾을 수 없으면
서브 프로그램의 일반적인 위치.

기본값 GCC_EXEC_PREFIX is 접두사/lib/gcc/ 어디에 접두사 의 접두어입니다
설치된 컴파일러. 많은 경우에 접두사 실행했을 때 "접두사"의 값입니다.
구성 스크립트.

로 지정된 기타 접두사 -B 이 접두사보다 우선합니다.

이 접두사는 다음과 같은 파일을 찾는 데도 사용됩니다. crt0.o 연결하는 데 사용됩니다.

또한, 접두사는 검색할 디렉토리를 찾을 때 특이한 방식으로 사용됩니다.
헤더 파일의 경우. 이름이 일반적으로 시작되는 각 표준 디렉토리에 대해
/usr/로컬/lib/gcc (보다 정확하게는 GCC_INCLUDE_DIR), GCC 시도
대체 디렉토리를 생성하기 위해 해당 시작 부분을 지정된 접두사로 대체
이름. 따라서 -푸우/, GCC가 검색합니다 푸/바 일반적으로 검색할 위치
/usr/local/lib/바. 이러한 대체 디렉토리가 먼저 검색됩니다. 표준
디렉토리가 다음에 옵니다. 표준 디렉토리가 구성된 접두사 그때
의 값 접두사 다음으로 대체됩니다. GCC_EXEC_PREFIX 헤더 파일을 찾을 때.

컴파일러_경로
의 가치 컴파일러_경로 콜론으로 구분된 디렉토리 목록입니다. PATH.
GCC는 하위 프로그램을 검색할 때 지정된 디렉토리를 시도합니다.
다음을 사용하여 하위 프로그램 찾기 GCC_EXEC_PREFIX.

라이브러리_경로
의 가치 라이브러리_경로 콜론으로 구분된 디렉토리 목록입니다. PATH.
기본 컴파일러로 구성된 경우 GCC는 다음과 같이 지정된 디렉토리를 시도합니다.
특수 링커 파일 검색, 다음을 사용하여 찾을 수 없는 경우 GCC_EXEC_PREFIX.
GCC를 사용한 링크는 일반 라이브러리를 검색할 때도 이 디렉토리를 사용합니다.
위한 -l 옵션(그러나 다음으로 지정된 디렉토리는 -L 먼저 오세요).


이 변수는 로케일 정보를 컴파일러에 전달하는 데 사용됩니다. 한 가지 방법은
이 정보는 문자를 사용할 때 사용할 문자 집합을 결정하는 데 사용됩니다.
리터럴, 문자열 리터럴 및 주석은 C 및 C++에서 구문 분석됩니다. 컴파일러가
멀티바이트 문자를 허용하도록 구성된 경우 다음 값에 대해 are
인식:

씨지스
JIS 문자를 인식합니다.

씨슈즈
SJIS 문자를 인식합니다.

C-EUCJP
EUCJP 문자를 인식합니다.

If 정의되지 않았거나 다른 값이 있는 경우 컴파일러는 다음을 사용합니다.
멀티바이트를 인식하고 변환하기 위해 기본 로케일에 정의된 mblen 및 mbtowc
자.

일부 추가 환경 변수는 전처리기의 동작에 영향을 줍니다.

cpath
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
각 변수의 값은 특수 문자로 구분된 디렉토리 목록입니다.
처럼 PATH, 헤더 파일을 찾을 수 있습니다. 특별한 캐릭터,
"PATH_SEPARATOR"는 대상에 따라 다르며 GCC 빌드 시 결정됩니다. 마이크로소프트
Windows 기반 대상은 세미콜론이며 거의 모든 다른 대상의 경우
콜론.

cpath 지정된 것처럼 검색할 디렉토리 목록을 지정합니다. -I하지만,
주어진 경로 후에 -I 명령줄의 옵션. 이 환경 변수
사전 처리되는 언어에 관계없이 사용됩니다.

나머지 환경 변수는 특정 프로세스를 사전 처리할 때만 적용됩니다.
표시된 언어. 각각은 다음과 같이 검색할 디렉토리 목록을 지정합니다.
로 지정 -아이시스템, 그러나 주어진 경로 후에 -아이시스템 옵션
명령 행.

이 모든 변수에서 빈 요소는 컴파일러에게 현재를 검색하도록 지시합니다.
작업 디렉토리. 빈 요소는 경로의 시작이나 끝에 나타날 수 있습니다. 을위한
예를 들어 값이 cpath ":/special/include"이며, 다음과 같은 효과가 있습니다.
-나는. -나/특별/포함.

DEPENDENCIES_OUTPUT
이 변수가 설정되면 해당 값은 Make 기반의 종속성을 출력하는 방법을 지정합니다.
컴파일러가 처리하는 비시스템 헤더 파일에 시스템 헤더 파일은
종속성 출력에서 ​​무시됩니다.

의 가치 DEPENDENCIES_OUTPUT 파일 이름일 수 있으며 이 경우 Make 규칙
소스 파일 이름에서 대상 이름을 추측하여 해당 파일에 기록됩니다. 아니면 그
값은 형식을 가질 수 있습니다. 파일 목표, 이 경우 규칙이 파일에 기록됩니다. 파일
사용 목표 대상 이름으로.

즉, 이 환경 변수는 옵션을 결합하는 것과 같습니다. -MM
-MF, 선택 사항 -산 스위치도.

SUNPRO_DEPENDENCIES
이 변수는 다음과 같습니다. DEPENDENCIES_OUTPUT (위 참조), 그 시스템을 제외하고
헤더 파일은 무시되지 않으므로 -M 보다는 -MM. 그러나, 그
기본 입력 파일에 대한 종속성은 생략됩니다.

onworks.net 서비스를 사용하여 온라인으로 g++-4.7 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

  • 1
    터크 데브옵스
    터크 데브옵스
    TurkDevOps a�?k kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-팀
    Tarafndan desteklenmektedir..
    기능:https://github.com/turkdevopshttps://turkdevops.g...
    turkdevops 다운로드
  • 2
    asammdf
    asammdf
    *asammdf*는 빠른 Python 파서이며
    ASAM(Association for
    자동화 표준화 및
    측정 시스템) MDF / MF4
    (측정 데이터 형식...
    다운로드
  • 3
    LAME(Lame은 MP3 인코더가 아님)
    LAME(Lame은 MP3 인코더가 아님)
    LAME은 교육용 도구입니다.
    MP3 인코딩에 대해 배우기 위해. 그만큼
    LAME 프로젝트의 목표는 개선하는 것입니다.
    사이코 음향, 품질 및 속도
    MP의...
    LAME 다운로드(Lame Aint an MP3 Encoder)
  • 4
    wx파이썬
    wx파이썬
    Python 확장 모듈 세트
    크로스 플랫폼 GUI 클래스를 래핑합니다.
    wxWidgets.. 청중: 개발자. 사용자
    인터페이스: X 윈도우 시스템(X11), Win32 ...
    wxPython 다운로드
  • 5
    팩 파일 관리자
    팩 파일 관리자
    Total War 팩 파일 관리자입니다.
    버전 1.7부터 프로젝트. ㅏ
    Warscape에 대한 짧은 소개
    모딩: ...
    팩파일매니저 다운로드
  • 6
    IPerf2
    IPerf2
    측정을 위한 네트워크 트래픽 도구
    메트릭을 사용한 TCP 및 UDP 성능
    처리량과 대기 시간 모두에 대해. 그만큼
    목표에는 활성 유지가 포함됩니다.
    iperf 대구...
    IPerf2 다운로드
  • 더»

Linux 명령

Ad