c_common_handle_option (continue)
Â
657Â Â Â Â case OPT_Wwrite_strings:
658Â Â Â Â Â Â if (!c_dialect_cxx ())
659Â Â Â Â Â Â Â Â flag_const_strings = value;
660Â Â Â Â Â Â else
661Â Â Â Â Â Â Â Â warn_write_strings = value;
662Â Â Â Â Â Â break;
663Â
664Â Â Â Â case OPT_ansi:
665Â Â Â Â Â Â if (!c_dialect_cxx ())
666Â Â Â Â Â Â Â Â set_std_c89 (false, true);
667Â Â Â Â Â Â else
668Â Â Â Â Â Â Â Â set_std_cxx98 (true);
669Â Â Â Â Â Â break;
670Â
671Â Â Â Â case OPT_d:
672Â Â Â Â Â Â handle_OPT_d (arg);
673Â Â Â Â Â Â break;
674Â
675Â Â Â Â case OPT_fcond_mismatch:
676Â Â Â Â Â Â if (!c_dialect_cxx ())
677Â Â Â Â Â Â {
678Â Â Â Â Â Â Â Â flag_cond_mismatch = value;
679Â Â Â Â Â Â Â Â break;
680Â Â Â Â Â Â }
681Â Â Â Â Â Â
682Â
683Â Â Â Â case OPT_fall_virtual:
684Â Â Â Â case OPT_falt_external_templates:
685Â Â Â Â case OPT_fenum_int_equiv:
686Â Â Â Â case OPT_fexternal_templates:
687Â Â Â Â case OPT_fguiding_decls:
688Â Â Â Â case OPT_fhonor_std:
689Â Â Â Â case OPT_fhuge_objects:
690Â Â Â Â case OPT_flabels_ok:
691Â Â Â Â case OPT_fname_mangling_version_:
692Â Â Â Â case OPT_fnew_abi:
693Â Â Â Â case OPT_fnonnull_objects:
694Â Â Â Â case OPT_fsquangle:
695Â Â Â Â case OPT_fstrict_prototype:
696Â Â Â Â case OPT_fthis_is_variable:
697Â Â Â Â case OPT_fvtable_thunks:
698Â Â Â Â case OPT_fxref:
699Â Â Â Â case OPT_fvtable_gc:
700Â Â Â Â Â Â warning ("switch /"%s/" is no longer supported", option->opt_text);
701Â Â Â Â Â Â break;
702Â
703Â Â Â Â case OPT_faccess_control:
704Â Â Â Â Â Â flag_access_control = value;
705Â Â Â Â Â Â break;
706Â
707Â Â Â Â case OPT_fasm:
708Â Â Â Â Â Â flag_no_asm = !value;
709Â Â Â Â Â Â break;
710Â
711Â Â Â Â case OPT_fbuiltin:
712Â Â Â Â Â Â flag_no_builtin = !value;
713Â Â Â Â Â Â break;
Â
ä¸é¢å¦æè¯è¨æ¯C++ï¼ c_dialect_cxxè¿å1ãå¹¶æ ¹æ®å ¶ç»æè®¾å®å¦ä¸åéï¼
flag_const_stringsï¼Cï¼C++ï¼-Wwrite-stringsï¼å¦æé0ï¼å符串常éçç±»å为`const char *'ï¼æ£å¦æ åæè¦æ±ã
warn_write_stringsï¼Cï¼C++ï¼-Wwrite-stringsï¼å¦æé0ï¼è¦åä»å符串常éå°`char *'çï¼è¿ä¸ªå·²è¿æ¶ç转æ¢ã
664è¡å¤çé项âansiï¼å®ææä»£ç éè¦ç¬¦åçæ åãå¹¶éè¿ä¸é¢ç彿°ä¿åå®çåæ°ã
Â
1522 static void
1523 set_std_c89 (int c94, int iso)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â in c-opts.c
1524 {
1525 Â Â cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89);
1526 Â Â flag_iso = iso;
1527 Â Â flag_no_asm = iso;
1528 Â Â flag_no_gnu_keywords = iso;
1529 Â Â flag_no_nonansi_builtin = iso;
1530 Â Â flag_isoc94 = c94;
1531 Â Â flag_isoc99 = 0;
1532 Â Â flag_writable_strings = 0;
1533 }
Â
ä¸é¢ï¼parse_inæ¯cpp_readerçä¸ä¸ªå ¨å±å®ä¾ãè彿°ä¸æ¶åçåéå¦ä¸ï¼
flag_isoï¼å¦æé0ï¼æå¼ç¨æ·åå空é´ä¸çå®ã
flag_no_asmï¼Cï¼C++ï¼ObjCï¼-fno-asmï¼å¦æé0ï¼å¯¹äºCï¼ä½¿ç¨-fno-asmå°å±è½å ³é®åasmï¼inlineåtypeofãè¿ä¸ªéé¡¹å¯¹å ³é®å__asm__ï¼__inline__å__typeof__ä¸èµ·ä½ç¨ã对äºC++ï¼ä½¿ç¨-fno-asmå±è½å ³é®åtypeofï¼ä½å¯¹asmåinlineä¸èµ·ä½ç¨ï¼å 为å®ä»¬æ¯è¯è¨çä¸é¨åãå ¶ä»ä¼å½±åè¿äºå ³é®åçé项æ-ansiï¼-gnu-keywordså-stdã
flag_no_gnu_keywordsï¼C++ï¼-fno-gnu-keywordsï¼å¦æé0ï¼å±è½å ³é®åtypeofã
flag_no_nonansi_builtinï¼C++ï¼-fno-nonansi-builtinï¼å¦æé0ï¼è¡¨ç¤ºä¸è¯å«éANSIçå å»ºå½æ°ï¼the non-ANSI builtin functionsï¼ãç±é项-ansi设置ã
flag_isoc94ï¼å¦æé0ï¼è¡¨ç¤ºä½¿è½C89修订1çç¹æ§ã
flag_isoc99ï¼å¦æé0ï¼è¡¨ç¤ºä½¿ç¨ISO C99ã
flag_writable_stringsï¼Cï¼C++ï¼-fwritable-stringsï¼å¦æé0ï¼ä¿åå符串常éè³æ°æ®æ®µï¼è¿äºå符串为ä¸å¯ä¸ã
Â
1549 static void
1550 set_std_cxx98 (int iso)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â in c-opts.c
1551 {
1552 Â Â cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX);
1553 Â Â flag_no_gnu_keywords = iso;
1554 Â Â flag_no_nonansi_builtin = iso;
1555 Â Â flag_iso = iso;
1556 }
Â
å¨671è¡ï¼å¯¹äºé项-dlettersï¼ä¸ä¸ªæå¤ä¸ªåæ¯ç¨äºæåºä½æ¶äº§çç¨äºè°è¯ç转å¨å转å¨ä¸å å«ä½ç©ãè¿ä¸ªé项ç¨äºè°è¯ç¼è¯å¨ï¼ä½¿å¾æ¥çç¼è¯åé¶æ®µç详ç»ä¿¡æ¯å为å¯è½ãæ¯ä¸ªè¾åºæä»¶ç±éå·åè·éçè¯å«åæ¯ç»æçåç¼æ¥åºå«ãä¾å¦ï¼å¨é21å转å¨çæä»¶ï¼è¿ä¸ªéæ¯å ¨å±å¯åå¨åé ï¼è¥éæ¶ç¼è¯doline.cï¼è½¬å¨æä»¶åå°ä¸ºdoline.21.gregã
-dé项坿¥ä¹åæ¯ï¼å®ä»¬å¯ä»¥ä»»ææ¬¡åºä»»æç»åãåºäºè°è¯ç¼è¯å¨çç®çï¼è¿ä¸ªç¹æ§è¢«ä¸¥è°¨å°å®ç°ãå æ¤ä½ ä¼åç°å¨æ¯ä¸ªåå¸çæ¬ä¸ï¼ä¸æ¯ææç忝é½è¢«å®ç°äºã注æå°åæ¯Dï¼Iï¼MåNï¼å¨å½åçæ¬ä¸ï¼ç¨äºé¢å¤çå¨ï¼å¨4.0çæ¬ä»¥åï¼Dï¼Iï¼MåNéä¸-Eåç¨ï¼æ¹ç¨äºé¢å¤çå¨ï¼å¦å妿å«ä¹ï¼ãå½åçæ¬ä¸ï¼è¿äºåæ¯çæä¹å¦ä¸
忝 | è¾åº |
D | é¤äºå¨é¢å¤çåçæ®éè¾åºï¼è¿è¾åºææå®å®ä¹ã |
I | é¢å¤çå¨é¤äºæ®éçé¢å¤çè¾åºå¤ï¼è¿è¾åº#includeæç¤ºã |
M | 卿æé¢å¤çè¾åºåï¼é¢å¤çå¨è¾åºèµ·ç¨çå®å®ä¹å表ã |
N | é¢å¤çå¨é¤äºæ®éçé¢å¤çè¾åºå¤ï¼è¿è¾åºä»¥#define nameå½¢å¼çææå®çå表ã |
Â
1575 static void
1576 handle_OPT_d (const char *arg) Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â in c-opts.c
1577 {
1578 Â Â char c;
1579
1580 Â Â while ((c = *arg++) != '/0')
1581 Â Â Â Â switch (c)
1582 Â Â Â Â {
1583 Â Â Â Â Â Â case 'M':Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
1584 Â Â Â Â Â Â case 'N':Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
1585 Â Â Â Â Â Â case 'D':Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
1586 Â Â Â Â Â Â Â Â flag_dump_macros = c;
1587 Â Â Â Â Â Â Â Â break;
1588
1589 Â Â Â Â Â Â case 'I':
1590 Â Â Â Â Â Â Â Â flag_dump_includes = 1;
1591 Â Â Â Â Â Â Â Â break;
1592 Â Â Â Â }
1593 }
Â
åå°c_common_handle_optionï¼å¨678è¡ï¼
flag_cond_mismatchï¼Cï¼-fcond-mismatchï¼å¦æé0ï¼è¡¨ç¤ºå è®¸å¨æ¡ä»¶è¡¨è¾¾å¼ä¸ä¸ç¸å¹é çç±»åï¼å¹¶ä½¿å ¶å¼ä¸ºvoidã
flag_access_controlï¼C++ï¼-faccess-controlï¼å¦æé0ï¼è¡¨ç¤ºéµä»è®¿é®æ§å¶è¯ä¹ï¼access control semanticsï¼ã
flag_no_builtinï¼Cï¼ObjCï¼-fno-builtinï¼å¦æé0ï¼è¡¨ç¤ºä¸è¯å«éANSIå å»ºå½æ°ã
Â
c_common_handle_option (continue)
Â
715Â Â Â Â case OPT_fbuiltin_:
716Â Â Â Â Â Â if (value)
717Â Â Â Â Â Â Â Â result = 0;
718Â Â Â Â Â Â else
719Â Â Â Â Â Â Â Â disable_builtin_function (arg);
720Â Â Â Â Â Â break;
721Â
722Â Â Â Â case OPT_fdollars_in_identifiers:
723Â Â Â Â Â Â cpp_opts->dollars_in_ident = value;
724Â Â Â Â Â Â break;
725Â
726Â Â Â Â case OPT_fdump_:
727Â Â Â Â Â Â if (!dump_switch_p (arg))
728Â Â Â Â Â Â Â Â result = 0;
729Â Â Â Â Â Â break;
730Â
731Â Â Â Â case OPT_ffreestanding:
732Â Â Â Â Â Â value = !value;
733Â Â Â Â Â Â
734Â Â Â Â case OPT_fhosted:
735Â Â Â Â Â Â flag_hosted = value;
736Â Â Â Â Â Â flag_no_builtin = !value;
737Â Â Â Â Â Â
738Â Â Â Â Â Â if (!value && warn_main == 2)
739Â Â Â Â Â Â Â Â warn_main = 0;
740Â Â Â Â Â Â break;
Â
å¨å½åçæ¬ï¼ä» æ¯æâfno-builtin-functionãdisabled_builtinsä¿å被å±è½çå å»ºå½æ°è³å表ä¸ã
Â
3491 void
3492 disable_builtin_function (const char *name) Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â in c-common.c
3493 {
3494 Â Â if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3495 Â Â Â Â error ("cannot disable built-in function `%s'", name);
3496 Â Â else
3497 Â Â {
3498 Â Â Â Â disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
3499 Â Â Â Â new->name = name;
3500 Â Â Â Â new->next = disabled_builtins;
3501 Â Â Â Â disabled_builtins = new;
3502 Â Â }
3503 }
Â
æ¥çï¼å¨c_common_handle_optionç735è¡ï¼flag_hostedï¼Cï¼-fhostedï¼å¦æé0ï¼è¡¨ç¤ºæç¼è¯åºçç¨åºå ¶æè¿è¡çç¯å¢æå®æ´çæ ååºï¼å¹¶ä¸mainæè¿åç±»åintï¼é»è®¤å¼ä¸º1ï¼ã
Â
c_common_handle_option (continue)
Â
742Â Â Â Â case OPT_fshort_double:
743Â Â Â Â Â Â flag_short_double = value;
744Â Â Â Â Â Â break;
745Â
746Â Â Â Â case OPT_fshort_enums:
747Â Â Â Â Â Â flag_short_enums = value;
748Â Â Â Â Â Â break;
749Â
750Â Â Â Â case OPT_fshort_wchar:
751Â Â Â Â Â Â flag_short_wchar = value;
752Â Â Â Â Â Â break;
753Â
754Â Â Â Â case OPT_fsigned_bitfields:
755Â Â Â Â Â Â flag_signed_bitfields = value;
756Â Â Â Â Â Â explicit_flag_signed_bitfields = 1;
757Â Â Â Â Â Â break;
758Â
759Â Â Â Â case OPT_fsigned_char:
760Â Â Â Â Â Â flag_signed_char = value;
761Â Â Â Â Â Â break;
762Â
763Â Â Â Â case OPT_funsigned_bitfields:
764Â Â Â Â Â Â flag_signed_bitfields = !value;
765Â Â Â Â Â Â explicit_flag_signed_bitfields = 1;
766Â Â Â Â Â Â break;
767Â
768Â Â Â Â case OPT_funsigned_char:
769Â Â Â Â Â Â flag_signed_char = !value;
770Â Â Â Â Â Â break;
771Â
772Â Â Â Â case OPT_fcheck_new:
773Â Â Â Â Â Â flag_check_new = value;
774Â Â Â Â Â Â break;
775Â
776Â Â Â Â case OPT_fconserve_space:
777Â Â Â Â Â Â flag_conserve_space = value;
778Â Â Â Â Â Â break;
779Â
780Â Â Â Â case OPT_fconst_strings:
781Â Â Â Â Â Â flag_const_strings = value;
782Â Â Â Â Â Â break;
783Â
784Â Â Â Â case OPT_fconstant_string_class_:
785Â Â Â Â Â Â constant_string_class_name = arg;
786Â Â Â Â Â Â break;
787Â
788Â Â Â Â case OPT_fdefault_inline:
789Â Â Â Â Â Â flag_default_inline = value;
790Â Â Â Â Â Â break;
791Â
792Â Â Â Â case OPT_felide_constructors:
793Â Â Â Â Â Â flag_elide_constructors = value;
794Â Â Â Â Â Â break;
795Â
796Â Â Â Â case OPT_fenforce_eh_specs:
797Â Â Â Â Â Â flag_enforce_eh_specs = value;
798Â Â Â Â Â Â break;
799Â
800Â Â Â Â case OPT_ffixed_form:
801Â Â Â Â case OPT_ffixed_line_length_:
802Â Â Â Â Â Â
803Â Â Â Â Â Â if (!flag_preprocess_only)
804Â Â Â Â Â Â Â Â result = 0;
805Â Â Â Â Â Â break;
806Â
807Â Â Â Â case OPT_ffor_scope:
808Â Â Â Â Â Â flag_new_for_scope = value;
809Â Â Â Â Â Â break;
810Â
811Â Â Â Â case OPT_fgnu_keywords:
812Â Â Â Â Â Â flag_no_gnu_keywords = !value;
813Â Â Â Â Â Â break;
814Â
815Â Â Â Â case OPT_fgnu_runtime:
816Â Â Â Â Â Â flag_next_runtime = !value;
817Â Â Â Â Â Â break;
818Â
819Â Â Â Â case OPT_fhandle_exceptions:
820Â Â Â Â Â Â warning ("-fhandle-exceptions has been renamed -fexceptions (and is now on by default)");
821Â Â Â Â Â Â flag_exceptions = value;
822Â Â Â Â Â Â break;
823Â
824Â Â Â Â case OPT_fimplement_inlines:
825Â Â Â Â Â Â flag_implement_inlines = value;
826Â Â Â Â Â Â break;
827Â
828Â Â Â Â case OPT_fimplicit_inline_templates:
829Â Â Â Â Â Â flag_implicit_inline_templates = value;
830Â Â Â Â Â Â break;
831Â
832Â Â Â Â case OPT_fimplicit_templates:
833Â Â Â Â Â Â flag_implicit_templates = value;
834Â Â Â Â Â Â break;
835Â
836Â Â Â Â case OPT_fms_extensions:
837Â Â Â Â Â Â flag_ms_extensions = value;
838Â Â Â Â Â Â break;
839Â
840Â Â Â Â case OPT_fnext_runtime:
841Â Â Â Â Â Â flag_next_runtime = value;
842Â Â Â Â Â Â break;
843Â
844Â Â Â Â case OPT_fnil_receivers:
845Â Â Â Â Â Â flag_nil_receivers = value;
846Â Â Â Â Â Â break;
847Â
848Â Â Â Â case OPT_fnonansi_builtins:
849Â Â Â Â Â Â flag_no_nonansi_builtin = !value;
850Â Â Â Â Â Â break;
851Â
852Â Â Â Â case OPT_fobjc_exceptions:
853Â Â Â Â Â Â flag_objc_exceptions = value;
854Â Â Â Â Â Â break;
855Â
856Â Â Â Â case OPT_foperator_names:
857Â Â Â Â Â Â cpp_opts->operator_names = value;
858Â Â Â Â Â Â break;
859Â
860Â Â Â Â case OPT_foptional_diags:
861Â Â Â Â Â Â flag_optional_diags = value;
862Â Â Â Â Â Â break;
863Â
864Â Â Â Â case OPT_fpch_deps:
865Â Â Â Â Â Â cpp_opts->restore_pch_deps = value;
866Â Â Â Â Â Â break;
867Â
868Â Â Â Â case OPT_fpermissive:
869Â Â Â Â Â Â flag_permissive = value;
870Â Â Â Â Â Â break;
871Â
872Â Â Â Â case OPT_fpreprocessed:
873Â Â Â Â Â Â cpp_opts->preprocessed = value;
874Â Â Â Â Â Â break;
875Â
876Â Â Â Â case OPT_freplace_objc_classes:
877Â Â Â Â Â Â flag_replace_objc_classes = value;
878Â Â Â Â Â Â break;
879Â Â Â Â Â Â
880Â Â Â Â case OPT_frepo:
881Â Â Â Â Â Â flag_use_repository = value;
882Â Â Â Â Â Â if (value)
883Â Â Â Â Â Â Â Â flag_implicit_templates = 0;
884Â Â Â Â Â Â break;
885Â
886Â Â Â Â case OPT_frtti:
887Â Â Â Â Â Â flag_rtti = value;
888Â Â Â Â Â Â break;
889Â
890Â Â Â Â case OPT_fshow_column:
891Â Â Â Â Â Â cpp_opts->show_column = value;
892Â Â Â Â Â Â break;
893Â
894Â Â Â Â case OPT_fstats:
895Â Â Â Â Â Â flag_detailed_statistics = value;
896Â Â Â Â Â Â break;
897Â
898Â Â Â Â case OPT_ftabstop_:
899Â Â Â Â Â Â
900Â Â Â Â Â Â if (value >= 1 && value <= 100)
901Â Â Â Â Â Â Â Â cpp_opts->tabstop = value;
902Â Â Â Â Â Â break;
903Â
904Â Â Â Â case OPT_fexec_charset_:
905Â Â Â Â Â Â cpp_opts->narrow_charset = arg;
906Â Â Â Â Â Â break;
907Â
908Â Â Â Â case OPT_fwide_exec_charset_:
909Â Â Â Â Â Â cpp_opts->wide_charset = arg;
910Â Â Â Â Â Â break;
911Â
912Â Â Â Â case OPT_finput_charset_:
913Â Â Â Â Â Â cpp_opts->input_charset = arg;
914Â Â Â Â Â Â break;
915Â
916Â Â Â Â case OPT_ftemplate_depth_:
917Â Â Â Â Â Â max_tinst_depth = value;
918Â Â Â Â Â Â break;
919Â
920Â Â Â Â case OPT_fuse_cxa_atexit:
921Â Â Â Â Â Â flag_use_cxa_atexit = value;
922Â Â Â Â Â Â break;
923Â
924Â Â Â Â case OPT_fweak:
925Â Â Â Â Â Â flag_weak = value;
926Â Â Â Â Â Â break;
927Â
928Â Â Â Â case OPT_fzero_link:
929Â Â Â Â Â Â flag_zero_link = value;
930Â Â Â Â Â Â break;
931Â
932Â Â Â Â case OPT_gen_decls:
933Â Â Â Â Â Â flag_gen_declaration = 1;
934Â Â Â Â Â Â break;
935Â
936Â Â Â Â case OPT_idirafter:
937Â Â Â Â Â Â add_path (xstrdup (arg), AFTER, 0);
938Â Â Â Â Â Â break;
939Â
940Â Â Â Â case OPT_imacros:
941Â Â Â Â case OPT_include:
942Â Â Â Â Â Â defer_opt (code, arg);
943Â Â Â Â Â Â break;
944Â
945Â Â Â Â case OPT_iprefix:
946Â Â Â Â Â Â iprefix = arg;
947Â Â Â Â Â Â break;
948Â
949Â Â Â Â case OPT_isysroot:
950Â Â Â Â Â Â sysroot = arg;
951Â Â Â Â Â Â break;
952Â
953Â Â Â Â case OPT_isystem:
954Â Â Â Â Â Â add_path (xstrdup (arg), SYSTEM, 0);
955Â Â Â Â Â Â break;
Â
ä¸é¢ï¼flag_short_double妿é0ï¼è¡¨ç¤ºdoubleåfloatç大å°ä¸è´ã.
flag_short_enumsï¼-fshort-enumsï¼å¦æé0ï¼è¡¨ç¤ºåªç»æä¸¾ç±»å以æéè¦ç大å°ã
flag_short_wcharï¼Cï¼C++ï¼-fshort-wcharï¼å¦æé0ï¼è¡¨ç¤ºwchar_tåshor大å°ä¸è´ã
flag_signed_bitfieldsï¼Cï¼-fsigned-bitfieldsï¼å¦æé0ï¼è¡¨ç¤ºå³ä¾¿ä½å声æä¸ºæ 符å·ï¼ä¹è¦æå®ä»¬ææç¬¦å·å¤çï¼é»è®¤å¼ä¸º1ï¼ã
flag_signed_charï¼Cï¼-fsigned-charï¼å¦æé0ï¼è¡¨ç¤ºcharåºä¸ºæç¬¦å·ã
flag_check_newï¼C++ï¼-fcheck-newï¼å¦æé0ï¼è¡¨ç¤ºéè¦æ£æ¥newè¿åçå¼ï¼ä»¥é¿å ä¸ä¸ä¸ºç©ºæéå´ä¸ºå ¶è°ç¨æé 彿°ã
flag_conserve_spaceï¼C++ï¼-fconserve-spaceï¼å¦æé0ï¼æç¼è¯æ¶æªåå§åçå ¨å±åéæ¾å ¥å ¬å ±æ®µï¼å¦Cæåï¼ãè¿ä¼åå°å¯æ§è¡æä»¶ç大å°ï¼å 为ç´è³ç¨åºè¢«å è½½åï¼å ¬å ±æ®µä¸åé ä»»ä½ç©ºé´ãè¿ä¸ªé项å¨ç»å¤§é¨åå¹³å°ä¸å·²ä¸åæç¨ï¼å 为è¿äºå¹³å°é½å·²æ¯ææåéå å ¥BSS段ï¼èä¸éä»¤å ¶ä¸ºå ¬å ±ãè¦åï¼å¦æä½¿ç¨è¿ä¸ªé项导è´ä½ çç¨åºå¨éåºæ¶å´©æºï¼è¿å¯è½æ¯å 为对象å®ä¹è¢«åå¹¶å¹¶èµäºåä¸å°åï¼ä»è导è´äº2次ææã
flag_default_inlineï¼C++ï¼-fdefault-inlineï¼å¦æé0表示类ä¸å®ä¹çæå彿°é»è®¤ä¸ºå èï¼é»è®¤å¼ä¸º1ï¼ã
flag_elide_constructorsï¼C++ï¼-felide-constructorï¼å¦æé0ï¼è°ç¨ä¸ä¸ªæå¼è¿å对象ç彿°ç代ç ï¼å¯ä»¥è¢«ç®åä¸ºå¨æå®çè¿åå°åæå»ºå¯¹è±¡ï¼è䏿¯ä½¿ç¨æ·è´æé 彿°å¤å¶å¨å½æ°ä¸æå»ºç对象ã妿æé 彿°æå¯ä½ç¨ï¼è¿å°å¯¼è´é®é¢ï¼é»è®¤å¼ä¸º1ï¼ã
flag_enforce_eh_specsï¼C++ï¼-fenforce-eh-specsï¼å¦æé0ï¼è¡¨ç¤ºä¸ºå¼å¸¸è§èå®ç°æ åè¯ä¹ï¼standard semanticsï¼ï¼å³è°ç¨ä¸ä¸ä¼æä¸ç¬¦åè§èçå¼å¸¸è¢«æåºã0å表示ææè¨æ¥å¤çå¹¶ç¸åºä¼åä¹ï¼ä½ä¸å¯¹å ¶åæ£æ¥ï¼é»è®¤å¼ä¸º1ï¼ã
flag_new_for_scopeï¼C++ï¼-ffor-scopeï¼ï¼è¿ä¸ªè®¾ç½®å³å®äºï¼å¨forè¯å¥çåå§åé¨å声æçï¼åéçä½ç¨åãææ-ffor-scopeåéå¶è¿äºåéçä½ç¨åå¨å¾ªç¯ä½å ãææ-fno-for-scope åéå¶åéä½ç¨èªå£°æç¹è³å å«forè¯å¥çåãä¸é¢çä¾åï¼å¨-fno-for-scopeé项ä¸ï¼æ¯ææçï¼
#include <stdio.h>
int main(int argc,char *argv[])
{
for(int i=0; i<10; i++) {
printf("Loop one %d/n",i);
}
printf("Out of loop %d/n",i);
return(0);
}
è¿ä¸ªé项ç®å为é»è®¤é项ã
flag_implement_inlinesï¼C++ï¼-fimplement-inlinesï¼å¦æé0ï¼è¢«å®ç°ä¸ºå èç彿°äº¦æå½æ°ä½å¨å®ä¹ç¹çæãé项-fno-implement-inlineså°åå¶ç±#pragma æ§å¶çå è彿°ç彿°ä½ççæãå¦ææ²¡æå½æ°ä½çæï¼å¯¹å ¶æ¯æ¬¡è°ç¨å¿ é¡»çæå è代ç ï¼é»è®¤å¼ä¸º1ï¼ã
flag_implicit_inline_templatesï¼C++ï¼-fimplicit-inline-templatesï¼å¦æé0ï¼è¡¨ç¤ºå èæ¨¡æ¿çéå¼å ·ç°ï¼implicit instantiations of inline templateï¼å¨éè¦æ¶å°±è¢«äº§çï¼å³ä¾¿éå èæ¨¡æ¿çå ·ç°ä¸æ¯è¿æ ·ï¼é»è®¤å¼ä¸º1ï¼ã.
flag_implicit_templatesï¼C++ï¼-fimplicit-templatesï¼å¦æé0ï¼è¡¨ç¤ºå¨éè¦æ¶å³å¯éå¼å ·ç°æ¨¡æ¿ï¼é»è®¤å¼ä¸º1ï¼ã
flag_ms_extensionsï¼C++ï¼-fms-extensionsï¼å¦æé0ï¼å¨ä½¿ç¨MFCä¸å®ä¹ä¹æä»¶æ¶ï¼ç¦æ¢è¯¸å¦ï¼æ°æ®å£°æä¸çéå¼intå®ä¹ï¼åéè¿éæ åè¯æ³è·åæåæå彿°çæéçï¼è¦åæ¶æ¯ã
flag_optional_diagsï¼C++ï¼-foptional-diagsï¼å¦æé0ï¼è¡¨ç¤ºææç»åºæ åä¸è¦æ±ä¹è¯æä¿¡æ¯ï¼é»è®¤å¼ä¸º1ï¼ã
flag_permissiveï¼C++ï¼-fpermissiveï¼å¦æé0ï¼ä¸ºä¸ç¬¦åæ åç代ç ååºè¦åè¯æä¿¡æ¯ï¼è䏿¯éè¯¯æ¶æ¯ã妿-fpermissiveå-pedantic齿²¡æææï¼-fpedantic-errorså被åºç¨ã
flag_use_repositoryï¼C++ï¼-frepo) 妿é0ï¼è¡¨ç¤ºçæåç«çå ·ç°æ§å¶æä»¶ï¼å¹¶å¨è¿æ¥æ¶å»å©ç¨ä¹ã
flag_rttiï¼C++ï¼-frtti)妿é0ï¼è¡¨ç¤ºä¸ºæ¯ä¸ªå å«è彿°ç±»çè¿è¡æ¶è¯å«ç³»ç»çæä»£ç ãå¦ææ²¡æä½¿ç¨dynamic_caståtypeidï¼ä½¿ç¨-fno-rtti æ¥åå¶è¿äºä»£ç ççæå¯ä»¥ä¸ºæ¯ä¸ªç±»èç空é´ãè¿ä¸ªé项对å¼å¸¸å¤çä¸èµ·ä½ç¨ï¼å¼å¸¸å¤çå¿ é¡»ä¸ºrtti产ç代ç ï¼é»è®¤å¼ä¸º1ï¼ã
flag_detailed_statisticsï¼C++ï¼-fstatsï¼å¦æé0ï¼è¡¨ç¤ºæ¾ç¤ºå端å¤ççç»è®¡ä¿¡æ¯ãè¿ä¸ªæ¶æ¯æ¶åç¼è¯å¨çå é¨ï¼ä¸å½±åå ¶è¾åºï¼é»è®¤å¼ä¸º0ï¼ã
max_tinst_depthï¼C++ï¼-ftemplate-depth-numberï¼æææ¨¡æ¿æå¤§å ·ç°æ·±åº¦ãè¿ä¸ªéå¶æ¯ç¸å½éæçï¼è®¾å®å®æ¯ä¸ºäºå¯è§æ éåµå¥ç模æ¿å ·ç°ï¼é»è®¤å¼ä¸º500ï¼ã
flag_use_cxa_atexitï¼C++ï¼-fuse-cxa-atexitï¼å¯¼è´å ¨å±ææå½æ°ä»¥æé 彿°å®æç次åºçååºæ§è¡ï¼è䏿¯ä»¥æé 彿°å¼å§ç次åºçååºãåªæå ¨å±çæé 彿°å¨å ¶ä»å ¨å±æé 彿°ä¸è°ç¨ï¼è¿2ä¸ªæ¬¡åºæä¼ä¸åãè¿ä¸ªéé¡¹åªæå½Cè¿è¡æ¶åºå æ¬cxa_exit 彿°æ¶ï¼æèµ·ä½ç¨ã没æè¿ä¸ªé项æ¶ï¼å°ä½¿ç¨å½æ°atexitã
flag_weakï¼C++ï¼-fweakï¼å¦æé0ï¼è¡¨ç¤ºå°½å¯è½å°å ¬å ±ç±»å«ï¼common-likeï¼çå·²å®ä¹ç¬¦å·çæä¸ºå¼±ç¬¦å·ï¼weak symbolï¼ï¼ä»¥ç¬¦åC++çè¯ä¹ãå¦åå°å ¶çæä¸ºå±é¨ç¬¦å·ï¼local symbolï¼ï¼é»è®¤å¼ä¸º1ï¼ã
iprefixï¼ç±âiprefix prefixç»åºçåç¼ã
sysrootï¼ç³»ç»æ ¹ç®å½ãç±âisysrootæ¹åï¼é»è®¤å¼ä¸ºNULLï¼ã
Â
c_common_handle_option (continue)
Â
957Â Â Â Â Â case OPT_iwithprefix:
958Â Â Â Â Â Â Â add_prefixed_path (arg, SYSTEM);
959Â Â Â Â Â Â Â break;
960Â
961Â Â Â Â Â case OPT_iwithprefixbefore:
962Â Â Â Â Â Â Â add_prefixed_path (arg, BRACKET);
963Â Â Â Â Â Â Â break;
964Â
965Â Â Â Â Â case OPT_lang_asm:
966Â Â Â Â Â Â Â cpp_set_lang (parse_in, CLK_ASM);
967Â Â Â Â Â Â Â cpp_opts->dollars_in_ident = false;
968Â Â Â Â Â Â Â break;
969Â
970Â Â Â Â Â case OPT_lang_objc:
971Â Â Â Â Â Â Â cpp_opts->objc = 1;
972Â Â Â Â Â Â Â break;
973Â
974Â Â Â Â Â case OPT_nostdinc:
975Â Â Â Â Â Â Â std_inc = false;
976Â Â Â Â Â Â Â break;
977Â
978Â Â Â Â Â case OPT_nostdinc__:
979Â Â Â Â Â Â Â std_cxx_inc = false;
980Â Â Â Â Â Â Â break;
981Â
982Â Â Â Â Â case OPT_o:
983Â Â Â Â Â Â Â if (!out_fname)
984Â Â Â Â Â Â Â Â Â out_fname = arg;
985Â Â Â Â Â Â Â else
986Â Â Â Â Â Â Â Â Â error ("output filename specified twice");
987Â Â Â Â Â Â Â break;
988Â
989Â Â Â Â Â
992Â Â Â Â Â case OPT_pedantic_errors:
993Â Â Â Â Â Â Â cpp_opts->pedantic_errors = 1;
994Â Â Â Â Â Â Â
995Â Â Â Â Â case OPT_pedantic:
996Â Â Â Â Â Â Â cpp_opts->pedantic = 1;
997Â Â Â Â Â Â Â cpp_opts->warn_endif_labels = 1;
998Â Â Â Â Â Â Â break;
999Â
1000Â Â Â Â case OPT_print_objc_runtime_info:
1001Â Â Â Â Â Â print_struct_values = 1;
1002Â Â Â Â Â Â break;
1003
1004Â Â Â Â case OPT_remap:
1005Â Â Â Â Â Â cpp_opts->remap = 1;
1006Â Â Â Â Â Â break;
1007
1008Â Â Â Â case OPT_std_c__98:
1009Â Â Â Â case OPT_std_gnu__98:
1010Â Â Â Â Â Â set_std_cxx98 (code == OPT_std_c__98 );
1011 Â Â Â Â Â Â break;
1012
1013 Â Â Â Â case OPT_std_c89:
1014Â Â Â Â case OPT_std_iso9899_1990:
1015Â Â Â Â case OPT_std_iso9899_199409:
1016Â Â Â Â Â Â set_std_c89 (code == OPT_std_iso9899_199409 , true );
1017Â Â Â Â Â Â break;
1018
1019Â Â Â Â case OPT_std_gnu89:
1020Â Â Â Â Â Â set_std_c89 (false , false );
1021 Â Â Â Â Â Â break;
1022
1023Â Â Â Â case OPT_std_c99:
1024 Â Â Â Â case OPT_std_c9x:
1025Â Â Â Â case OPT_std_iso9899_1999:
1026Â Â Â Â case OPT_std_iso9899_199x:
1027Â Â Â Â Â Â set_std_c99 (true );
1028Â Â Â Â Â Â break;
1029
1030Â Â Â Â case OPT_std_gnu99:
1031Â Â Â Â case OPT_std_gnu9x:
1032Â Â Â Â Â Â set_std_c99 (false );
1033 Â Â Â Â Â Â break;
1034
1035Â Â Â Â case OPT_trigraphs:
1036Â Â Â Â Â Â cpp_opts->trigraphs = 1;
1037Â Â Â Â Â Â break;
1038
1039Â Â Â Â case OPT_traditional_cpp:
1040Â Â Â Â Â Â cpp_opts->traditional = 1;
1041Â Â Â Â Â Â break;
1042
1043Â Â Â Â case OPT_undef:
1044Â Â Â Â Â Â flag_undef = 1;
1045Â Â Â Â Â Â break;
1046
1047Â Â Â Â case OPT_w:
1048Â Â Â Â Â Â cpp_opts->inhibit_warnings = 1;
1049Â Â Â Â Â Â break;
1050
1051Â Â Â Â case OPT_v:
1052Â Â Â Â Â Â verbose = true;
1053Â Â Â Â Â Â break;
1054Â Â }
1055
1056 Â Â return result;
1057 }
Â
é项âwithprefixå头æä»¶æ¥æ¾ç®å½ç第äºä¸ªå表ä¸å å ¥ç®å½åãè¿ä¸ªååéè¿å¨ç®å½åååï¼éå ç±-iprefix æå®çåç¼æå»ºèå¾ã妿å¨è¯¥é项åï¼å½ä»¤è¡ä¸æ²¡ææå®åç¼ï¼ä½¿ç¨ç¼è¯å¨çé»è®¤å å«ç®å½ã
ä¸ºæ¥æ¾å¤´æä»¶ï¼GCCæµè§ç¬¬ä¸ä¸ªå表ä¸çç®å½ï¼ç±-Ié项添å çç®å½ï¼ã妿å¨è¿ç¬¬ä¸å表ä¸ï¼æ¾ä¸å°å¤´æä»¶ï¼å°±ä¼æ¥æ¾ç¬¬äºä¸ªå表ã
èé项âiwithprefixbeforeå主å å«è·¯å¾çç®å½åè¡¨ä¸æ·»å ååãè¿ä¸ªååéè¿å¨ç®å½åååï¼éå ç±-iprefix æå®çåç¼æå»ºèå¾ã妿å¨è¯¥é项åï¼å½ä»¤è¡ä¸æ²¡ææå®åç¼ï¼ä½¿ç¨ç¼è¯å¨çé»è®¤å å«ç®å½ã
对äºè¿äºé项ï¼å½æ°add_prefixed_path被è°ç¨ãå¨1399è¡ï¼cpp_GCC_INCLUDE_DIR对äºx86/Linuxç®æ å¹³å°ä¸ºââï¼å®å¨iprefixæ è®¾å®æ¶ä½¿ç¨ã
Â
1391 static void
1392 add_prefixed_path (const char *suffix, size_t chain) Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â in c-opts.c
1393 {
1394 Â Â char *path;
1395 Â Â const char *prefix;
1396 Â Â size_t prefix_len, suffix_len;
1397
1398 Â Â suffix_len = strlen (suffix);
1399   prefix    = iprefix ? iprefix: cpp_GCC_INCLUDE_DIR;
1400 Â Â prefix_len = iprefix? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
1401
1402 Â Â path = xmalloc (prefix_len + suffix_len + 1);
1403 Â Â memcpy (path, prefix, prefix_len);
1404 Â Â memcpy (path + prefix_len, suffix, suffix_len);
1405 Â Â path[prefix_len + suffix_len] = '/0';
1406
1407 Â Â add_path (path, chain, 0);
1408 }
Â
ä¸é¢c_common_handle_optionç965è¡ï¼å¯¹äºé项âlang-asmï¼ådollars_in_ident妿é0ï¼è¡¨ç¤ºç¾å 符å·ä¹æ¯æ ç¹ï¼punctuationï¼ã
对äºå ¶ä»é项ï¼
std_incï¼-nostdincï¼ï¼å¦æä¸º0ï¼é»æ¢ç¼è¯å¨å¨æ åç³»ç»ç®å½ä¸æ¥æ¾å¤´æä»¶ãè¢«æ¥æ¾çç®å½ä» å æ¬å½ååç±-Ié项æå®çç®å½ã
std_cxx_incï¼-nostdinc++ï¼ï¼å¦æä¸º0ï¼é»æ¢ç¼è¯å¨å¨æ åC++ç®å½ä¸æ¥æ¾å¤´æä»¶ï¼ä½å¨å ¶ä»æ åç®å½ä¸ç»§ç»å ¶æ¥æ¾ãè¿ä¸ªé项ç¹å«ç¨äºC++åºçç¼è¯ã
out_fnameï¼-o filenameï¼ï¼å°è¾åºåå½åçæä»¶ãæ 论产çä½ç§è¾åºï¼è¿ä¸ªé项çå¯åºç¨ï¼å®å¯ä»¥æ¯é¢å¤çè¾åºï¼æ±ç¼ä»£ç ï¼ä¸ä¸ªç®æ æä»¶æè ä¸ä¸ªå®æé¾æ¥çæ§è¡æä»¶ãå 为åªå¯ä»¥æå®ä¸ä¸ªè¾åºæä»¶ï¼å¦ææå¤ä¸ªæä»¶äº§çï¼å°±ä¸åºä½¿ç¨-oé项ã妿ç¼è¯å¨äº§ç宿龿¥çæ§è¡æä»¶ï¼è没æä½¿ç¨-oé项æå®æä»¶åï¼é»è®¤çæä»¶å为a.outã
-pedantic-errorsï¼è¿ä¸ªé项ä¸-pedanticç¸åï¼é¤äºè¯æä¿¡æ¯ä½ä¸ºé误ååºè䏿¯è¦åã对äºC++ï¼å¦æ-fpermissiveæ-pedanticé项齿²¡æå®ï¼å°±åºç¨-fpedantic-errorsé项ã
-pedanticï¼æä¸¥æ ¼ç¬¦åCåC++ ISOæ åçè¦æ±ï¼è¿è¡è¦åãæ²¡æè¿ä¸ªé项ï¼GNUæ©å±å°è¢«ä½¿è½ï¼ä½ç¬¦åISOçç¨åºä»å¯ä»¥æåç¼è¯ï¼è½ç¶ä¸äºè¦æ±-ansié项ï¼ã对äºCï¼æåºç¨çæ åç±-stdé项æå®ã妿-stdæå®äºgnu89ï¼é£ä¹-pedanticéç¨C89çè§åãé项-pedanticä» ååºISOæ åè¦æ±çè¯ææ¶æ¯ï¼å æ¤æå¯è½ä»£ç ä¸ç¬¦åæ å使²¡æè¦åååºãGCCå°æ 计åå®ç°å¼ºå¶ä¸¥æ ¼ç¬¦åæ åçé项ã对äºCï¼é项-pedanticä¸éç¨äºä»»ä½è·å¨__extension__åç表达å¼ã
对äºC++ï¼å¦æ-fpermissiveæ-pedanticé项齿²¡æå®ï¼å°±åºç¨-fpedantic-errorsé项ã
å¨1004è¡ï¼-remapï¼è¿ä¸ªé项æå¼é¢å¤çå¨ï¼å¨æ¯ä¸ªå å«å 嫿件çç®å½ä¸ï¼æ£æ¥å为header.gccçæä»¶æ¯å¦åå¨ãå¦æè¯¥æä»¶åå¨ï¼å®ç¨äºç¡®å®è¢«æ¥æ¾æä»¶ççå®ååãè¿ä¸ªæä»¶çæ¯ä¸è¡å å«è¢«æ¥æ¾ç头æä»¶åï¼åè·çå®çæä»¶åãä¾å¦ï¼å¨header.gccä¸ï¼ä¸åè¡å°ä½¿å¾ï¼å ·æé¿ååç头æä»¶ï¼éè¿è¾ççå忥æ¾å°ï¼
NotSupportedException.h notsup.h
RollbackException.h rollbak.h
TransactionRequiredException.h transreq.h
-trigraphsï¼æ¯æISO Cçä¸å 符ï¼trigraphï¼ãè¿ä¸ªé项ç±-ansiå-stdæä¸æå¼ãå¨è¿ä¸ªæ¶æ¯æå¼æ¶ï¼ææ9个ä¸å ç¬¦çæ¯ä¸ª3å符åºåï¼ä»¥??å¼å¤´ï¼å°ï¼æ ¹æ®ä¸è¡¨ï¼è¢«è§£é为å个å符ï¼
??=Â # Â Â Â ??( [ Â Â Â Â Â ??< {
??/ / Â Â Â ??) ] Â Â Â Â Â ??> }
??' Â ^ Â Â Â ??! | Â Â Â Â Â ??- ~
flag_undefï¼-undefï¼ï¼å¦æé0ï¼é¢å¤çå¨ä¸é¢å å®ä¹ä»»ä½éæ åçå®ãè¿ä¸ªé项åå¶äºè¯¸å¦__unix__ï¼__OpenBSD__ï¼__mips__ï¼__linux__ï¼__vax__çè¿æ ·çæ¶æå®ä¹ã
-wï¼ä¸è¦äº§çè¦åä¿¡æ¯ãçåäº--no-warningsã
Verboseï¼-vï¼ï¼å¦æé0ï¼æ¾ç¤ºç¼è¯å¨çå½åçæ¬ï¼åæ¾ç¤ºè¿è¡åç¼è¯é¶æ®µå龿¥å¤ççææå½ä»¤ãå½åç¬ä½¿ç¨æ¶ï¼è¿ä¸ªé项æ¾ç¤ºç¼è¯å¨çå½åçæ¬å·ãå½ä¸âhelpé项è¿ç¨æ¶ï¼æ¾ç¤ºå®æ´çå½ä»¤è¡é项å表ã
åå°handle_optionï¼c_common_handle_option妿æå宿äºé项çå¤çï¼å°è¿å1ãè对äºä¸å¯è¯å«çé项ï¼ç»æä¾èµäºpermit_fortran_optionsï¼è¿ä¸ªåéå¨c_common_init_optionsä¸ç±-traditional-cpp设å®ãè¥è¿å0å°éè¦ç»§ç»ä»¥ä¸çå¤çã
Â