From b280aa33138d213adc748669e3a488b4d15e9ed7 Mon Sep 17 00:00:00 2001 From: Samuel Pomeroy <1690@holbertonschool.com> Date: Mon, 22 Nov 2021 20:51:28 +0000 Subject: [PATCH] 0x00-0x02 update README to new format; add test mains --- 0x00-ls/README.md | 130 +- 0x01-getline/README.md | 102 +- 0x01-getline/tests/0-main.c | 36 + 0x01-getline/tests/1-main.c | 26 + 0x01-getline/tests/100-main.c | 42 + 0x01-getline/tests/2-main.c | 80 + 0x01-getline/tests/man_cat | 84 + 0x01-getline/tests/man_gcc | 18672 ++++++++++++++++++++++++++++++++ 0x01-getline/tests/the_swing | 16 + 0x01-getline/tests/zero | Bin 0 -> 65 bytes 0x02-shell_v2/README.md | 313 + README.md | 10 +- 12 files changed, 19506 insertions(+), 5 deletions(-) create mode 100644 0x01-getline/tests/0-main.c create mode 100644 0x01-getline/tests/1-main.c create mode 100644 0x01-getline/tests/100-main.c create mode 100644 0x01-getline/tests/2-main.c create mode 100644 0x01-getline/tests/man_cat create mode 100644 0x01-getline/tests/man_gcc create mode 100644 0x01-getline/tests/the_swing create mode 100644 0x01-getline/tests/zero create mode 100644 0x02-shell_v2/README.md diff --git a/0x00-ls/README.md b/0x00-ls/README.md index 0fa7600..22b6d94 100644 --- a/0x00-ls/README.md +++ b/0x00-ls/README.md @@ -1 +1,129 @@ -# 0x00. C - ls +# (308) 0x00. C - ls +Specializations > System programming & Algorithm > Linux Programming + +### Project author +Wilfried Hennuyer + +### Assignment dates +11-30-2020 to 12-04-2020 + +### Description +Building a clone of the Linux function `ls`. + +### Requirements +* Allowed Functions and System Calls + * opendir (man 3 opendir) + * readdir (man 3 readdir) + * closedir (man 3 closedir) + * exit (man 3 exit) + * free (man 3 free) + * lstat (man 2 lstat) + * malloc (man 3 malloc) + * perror (man 3 perror) + * write (man 2 write) + * printf (man 3 printf) + * sprintf (man 3 sprintf) + * fprintf (man 3 fprintf) + * readlink (man 2 readlink) + * ctime (man 3 ctime) + * getpwuid (man 3 getpwuid) + * getgrgid (man 3 getgrgid) + * errno (man 3 errno) +* Compiled: `gcc -Wall -Werror -Wextra -pedantic *.c -o hls` +* Your program should give the same result as the real `ls`: +```bash +$ ls test +abc BCD file file2 file3 folder1 folder2 folder3 +$ ./hls test +abc BCD file file2 file3 folder1 folder2 folder3 +$ ls -1 +abc +BCD +file +file2 +file3 +folder1 +folder2 +folder3 +hls +$ ./hls -1 +abc +BCD +file +file2 +file3 +folder1 +folder2 +folder3 +hls +$ +``` +* For all tasks of this project, unless explicitly said otherwise: + * You don’t have to worry about the spacing + * You don’t have to worry about the sorting + +### Provided file(s) + +--- + +## Mandatory Tasks + +### :white_large_square: 0. Let's start with something simple! +Create a program that lists the content of the current directory. +* Usage: `hls` + +### :white_large_square: 1. Maybe some parameters? +Your program should now take one or more file or directory names as parameters. +* Usage: `hls [FILE]...` +* Errors must be printed the same way than `ls` does: + * In `stderr` + * Starting by ``: (`` being `argv[0]`) + * `No such file or directory`, `Permission denied`, etc… + * Don’t forget the exit value + +### :white_large_square: 2. What about options? +Implement the `-1` option. +* Usage: `hls [-1] [FILE]...` +* For the rest of the project, an option will be identified by a command-line argument starting with the character `-` (like `ls`). +* Pay attention to “edge cases”: you should be able to handle multiple options, in any order. + +### :white_check_mark: 3. Hidden files +Implement the `-a` option. +* Usage: `hls [-a1] [FILE]...` + +### :white_check_mark: 4. Almost all +Implement the `-A` option. +* Usage: `hls [-A] [FILE]...` + +### :white_check_mark: 5. More details +Implement the `-l` option. +* Usage: `hls [-l] [FILE]...` +* You might notice the `total XX` in the first line of `ls -l`. You can ignore this value for this exercise. +* Pay attention to “edge cases”: Usernames and group names are not always defined. + +## Advanced Tasks + +### :white_check_mark: 6. Mixing options +All options together. +* Usage: `hls [-1aAl] [FILE]...` + +### :white_check_mark: 7. Esrever +Implement the `-r` option. +* Usage: `hls [-1aAlr] [FILE]...` + +### :white_check_mark: 8. More sorting? +Implement the `-S` option. +Usage: `hls [-1aAlrS] [FILE]...` + +### :white_check_mark: 9. I know you like sorting things. +Implement the `-t` option. +* Usage: `hls [-1aAlrSt] [FILE]...` + +### :white_check_mark: 10. The Juggernaut +Implement the `-R` option. +* Usage: `hls [-1aAlrStR] [FILE]...` + +--- + +## Student +* **Samuel Pomeroy** - [allelomorph](github.com/allelomorph) diff --git a/0x01-getline/README.md b/0x01-getline/README.md index d83f1b9..74ed5aa 100644 --- a/0x01-getline/README.md +++ b/0x01-getline/README.md @@ -1 +1,101 @@ -# 0x01. C - Static variables, getline +# (322) 0x01. C - Static variables, getline +Specializations > System programming & Algorithm > Linux Programming + +### Project author +Julien Barbier + +### Assignment dates +12-07-2020 to 12-15-2020 + +### Description +Introduction to static variables in C and building a clone of the glibc function `getline`. + +### Requirements +* Allowed Functions and System Calls + * `read` + * `write` + * `malloc` + * `realloc` + * `free` + * `strcpy` + * `strncpy` + * `strcat` + * `strdup` + * `memset` + * `memcpy` + +### Provided file(s) +* [`man_cat`](./tests/man_cat) [`man_gcc`](./tests/man_gcc) [`the_swing`](./tests/the_swing) +* [`zero`](./tests/zero) +* [`0-main.c`](./tests/0-main.c) [`1-main.c`](./tests/1-main.c) [`2-main.c`](./tests/2-main.c) [`3-main.c`](./tests/3-main.c) + +--- + +## Mandatory Tasks + +### :white_check_mark: 0. Racing cars +Write a function that keeps track of the number of laps made by several cars in a race. + * Prototype: `void race_state(int *id, size_t size)` + * `id` is an array of `int` representing the “identifier” of each car. + * `size` is the size of this array + * Each car identifier is unique + * If an identifier is unknown: + * Create a new car with the number of laps = 0 + * Print `Car X joined the race` followed by a new line (where `X` is the identifier) + * Each time the function is called: + * The number of laps of each cars listed in `id` must be incremented by 1 + * Print the state of the race: + * Header: `Race state:` followed by a new line + * For each car sorted by the identifier: `Car X [Y laps]` (where `X` is the identifier and `Y` the number of laps already done) + * If your function is called with `size = 0`, you must free all allocated memory. + +File(s): [`laps.c`](./laps.c) [`laps.h`](./laps.h)\ +Compiled: `gcc -Wall -Wextra -Werror -pedantic 0-main.c laps.c -o laps` + +### :white_check_mark: 1. _getline +Write a function that reads an entire line from a file descriptor. + * Prototype: `char *_getline(const int fd)` + * Where `fd` is the file descriptor to read from + * If there are no more lines to return, or if there is an error, the function should return NULL + * The function returns a null-terminated string that does not include the newline character + * Your header file `_getline.h` should define a macro called `READ_SIZE`. + * This macro defines the number of bytes you will read each time you will call `read`: `read(fd, buffer, READ_SIZE)` + * You are not allowed to read more or less than `READ_SIZE` bytes at once from `fd` + * You are free to pick the value that you want for `READ_SIZE` + * You can assume that `fd` will always be the same + +File(s): [`_getline.c`](./_getline.c) [`_getline.h`](./_getline.h)\ +Compiled: `gcc -Wall -Wextra -Werror -pedantic 1-main.c _getline.c -o getline` + +### :white_check_mark: 2. _getline: multi-fd +Handle multiple file descriptors. +* When called with `-1` you should free everything and reset all your static variables + +File(s): [`_getline.c`](./_getline.c) [`_getline.h`](./_getline.h)\ +Compiled: `gcc -Wall -Wextra -pedantic -Werror 2-main.c _getline.c -o getline` + +## Advanced Tasks + +### :white_check_mark: 3. _getline: ^@ +Handle characters `\0` in lines. +* Here’s the file used for the example below: [zero](./tests/zero) + +```bash +$ cat zero +line 1 Holberton..... +line 2 still line 2 +line 3 ......School() +$ gcc -g -Wall -Wextra -pedantic 100-main.c _getline.c && ./a.out +6c 69 6e 65 20 31 20 48 6f 6c 62 65 72 74 6f 6e 2e 2e 2e 2e 2e +6c 69 6e 65 20 32 20 00 73 74 69 6c 6c 20 6c 69 6e 65 20 32 00 +6c 69 6e 65 20 33 20 2e 2e 2e 2e 2e 2e 53 63 68 6f 6f 6c 28 29 +$ +``` + +File(s): [`_getline.c`](./_getline.c) [`_getline.h`](./_getline.h)\ +Compiled: `gcc -Wall -Wextra -pedantic -Werror 100-main.c _getline.c -o getline` + +--- + +## Student +* **Samuel Pomeroy** - [allelomorph](github.com/allelomorph) diff --git a/0x01-getline/tests/0-main.c b/0x01-getline/tests/0-main.c new file mode 100644 index 0000000..cf2e68f --- /dev/null +++ b/0x01-getline/tests/0-main.c @@ -0,0 +1,36 @@ +#include "laps.h" + +/** + * main - entry point. + * + * Return: always 0. + */ +int main() +{ + + int ids1[3] = {1, 42, 101}; + int ids2[1] = {11}; + + race_state(ids1, 3); + printf("--\n"); + race_state(ids1, 3); + printf("--\n"); + race_state(ids1, 3); + printf("--\n"); + race_state(ids2, 1); + printf("--\n"); + race_state(ids1, 3); + printf("--\n"); + race_state(ids2, 1); + printf("--\n"); + race_state(ids1, 3); + printf("--\n"); + race_state(ids2, 1); + printf("--\n"); + race_state(ids1, 3); + printf("--\n"); + race_state(ids2, 1); + printf("--\n"); + race_state(NULL, 0); + return (0); +} diff --git a/0x01-getline/tests/1-main.c b/0x01-getline/tests/1-main.c new file mode 100644 index 0000000..f0a0955 --- /dev/null +++ b/0x01-getline/tests/1-main.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +#include "_getline.h" + +/** + * main - entry point. + * + * Return: always 0. + */ +int main(void) +{ + int fd; + char *line; + + fd = open("1-main.c", 0); + while ((line = _getline(fd))) + { + printf("%s\n", line); + free(line); + } + close(fd); + return (0); +} diff --git a/0x01-getline/tests/100-main.c b/0x01-getline/tests/100-main.c new file mode 100644 index 0000000..2e7f17a --- /dev/null +++ b/0x01-getline/tests/100-main.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +#include "_getline.h" + +#define LINE_LEN 21 + +/** + * main - entry point. + * + * Return: always 0. + */ +int main(void) +{ + int fd; + char *line; + int i; + + fd = open("zero", O_RDONLY); + if (-1 == fd) + { + fprintf(stderr, "nop\n"); + return (EXIT_FAILURE); + } + while ((line = _getline(fd))) + { + for (i = 0; i < LINE_LEN; i++) + { + if (i) + { + printf(" "); + } + printf("%02x", line[i]); + } + printf("\n"); + free(line); + } + close(fd); + return (EXIT_SUCCESS); +} diff --git a/0x01-getline/tests/2-main.c b/0x01-getline/tests/2-main.c new file mode 100644 index 0000000..b7e49f1 --- /dev/null +++ b/0x01-getline/tests/2-main.c @@ -0,0 +1,80 @@ +#include +#include +#include +#include + +#include "_getline.h" + +/** + * main - entry point. + * + * Return: always 0. + */ +int main(void) +{ + int fd1, fd2, fd3; + char *line1; + char *line2; + char *line3; + int i; + + fd1 = open("the_swing", O_RDONLY); + fd2 = open("man_gcc", O_RDONLY); + fd3 = open("man_cat", O_RDONLY); + printf("---------THE SWING (first 5 lines)-----------\n"); + i = 0; + while ((line1 = _getline(fd1))) + { + printf("%s\n", line1); + free(line1); + i++; + if (i == 5) + { + break; + } + } + printf("----------MAN GCC (first 5 lines)----------\n"); + i = 0; + while ((line2 = _getline(fd2))) + { + printf("%s\n", line2); + free(line2); + i++; + if (i == 5) + { + break; + } + } + printf("-----------MAN CAT (first 5 lines)---------\n"); + i = 0; + while ((line3 = _getline(fd3))) + { + printf("%s\n", line3); + free(line3); + i++; + if (i == 5) + { + break; + } + } + printf("---------THE SWING (END)-----------\n"); + while ((line1 = _getline(fd1))) + { + printf("%s\n", line1); + free(line1); + } + close(fd1); + close(fd2); + close(fd3); + _getline(-1); + printf("---------THE SWING (FULL-TEXT)-----------\n"); + fd1 = open("the_swing", O_RDONLY); + while ((line1 = _getline(fd1))) + { + printf("%s\n", line1); + free(line1); + } + close(fd1); + _getline(-1); + return (EXIT_SUCCESS); +} diff --git a/0x01-getline/tests/man_cat b/0x01-getline/tests/man_cat new file mode 100644 index 0000000..cf4f28b --- /dev/null +++ b/0x01-getline/tests/man_cat @@ -0,0 +1,84 @@ +CAT(1) User Commands CAT(1) + + + +NAME + cat - concatenate files and print on the standard output + +SYNOPSIS + cat [OPTION]... [FILE]... + +DESCRIPTION + Concatenate FILE(s), or standard input, to standard output. + + -A, --show-all + equivalent to -vET + + -b, --number-nonblank + number nonempty output lines, overrides -n + + -e equivalent to -vE + + -E, --show-ends + display $ at end of each line + + -n, --number + number all output lines + + -s, --squeeze-blank + suppress repeated empty output lines + + -t equivalent to -vT + + -T, --show-tabs + display TAB characters as ^I + + -u (ignored) + + -v, --show-nonprinting + use ^ and M- notation, except for LFD and TAB + + --help display this help and exit + + --version + output version information and exit + + With no FILE, or when FILE is -, read standard input. + +EXAMPLES + cat f - g + Output f's contents, then standard input, then g's con‐ + tents. + + cat Copy standard input to standard output. + +AUTHOR + Written by Torbjorn Granlund and Richard M. Stallman. + +REPORTING BUGS + Report cat bugs to bug-coreutils@gnu.org + GNU coreutils home page: + General help using GNU software: + Report cat translation bugs to + +COPYRIGHT + Copyright © 2013 Free Software Foundation, Inc. License GPLv3+: + GNU GPL version 3 or later . + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + +SEE ALSO + tac(1) + + The full documentation for cat is maintained as a Texinfo manual. + If the info and cat programs are properly installed at your site, + the command + + info coreutils 'cat invocation' + + should give you access to the complete manual. + + + +GNU coreutils 8.21 March 2016 CAT(1) diff --git a/0x01-getline/tests/man_gcc b/0x01-getline/tests/man_gcc new file mode 100644 index 0000000..a8f2a08 --- /dev/null +++ b/0x01-getline/tests/man_gcc @@ -0,0 +1,18672 @@ +GCC(1) GNU GCC(1) + + + +NAME + gcc - GNU project C and C++ compiler + +SYNOPSIS + gcc [-c|-S|-E] [-std=standard] + [-g] [-pg] [-Olevel] + [-Wwarn...] [-Wpedantic] + [-Idir...] [-Ldir...] + [-Dmacro[=defn]...] [-Umacro] + [-foption...] [-mmachine-option...] + [-o outfile] [@file] infile... + + Only the most useful options are listed here; see below for the + remainder. g++ accepts mostly the same options as gcc. + +DESCRIPTION + When you invoke GCC, it normally does preprocessing, compilation, + assembly and linking. The "overall options" allow you to stop + this process at an intermediate stage. For example, the -c option + says not to run the linker. Then the output consists of object + files output by the assembler. + + Other options are passed on to one stage of processing. Some + options control the preprocessor and others the compiler itself. + Yet other options control the assembler and linker; most of these + are not documented here, since you rarely need to use any of them. + + Most of the command-line options that you can use with GCC are + useful for C programs; when an option is only useful with another + language (usually C++), the explanation says so explicitly. If + the description for a particular option does not mention a source + language, you can use that option with all supported languages. + + The gcc program accepts options and file names as operands. Many + options have multi-letter names; therefore multiple single-letter + options may not be grouped: -dv is very different from -d -v. + + You can mix options and other arguments. For the most part, the + order you use doesn't matter. Order does matter when you use + several options of the same kind; for example, if you specify -L + more than once, the directories are searched in the order + specified. Also, the placement of the -l option is significant. + + Many options have long names starting with -f or with -W---for + example, -fmove-loop-invariants, -Wformat and so on. Most of + these have both positive and negative forms; the negative form of + -ffoo is -fno-foo. This manual documents only one of these two + forms, whichever one is not the default. + +OPTIONS + Option Summary + Here is a summary of all the options, grouped by type. + Explanations are in the following sections. + + Overall Options + -c -S -E -o file -no-canonical-prefixes -pipe + -pass-exit-codes -x language -v -### --help[=class[,...]] + --target-help --version -wrapper @file -fplugin=file + -fplugin-arg-name=arg -fdump-ada-spec[-slim] + -fada-spec-parent=unit -fdump-go-spec=file + + C Language Options + -ansi -std=standard -fgnu89-inline -aux-info filename + -fallow-parameterless-variadic-functions -fno-asm + -fno-builtin -fno-builtin-function -fhosted -ffreestanding + -fopenmp -fms-extensions -fplan9-extensions -trigraphs + -traditional -traditional-cpp -fallow-single-precision + -fcond-mismatch -flax-vector-conversions -fsigned-bitfields + -fsigned-char -funsigned-bitfields -funsigned-char + + C++ Language Options + -fabi-version=n -fno-access-control -fcheck-new + -fconstexpr-depth=n -ffriend-injection + -fno-elide-constructors -fno-enforce-eh-specs -ffor-scope + -fno-for-scope -fno-gnu-keywords -fno-implicit-templates + -fno-implicit-inline-templates -fno-implement-inlines + -fms-extensions -fno-nonansi-builtins -fnothrow-opt + -fno-operator-names -fno-optional-diags -fpermissive + -fno-pretty-templates -frepo -fno-rtti -fstats + -ftemplate-backtrace-limit=n -ftemplate-depth=n + -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak + -nostdinc++ -fno-default-inline -fvisibility-inlines-hidden + -fvisibility-ms-compat -fext-numeric-literals -Wabi + -Wconversion-null -Wctor-dtor-privacy + -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing + -Wnoexcept -Wnon-virtual-dtor -Wreorder -Weffc++ + -Wstrict-null-sentinel -Wno-non-template-friend + -Wold-style-cast -Woverloaded-virtual -Wno-pmf-conversions + -Wsign-promo + + Objective-C and Objective-C++ Language Options + -fconstant-string-class=class-name -fgnu-runtime + -fnext-runtime -fno-nil-receivers -fobjc-abi-version=n + -fobjc-call-cxx-cdtors -fobjc-direct-dispatch + -fobjc-exceptions -fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 + -freplace-objc-classes -fzero-link -gen-decls + -Wassign-intercept -Wno-protocol -Wselector + -Wstrict-selector-match -Wundeclared-selector + + Language Independent Options + -fmessage-length=n -fdiagnostics-show-location=[once|every- + line] -fno-diagnostics-show-option -fno-diagnostics-show-caret + + Warning Options + -fsyntax-only -fmax-errors=n -Wpedantic -pedantic-errors -w + -Wextra -Wall -Waddress -Waggregate-return + -Waggressive-loop-optimizations -Warray-bounds -Wno-attributes + -Wno-builtin-macro-redefined -Wc++-compat -Wc++11-compat + -Wcast-align -Wcast-qual -Wchar-subscripts -Wclobbered + -Wcomment -Wconversion -Wcoverage-mismatch -Wno-cpp + -Wno-deprecated -Wno-deprecated-declarations + -Wdisabled-optimization -Wno-div-by-zero -Wdouble-promotion + -Wempty-body -Wenum-compare -Wno-endif-labels -Werror + -Werror=* -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 + -Wno-format-contains-nul -Wno-format-extra-args + -Wformat-nonliteral -Wformat-security -Wformat-y2k + -Wframe-larger-than=len -Wno-free-nonheap-object + -Wjump-misses-init -Wignored-qualifiers -Wimplicit + -Wimplicit-function-declaration -Wimplicit-int -Winit-self + -Winline -Wmaybe-uninitialized -Wno-int-to-pointer-cast + -Wno-invalid-offsetof -Winvalid-pch -Wlarger-than=len + -Wunsafe-loop-optimizations -Wlogical-op -Wlong-long -Wmain + -Wmaybe-uninitialized -Wmissing-braces + -Wmissing-field-initializers -Wmissing-include-dirs + -Wno-mudflap -Wno-multichar -Wnonnull -Wno-overflow + -Woverlength-strings -Wpacked -Wpacked-bitfield-compat + -Wpadded -Wparentheses -Wpedantic-ms-format + -Wno-pedantic-ms-format -Wpointer-arith + -Wno-pointer-to-int-cast -Wredundant-decls + -Wno-return-local-addr -Wreturn-type -Wsequence-point + -Wshadow -Wsign-compare -Wsign-conversion + -Wsizeof-pointer-memaccess -Wstack-protector -Wstack-usage=len + -Wstrict-aliasing -Wstrict-aliasing=n -Wstrict-overflow + -Wstrict-overflow=n + -Wsuggest-attribute=[pure|const|noreturn|format] + -Wmissing-format-attribute -Wswitch -Wswitch-default + -Wswitch-enum -Wsync-nand -Wsystem-headers -Wtrampolines + -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized + -Wunknown-pragmas -Wno-pragmas -Wunsuffixed-float-constants + -Wunused -Wunused-function -Wunused-label + -Wunused-local-typedefs -Wunused-parameter -Wno-unused-result + -Wunused-value -Wunused-variable -Wunused-but-set-parameter + -Wunused-but-set-variable -Wuseless-cast -Wvariadic-macros + -Wvector-operation-performance -Wvla -Wvolatile-register-var + -Wwrite-strings -Wzero-as-null-pointer-constant + + C and Objective-C-only Warning Options + -Wbad-function-cast -Wmissing-declarations + -Wmissing-parameter-type -Wmissing-prototypes + -Wnested-externs -Wold-style-declaration + -Wold-style-definition -Wstrict-prototypes -Wtraditional + -Wtraditional-conversion -Wdeclaration-after-statement + -Wpointer-sign + + Debugging Options + -dletters -dumpspecs -dumpmachine -dumpversion + -fsanitize=style -fdbg-cnt-list -fdbg-cnt=counter-value-list + -fdisable-ipa-pass_name -fdisable-rtl-pass_name + -fdisable-rtl-pass-name=range-list -fdisable-tree-pass_name + -fdisable-tree-pass-name=range-list -fdump-noaddr + -fdump-unnumbered -fdump-unnumbered-links + -fdump-translation-unit[-n] -fdump-class-hierarchy[-n] + -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline + -fdump-passes -fdump-statistics -fdump-tree-all + -fdump-tree-original[-n] -fdump-tree-optimized[-n] + -fdump-tree-cfg -fdump-tree-alias -fdump-tree-ch + -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n] + -fdump-tree-dce[-n] -fdump-tree-gimple[-raw] + -fdump-tree-mudflap[-n] -fdump-tree-dom[-n] + -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] + -fdump-tree-phiopt[-n] -fdump-tree-forwprop[-n] + -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect + -fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] + -fdump-tree-fre[-n] -fdump-tree-vrp[-n] + -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n] + -fdump-final-insns=file -fcompare-debug[=opts] + -fcompare-debug-second -feliminate-dwarf2-dups + -fno-eliminate-unused-debug-types + -feliminate-unused-debug-symbols -femit-class-debug-always + -fenable-kind-pass -fenable-kind-pass=range-list + -fdebug-types-section -fmem-report-wpa -fmem-report + -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs + -fopt-info -fopt-info-options[=file] -frandom-seed=string + -fsched-verbose=n -fsel-sched-verbose -fsel-sched-dump-cfg + -fsel-sched-pipelining-verbose -fstack-usage -ftest-coverage + -ftime-report -fvar-tracking -fvar-tracking-assignments + -fvar-tracking-assignments-toggle -g -glevel -gtoggle + -gcoff -gdwarf-version -ggdb -grecord-gcc-switches + -gno-record-gcc-switches -gstabs -gstabs+ -gstrict-dwarf + -gno-strict-dwarf -gvms -gxcoff -gxcoff+ + -fno-merge-debug-strings -fno-dwarf2-cfi-asm + -fdebug-prefix-map=old=new -femit-struct-debug-baseonly + -femit-struct-debug-reduced + -femit-struct-debug-detailed[=spec-list] -p -pg + -print-file-name=library -print-libgcc-file-name + -print-multi-directory -print-multi-lib + -print-multi-os-directory -print-prog-name=program + -print-search-dirs -Q -print-sysroot + -print-sysroot-headers-suffix -save-temps -save-temps=cwd + -save-temps=obj -time[=file] + + Optimization Options + -faggressive-loop-optimizations -falign-functions[=n] + -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n] + -fassociative-math -fauto-inc-dec -fbranch-probabilities + -fbranch-target-load-optimize -fbranch-target-load-optimize2 + -fbtr-bb-exclusive -fcaller-saves -fcheck-data-deps + -fcombine-stack-adjustments -fconserve-stack -fcompare-elim + -fcprop-registers -fcrossjumping -fcse-follow-jumps + -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range + -fdata-sections -fdce -fdelayed-branch + -fdelete-null-pointer-checks -fdevirtualize -fdse + -fearly-inlining -fipa-sra -fexpensive-optimizations + -ffat-lto-objects -ffast-math -ffinite-math-only -ffloat-store + -fexcess-precision=style -fforward-propagate + -ffp-contract=style -ffunction-sections -fgcse + -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity + -fgcse-sm -fhoist-adjacent-loads -fif-conversion + -fif-conversion2 -findirect-inlining -finline-functions + -finline-functions-called-once -finline-limit=n + -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-pta + -fipa-profile -fipa-pure-const -fipa-reference + -fira-algorithm=algorithm -fira-region=region + -fira-hoist-pressure -fira-loop-pressure + -fno-ira-share-save-slots -fno-ira-share-spill-slots + -fira-verbose=n -fivopts -fkeep-inline-functions + -fkeep-static-consts -floop-block -floop-interchange + -floop-strip-mine -floop-nest-optimize -floop-parallelize-all + -flto -flto-compression-level -flto-partition=alg -flto-report + -fmerge-all-constants -fmerge-constants -fmodulo-sched + -fmodulo-sched-allow-regmoves -fmove-loop-invariants fmudflap + -fmudflapir -fmudflapth -fno-branch-count-reg + -fno-default-inline -fno-defer-pop -fno-function-cse + -fno-guess-branch-probability -fno-inline -fno-math-errno + -fno-peephole -fno-peephole2 -fno-sched-interblock + -fno-sched-spec -fno-signed-zeros -fno-toplevel-reorder + -fno-trapping-math -fno-zero-initialized-in-bss + -fomit-frame-pointer -foptimize-register-move + -foptimize-sibling-calls -fpartial-inlining -fpeel-loops + -fpredictive-commoning -fprefetch-loop-arrays -fprofile-report + -fprofile-correction -fprofile-dir=path -fprofile-generate + -fprofile-generate=path -fprofile-use -fprofile-use=path + -fprofile-values -freciprocal-math -free -fregmove + -frename-registers -freorder-blocks + -freorder-blocks-and-partition -freorder-functions + -frerun-cse-after-loop -freschedule-modulo-scheduled-loops + -frounding-math -fsched2-use-superblocks -fsched-pressure + -fsched-spec-load -fsched-spec-load-dangerous + -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] + -fsched-group-heuristic -fsched-critical-path-heuristic + -fsched-spec-insn-heuristic -fsched-rank-heuristic + -fsched-last-insn-heuristic -fsched-dep-count-heuristic + -fschedule-insns -fschedule-insns2 -fsection-anchors + -fselective-scheduling -fselective-scheduling2 + -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops + -fshrink-wrap -fsignaling-nans -fsingle-precision-constant + -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector + -fstack-protector-all -fstrict-aliasing -fstrict-overflow + -fthread-jumps -ftracer -ftree-bit-ccp -ftree-builtin-call-dce + -ftree-ccp -ftree-ch -ftree-coalesce-inline-vars + -ftree-coalesce-vars -ftree-copy-prop -ftree-copyrename + -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop + -ftree-fre -ftree-loop-if-convert + -ftree-loop-if-convert-stores -ftree-loop-im -ftree-phiprop + -ftree-loop-distribution -ftree-loop-distribute-patterns + -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize + -ftree-parallelize-loops=n -ftree-pre -ftree-partial-pre + -ftree-pta -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra + -ftree-switch-conversion -ftree-tail-merge -ftree-ter + -ftree-vect-loop-version -ftree-vectorize -ftree-vrp + -funit-at-a-time -funroll-all-loops -funroll-loops + -funsafe-loop-optimizations -funsafe-math-optimizations + -funswitch-loops -fvariable-expansion-in-unroller + -fvect-cost-model -fvpt -fweb -fwhole-program -fwpa + -fuse-ld=linker -fuse-linker-plugin --param name=value -O -O0 + -O1 -O2 -O3 -Os -Ofast -Og + + Preprocessor Options + -Aquestion=answer -A-question[=answer] -C -dD -dI -dM -dN + -Dmacro[=defn] -E -H -idirafter dir -include file -imacros + file -iprefix file -iwithprefix dir -iwithprefixbefore dir + -isystem dir -imultilib dir -isysroot dir -M -MM -MF -MG + -MP -MQ -MT -nostdinc -P -fdebug-cpp + -ftrack-macro-expansion -fworking-directory -remap -trigraphs + -undef -Umacro -Wp,option -Xpreprocessor option + -no-integrated-cpp + + Assembler Option + -Wa,option -Xassembler option + + Linker Options + object-file-name -llibrary -nostartfiles -nodefaultlibs + -nostdlib -pie -rdynamic -s -static -static-libgcc + -static-libstdc++ -static-libasan -static-libtsan -shared + -shared-libgcc -symbolic -T script -Wl,option -Xlinker + option -u symbol + + Directory Options + -Bprefix -Idir -iplugindir=dir -iquotedir -Ldir -specs=file + -I- --sysroot=dir --no-sysroot-suffix + + Machine Dependent Options + AArch64 Options -mbig-endian -mlittle-endian + -mgeneral-regs-only -mcmodel=tiny -mcmodel=small + -mcmodel=large -mstrict-align -momit-leaf-frame-pointer + -mno-omit-leaf-frame-pointer -mtls-dialect=desc + -mtls-dialect=traditional -mfix-cortex-a53-835769 + -mno-fix-cortex-a53-835769 -march=name -mcpu=name + -mtune=name + + Adapteva Epiphany Options -mhalf-reg-file + -mprefer-short-insn-regs -mbranch-cost=num -mcmove -mnops=num + -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify + -mstack-offset=num -mround-nearest -mlong-calls -mshort-calls + -msmall16 -mfp-mode=mode -mvect-double -max-vect-align=num + -msplit-vecmove-early -m1reg-reg + + ARM Options -mapcs-frame -mno-apcs-frame -mabi=name + -mapcs-stack-check -mno-apcs-stack-check -mapcs-float + -mno-apcs-float -mapcs-reentrant -mno-apcs-reentrant + -msched-prolog -mno-sched-prolog -mlittle-endian + -mbig-endian -mwords-little-endian -mfloat-abi=name + -mfp16-format=name -mthumb-interwork -mno-thumb-interwork + -mcpu=name -march=name -mfpu=name + -mstructure-size-boundary=n -mabort-on-noreturn -mlong-calls + -mno-long-calls -msingle-pic-base -mno-single-pic-base + -mpic-register=reg -mnop-fun-dllimport -mpoke-function-name + -mthumb -marm -mtpcs-frame -mtpcs-leaf-frame + -mcaller-super-interworking -mcallee-super-interworking + -mtp=name -mtls-dialect=dialect -mword-relocations + -mfix-cortex-m3-ldrd -munaligned-access + + AVR Options -mmcu=mcu -maccumulate-args -mbranch-cost=cost + -mcall-prologues -mint8 -mno-interrupts -mrelax -mstrict-X + -mtiny-stack -Waddr-space-convert + + Blackfin Options -mcpu=cpu[-sirevision] -msim + -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer + -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly + -mno-csync-anomaly -mlow-64k -mno-low64k -mstack-check-l1 + -mid-shared-library -mno-id-shared-library + -mshared-library-id=n -mleaf-id-shared-library + -mno-leaf-id-shared-library -msep-data -mno-sep-data + -mlong-calls -mno-long-calls -mfast-fp -minline-plt + -mmulticore -mcorea -mcoreb -msdram -micplb + + C6X Options -mbig-endian -mlittle-endian -march=cpu -msim + -msdata=sdata-type + + CRIS Options -mcpu=cpu -march=cpu -mtune=cpu + -mmax-stack-frame=n -melinux-stacksize=n -metrax4 -metrax100 + -mpdebug -mcc-init -mno-side-effects -mstack-align + -mdata-align -mconst-align -m32-bit -m16-bit -m8-bit + -mno-prologue-epilogue -mno-gotplt -melf -maout -melinux + -mlinux -sim -sim2 -mmul-bug-workaround + -mno-mul-bug-workaround + + CR16 Options -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops + -mdata-model=model + + Darwin Options -all_load -allowable_client -arch + -arch_errors_fatal -arch_only -bind_at_load -bundle + -bundle_loader -client_name -compatibility_version + -current_version -dead_strip -dependency-file -dylib_file + -dylinker_install_name -dynamic -dynamiclib + -exported_symbols_list -filelist -flat_namespace + -force_cpusubtype_ALL -force_flat_namespace + -headerpad_max_install_names -iframework -image_base -init + -install_name -keep_private_externs -multi_module + -multiply_defined -multiply_defined_unused -noall_load + -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs + -noprebind -noseglinkedit -pagezero_size -prebind + -prebind_all_twolevel_modules -private_bundle + -read_only_relocs -sectalign -sectobjectsymbols -whyload + -seg1addr -sectcreate -sectobjectsymbols -sectorder -segaddr + -segs_read_only_addr -segs_read_write_addr -seg_addr_table + -seg_addr_table_filename -seglinkedit -segprot + -segs_read_only_addr -segs_read_write_addr -single_module + -static -sub_library -sub_umbrella -twolevel_namespace + -umbrella -undefined -unexported_symbols_list + -weak_reference_mismatches -whatsloaded -F -gused -gfull + -mmacosx-version-min=version -mkernel -mone-byte-bool + + DEC Alpha Options -mno-fp-regs -msoft-float -mieee + -mieee-with-inexact -mieee-conformant -mfp-trap-mode=mode + -mfp-rounding-mode=mode -mtrap-precision=mode + -mbuild-constants -mcpu=cpu-type -mtune=cpu-type -mbwx -mmax + -mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs + -msmall-data -mlarge-data -msmall-text -mlarge-text + -mmemory-latency=time + + FR30 Options -msmall-model -mno-lsim + + FRV Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 + -mhard-float -msoft-float -malloc-cc -mfixed-cc -mdword + -mno-dword -mdouble -mno-double -mmedia -mno-media -mmuladd + -mno-muladd -mfdpic -minline-plt -mgprel-ro + -multilib-library-pic -mlinked-fp -mlong-calls + -malign-labels -mlibrary-pic -macc-4 -macc-8 -mpack + -mno-pack -mno-eflags -mcond-move -mno-cond-move + -moptimize-membar -mno-optimize-membar -mscc -mno-scc + -mcond-exec -mno-cond-exec -mvliw-branch -mno-vliw-branch + -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec + -mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=cpu + + GNU/Linux Options -mglibc -muclibc -mbionic -mandroid + -tno-android-cc -tno-android-ld + + H8/300 Options -mrelax -mh -ms -mn -mexr -mno-exr -mint32 + -malign-300 + + HPPA Options -march=architecture-type -mbig-switch + -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls + -mgas -mgnu-ld -mhp-ld -mfixed-range=register-range + -mjump-in-delay -mlinker-opt -mlong-calls -mlong-load-store + -mno-big-switch -mno-disable-fpregs -mno-disable-indexing + -mno-fast-indirect-calls -mno-gas -mno-jump-in-delay + -mno-long-load-store -mno-portable-runtime -mno-soft-float + -mno-space-regs -msoft-float -mpa-risc-1-0 -mpa-risc-1-1 + -mpa-risc-2-0 -mportable-runtime -mschedule=cpu-type + -mspace-regs -msio -mwsio -munix=unix-std -nolibdld + -static -threads + + i386 and x86-64 Options -mtune=cpu-type -march=cpu-type + -mfpmath=unit -masm=dialect -mno-fancy-math-387 + -mno-fp-ret-in-387 -msoft-float -mno-wide-multiply -mrtd + -malign-double -mpreferred-stack-boundary=num + -mincoming-stack-boundary=num -mcld -mcx16 -msahf -mmovbe + -mcrc32 -mrecip -mrecip=opt -mvzeroupper -mprefer-avx128 -mmmx + -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx + -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -msse4a + -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt -mbmi2 + -mrtm -mlwp -mthreads -mno-align-stringops + -minline-all-stringops -minline-stringops-dynamically + -mstringop-strategy=alg -mpush-args + -maccumulate-outgoing-args -m128bit-long-double + -m96bit-long-double -mlong-double-64 -mlong-double-80 + -mregparm=num -msseregparm -mveclibabi=type + -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign + -momit-leaf-frame-pointer -mno-red-zone + -mno-tls-direct-seg-refs -mcmodel=code-model -mabi=name + -maddress-mode=mode -m32 -m64 -mx32 -mlarge-data-threshold=num + -msse2avx -mfentry -m8bit-idiv -mavx256-split-unaligned-load + -mavx256-split-unaligned-store -mindirect-branch=choice + -mfunction-return=choice -mindirect-branch-register + + i386 and x86-64 Windows Options -mconsole -mcygwin -mno-cygwin + -mdll -mnop-fun-dllimport -mthread -municode -mwin32 -mwindows + -fno-set-stack-executable + + IA-64 Options -mbig-endian -mlittle-endian -mgnu-as + -mgnu-ld -mno-pic -mvolatile-asm-stop -mregister-names + -msdata -mno-sdata -mconstant-gp -mauto-pic -mfused-madd + -minline-float-divide-min-latency + -minline-float-divide-max-throughput -mno-inline-float-divide + -minline-int-divide-min-latency + -minline-int-divide-max-throughput -mno-inline-int-divide + -minline-sqrt-min-latency -minline-sqrt-max-throughput + -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits + -mfixed-range=register-range -mtls-size=tls-size -mtune=cpu- + type -milp32 -mlp64 -msched-br-data-spec -msched-ar-data-spec + -msched-control-spec -msched-br-in-data-spec + -msched-ar-in-data-spec -msched-in-control-spec + -msched-spec-ldc -msched-spec-control-ldc + -msched-prefer-non-data-spec-insns + -msched-prefer-non-control-spec-insns + -msched-stop-bits-after-every-cycle + -msched-count-spec-in-critical-path + -msel-sched-dont-check-control-spec + -msched-fp-mem-deps-zero-cost + -msched-max-memory-insns-hard-limit + -msched-max-memory-insns=max-insns + + LM32 Options -mbarrel-shift-enabled -mdivide-enabled + -mmultiply-enabled -msign-extend-enabled -muser-enabled + + M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops + -mno-align-loops -missue-rate=number -mbranch-cost=number + -mmodel=code-size-model-type -msdata=sdata-type + -mno-flush-func -mflush-func=name -mno-flush-trap + -mflush-trap=number -G num + + M32C Options -mcpu=cpu -msim -memregs=number + + M680x0 Options -march=arch -mcpu=cpu -mtune=tune -m68000 + -m68020 -m68020-40 -m68020-60 -m68030 -m68040 -m68060 + -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 -mcfv4e + -mbitfield -mno-bitfield -mc68000 -mc68020 -mnobitfield + -mrtd -mno-rtd -mdiv -mno-div -mshort -mno-short + -mhard-float -m68881 -msoft-float -mpcrel -malign-int + -mstrict-align -msep-data -mno-sep-data + -mshared-library-id=n -mid-shared-library + -mno-id-shared-library -mxgot -mno-xgot + + MCore Options -mhardlit -mno-hardlit -mdiv -mno-div + -mrelax-immediates -mno-relax-immediates -mwide-bitfields + -mno-wide-bitfields -m4byte-functions -mno-4byte-functions + -mcallgraph-data -mno-callgraph-data -mslow-bytes + -mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian + -m210 -m340 -mstack-increment + + MeP Options -mabsdiff -mall-opts -maverage -mbased=n -mbitops + -mc=n -mclip -mconfig=name -mcop -mcop32 -mcop64 -mivc2 -mdc + -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax -mmult + -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf + -mtiny=n + + MicroBlaze Options -msoft-float -mhard-float -msmall-divides + -mcpu=cpu -mmemcpy -mxl-soft-mul -mxl-soft-div + -mxl-barrel-shift -mxl-pattern-compare -mxl-stack-check + -mxl-gp-opt -mno-clearbss -mxl-multiply-high + -mxl-float-convert -mxl-float-sqrt -mbig-endian + -mlittle-endian -mxl-reorder -mxl-mode-app-model + + MIPS Options -EL -EB -march=arch -mtune=arch -mips1 -mips2 + -mips3 -mips4 -mips32 -mips32r2 -mips64 -mips64r2 -mips16 + -mno-mips16 -mflip-mips16 -minterlink-mips16 + -mno-interlink-mips16 -mabi=abi -mabicalls -mno-abicalls + -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot + -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float + -mno-float -msingle-float -mdouble-float -mdsp -mno-dsp + -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -mfpu=fpu-type -msmartmips + -mno-smartmips -mpaired-single -mno-paired-single -mdmx + -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc + -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum + -mlocal-sdata -mno-local-sdata -mextern-sdata + -mno-extern-sdata -mgpopt -mno-gopt -membedded-data + -mno-embedded-data -muninit-const-in-rodata + -mno-uninit-const-in-rodata -mcode-readable=setting + -msplit-addresses -mno-split-addresses -mexplicit-relocs + -mno-explicit-relocs -mcheck-zero-division + -mno-check-zero-division -mdivide-traps -mdivide-breaks + -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls -mmad + -mno-mad -mfused-madd -mno-fused-madd -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=func -mno-flush-func + -mbranch-cost=num -mbranch-likely -mno-branch-likely + -mfp-exceptions -mno-fp-exceptions -mvr4130-align + -mno-vr4130-align -msynci -mno-synci -mrelax-pic-calls + -mno-relax-pic-calls -mmcount-ra-address + + MMIX Options -mlibfuncs -mno-libfuncs -mepsilon + -mno-epsilon -mabi=gnu -mabi=mmixware -mzero-extend + -mknuthdiv -mtoplevel-symbols -melf -mbranch-predict + -mno-branch-predict -mbase-addresses -mno-base-addresses + -msingle-exit -mno-single-exit + + MN10300 Options -mmult-bug -mno-mult-bug -mno-am33 -mam33 + -mam33-2 -mam34 -mtune=cpu-type -mreturn-pointer-on-d0 + -mno-crt0 -mrelax -mliw -msetlb + + Moxie Options -meb -mel -mno-crt0 + + PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 + -m45 -m10 -mbcopy -mbcopy-builtin -mint32 -mno-int16 + -mint16 -mno-int32 -mfloat32 -mno-float64 -mfloat64 + -mno-float32 -mabshi -mno-abshi -mbranch-expensive + -mbranch-cheap -munix-asm -mdec-asm + + picoChip Options -mae=ae_type -mvliw-lookahead=N + -msymbol-as-address -mno-inefficient-warnings + + PowerPC Options See RS/6000 and PowerPC Options. + + RL78 Options -msim -mmul=none -mmul=g13 -mmul=rl78 + + RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type + -mcmodel=code-model -mpowerpc64 -maltivec -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-hard-dfp + -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc + -m64 -m32 -mxl-compat -mno-xl-compat -mpe -malign-power + -malign-natural -msoft-float -mhard-float -mmultiple + -mno-multiple -msingle-float -mdouble-float -msimple-fpu + -mstring -mno-string -mupdate -mno-update + -mavoid-indexed-addresses -mno-avoid-indexed-addresses + -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align + -mstrict-align -mno-strict-align -mrelocatable + -mno-relocatable -mrelocatable-lib -mno-relocatable-lib + -mtoc -mno-toc -mlittle -mlittle-endian -mbig + -mbig-endian -mdynamic-no-pic -maltivec -mswdiv + -msingle-pic-base -mprioritize-restricted-insns=priority + -msched-costly-dep=dependence_type -minsert-sched-nops=scheme + -mcall-sysv -mcall-netbsd -maix-struct-return + -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt + -mblock-move-inline-limit=num -misel -mno-isel -misel=yes + -misel=no -mspe -mno-spe -mspe=yes -mspe=no -mpaired + -mgen-cell-microcode -mwarn-cell-microcode -mvrsave + -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb + -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single + -mfloat-gprs=double -mprototype -mno-prototype -msim -mmvme + -mads -myellowknife -memb -msdata -msdata=opt -mvxworks + -G num -pthread -mrecip -mrecip=opt -mno-recip + -mrecip-precision -mno-recip-precision -mveclibabi=type -mfriz + -mno-friz -mpointers-to-nested-functions + -mno-pointers-to-nested-functions -msave-toc-indirect + -mno-save-toc-indirect -mpower8-fusion -mno-mpower8-fusion + -mpower8-vector -mno-power8-vector -mcrypto -mno-crypto + -mdirect-move -mno-direct-move -mquad-memory -mno-quad-memory + -mquad-memory-atomic -mno-quad-memory-atomic + -mcompat-align-parm -mno-compat-align-parm + + RX Options -m64bit-doubles -m32bit-doubles -fpu -nofpu + -mcpu= -mbig-endian-data -mlittle-endian-data -msmall-data + -msim -mno-sim -mas100-syntax -mno-as100-syntax -mrelax + -mmax-constant-size= -mint-register= -mpid + -mno-warn-multiple-fast-interrupts -msave-acc-in-interrupts + + S/390 and zSeries Options -mtune=cpu-type -march=cpu-type + -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp + -mlong-double-64 -mlong-double-128 -mbackchain -mno-backchain + -mpacked-stack -mno-packed-stack -msmall-exec + -mno-small-exec -mmvcle -mno-mvcle -m64 -m31 -mdebug + -mno-debug -mesa -mzarch -mtpf-trace -mno-tpf-trace + -mfused-madd -mno-fused-madd -mwarn-framesize + -mwarn-dynamicstack -mstack-size -mstack-guard + -mhotpatch[=halfwords] -mno-hotpatch + + Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 + -mscore5u -mscore7 -mscore7d + + SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-single-only + -m2a-single -m2a -m3 -m3e -m4-nofpu -m4-single-only + -m4-single -m4 -m4a-nofpu -m4a-single-only -m4a-single -m4a + -m4al -m5-64media -m5-64media-nofpu -m5-32media + -m5-32media-nofpu -m5-compact -m5-compact-nofpu -mb -ml + -mdalign -mrelax -mbigtable -mfmovd -mhitachi -mrenesas + -mno-renesas -mnomacsave -mieee -mno-ieee -mbitops -misize + -minline-ic_invalidate -mpadstruct -mspace -mprefergot + -musermode -multcost=number -mdiv=strategy + -mdivsi3_libfunc=name -mfixed-range=register-range + -mindexed-addressing -mgettrcost=number -mpt-fixed + -maccumulate-outgoing-args -minvalid-symbols + -matomic-model=atomic-model -mbranch-cost=num -mzdcbranch + -mno-zdcbranch -mcbranchdi -mcmpeqdi -mfused-madd + -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra + -mpretend-cmove -mtas + + Solaris 2 Options -mimpure-text -mno-impure-text -pthreads + -pthread + + SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code- + model -mmemory-model=mem-model -m32 -m64 -mapp-regs + -mno-app-regs -mfaster-structs -mno-faster-structs -mflat + -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float + -mhard-quad-float -msoft-quad-float -mstack-bias + -mno-stack-bias -munaligned-doubles -mno-unaligned-doubles + -muser-mode -mno-user-mode -mv8plus -mno-v8plus -mvis + -mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond + -mno-cbcond -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f + -mfix-ut699 + + SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma + -mbranch-hints -msmall-mem -mlarge-mem -mstdmain + -mfixed-range=register-range -mea32 -mea64 + -maddress-space-conversion -mno-address-space-conversion + -mcache-size=cache-size -matomic-updates -mno-atomic-updates + + System V Options -Qy -Qn -YP,paths -Ym,dir + + TILE-Gx Options -mcpu=cpu -m32 -m64 -mcmodel=code-model + + TILEPro Options -mcpu=cpu -m32 + + V850 Options -mlong-calls -mno-long-calls -mep -mno-ep + -mprolog-function -mno-prolog-function -mspace -mtda=n + -msda=n -mzda=n -mapp-regs -mno-app-regs -mdisable-callt + -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es + -mv850e -mv850 -mv850e3v5 -mloop -mrelax -mlong-jumps + -msoft-float -mhard-float -mgcc-abi -mrh850-abi -mbig-switch + + VAX Options -mg -mgnu -munix + + VMS Options -mvms-return-codes -mdebug-main=prefix -mmalloc64 + -mpointer-size=size + + VxWorks Options -mrtp -non-static -Bstatic -Bdynamic + -Xbind-lazy -Xbind-now + + x86-64 Options See i386 and x86-64 Options. + + Xstormy16 Options -msim + + Xtensa Options -mconst16 -mno-const16 -mfused-madd + -mno-fused-madd -mforce-no-pic -mserialize-volatile + -mno-serialize-volatile -mtext-section-literals + -mno-text-section-literals -mtarget-align -mno-target-align + -mlongcalls -mno-longcalls + + zSeries Options See S/390 and zSeries Options. + + Code Generation Options + -fcall-saved-reg -fcall-used-reg -ffixed-reg -fexceptions + -fnon-call-exceptions -fdelete-dead-exceptions + -funwind-tables -fasynchronous-unwind-tables -fno-gnu-unique + -finhibit-size-directive -finstrument-functions + -finstrument-functions-exclude-function-list=sym,sym,... + -finstrument-functions-exclude-file-list=file,file,... + -fno-common -fno-ident -fpcc-struct-return -fpic -fPIC + -fpie -fPIE -fno-jump-tables -frecord-gcc-switches + -freg-struct-return -fshort-enums -fshort-double + -fshort-wchar -fverbose-asm -fpack-struct[=n] -fstack-check + -fstack-limit-register=reg -fstack-limit-symbol=sym + -fno-stack-limit -fsplit-stack -fleading-underscore + -ftls-model=model -fstack-reuse=reuse_level -ftrapv -fwrapv + -fbounds-check -fvisibility -fstrict-volatile-bitfields + -fsync-libcalls + + Options Controlling the Kind of Output + Compilation can involve up to four stages: preprocessing, + compilation proper, assembly and linking, always in that order. + GCC is capable of preprocessing and compiling several files either + into several assembler input files, or into one assembler input + file; then each assembler input file produces an object file, and + linking combines all the object files (those newly compiled, and + those specified as input) into an executable file. + + For any given input file, the file name suffix determines what + kind of compilation is done: + + file.c + C source code that must be preprocessed. + + file.i + C source code that should not be preprocessed. + + file.ii + C++ source code that should not be preprocessed. + + file.m + Objective-C source code. Note that you must link with the + libobjc library to make an Objective-C program work. + + file.mi + Objective-C source code that should not be preprocessed. + + file.mm + file.M + Objective-C++ source code. Note that you must link with the + libobjc library to make an Objective-C++ program work. Note + that .M refers to a literal capital M. + + file.mii + Objective-C++ source code that should not be preprocessed. + + file.h + C, C++, Objective-C or Objective-C++ header file to be turned + into a precompiled header (default), or C, C++ header file to + be turned into an Ada spec (via the -fdump-ada-spec switch). + + file.cc + file.cp + file.cxx + file.cpp + file.CPP + file.c++ + file.C + C++ source code that must be preprocessed. Note that in .cxx, + the last two letters must both be literally x. Likewise, .C + refers to a literal capital C. + + file.mm + file.M + Objective-C++ source code that must be preprocessed. + + file.mii + Objective-C++ source code that should not be preprocessed. + + file.hh + file.H + file.hp + file.hxx + file.hpp + file.HPP + file.h++ + file.tcc + C++ header file to be turned into a precompiled header or Ada + spec. + + file.f + file.for + file.ftn + Fixed form Fortran source code that should not be + preprocessed. + + file.F + file.FOR + file.fpp + file.FPP + file.FTN + Fixed form Fortran source code that must be preprocessed (with + the traditional preprocessor). + + file.f90 + file.f95 + file.f03 + file.f08 + Free form Fortran source code that should not be preprocessed. + + file.F90 + file.F95 + file.F03 + file.F08 + Free form Fortran source code that must be preprocessed (with + the traditional preprocessor). + + file.go + Go source code. + + file.ads + Ada source code file that contains a library unit declaration + (a declaration of a package, subprogram, or generic, or a + generic instantiation), or a library unit renaming declaration + (a package, generic, or subprogram renaming declaration). + Such files are also called specs. + + file.adb + Ada source code file containing a library unit body (a + subprogram or package body). Such files are also called + bodies. + + file.d + D source code file. + + file.di + D interface code file. + + file.dd + D documentation code file. + + file.s + Assembler code. + + file.S + file.sx + Assembler code that must be preprocessed. + + other + An object file to be fed straight into linking. Any file name + with no recognized suffix is treated this way. + + You can specify the input language explicitly with the -x option: + + -x language + Specify explicitly the language for the following input files + (rather than letting the compiler choose a default based on + the file name suffix). This option applies to all following + input files until the next -x option. Possible values for + language are: + + c c-header cpp-output + c++ c++-header c++-cpp-output + objective-c objective-c-header objective-c-cpp-output + objective-c++ objective-c++-header objective-c++-cpp-output + assembler assembler-with-cpp + ada + d + f77 f77-cpp-input f95 f95-cpp-input + go + java + + -x none + Turn off any specification of a language, so that subsequent + files are handled according to their file name suffixes (as + they are if -x has not been used at all). + + -pass-exit-codes + Normally the gcc program exits with the code of 1 if any phase + of the compiler returns a non-success return code. If you + specify -pass-exit-codes, the gcc program instead returns with + the numerically highest error produced by any phase returning + an error indication. The C, C++, and Fortran front ends + return 4 if an internal compiler error is encountered. + + If you only want some of the stages of compilation, you can use -x + (or filename suffixes) to tell gcc where to start, and one of the + options -c, -S, or -E to say where gcc is to stop. Note that some + combinations (for example, -x cpp-output -E) instruct gcc to do + nothing at all. + + -c Compile or assemble the source files, but do not link. The + linking stage simply is not done. The ultimate output is in + the form of an object file for each source file. + + By default, the object file name for a source file is made by + replacing the suffix .c, .i, .s, etc., with .o. + + Unrecognized input files, not requiring compilation or + assembly, are ignored. + + -S Stop after the stage of compilation proper; do not assemble. + The output is in the form of an assembler code file for each + non-assembler input file specified. + + By default, the assembler file name for a source file is made + by replacing the suffix .c, .i, etc., with .s. + + Input files that don't require compilation are ignored. + + -E Stop after the preprocessing stage; do not run the compiler + proper. The output is in the form of preprocessed source + code, which is sent to the standard output. + + Input files that don't require preprocessing are ignored. + + -o file + Place output in file file. This applies to whatever sort of + output is being produced, whether it be an executable file, an + object file, an assembler file or preprocessed C code. + + If -o is not specified, the default is to put an executable + file in a.out, the object file for source.suffix in source.o, + its assembler file in source.s, a precompiled header file in + source.suffix.gch, and all preprocessed C source on standard + output. + + -v Print (on standard error output) the commands executed to run + the stages of compilation. Also print the version number of + the compiler driver program and of the preprocessor and the + compiler proper. + + -### + Like -v except the commands are not executed and arguments are + quoted unless they contain only alphanumeric characters or + "./-_". This is useful for shell scripts to capture the + driver-generated command lines. + + -pipe + Use pipes rather than temporary files for communication + between the various stages of compilation. This fails to work + on some systems where the assembler is unable to read from a + pipe; but the GNU assembler has no trouble. + + --help + Print (on the standard output) a description of the command- + line options understood by gcc. If the -v option is also + specified then --help is also passed on to the various + processes invoked by gcc, so that they can display the + command-line options they accept. If the -Wextra option has + also been specified (prior to the --help option), then + command-line options that have no documentation associated + with them are also displayed. + + --target-help + Print (on the standard output) a description of target- + specific command-line options for each tool. For some targets + extra target-specific information may also be printed. + + --help={class|[^]qualifier}[,...] + Print (on the standard output) a description of the command- + line options understood by the compiler that fit into all + specified classes and qualifiers. These are the supported + classes: + + optimizers + Display all of the optimization options supported by the + compiler. + + warnings + Display all of the options controlling warning messages + produced by the compiler. + + target + Display target-specific options. Unlike the --target-help + option however, target-specific options of the linker and + assembler are not displayed. This is because those tools + do not currently support the extended --help= syntax. + + params + Display the values recognized by the --param option. + + language + Display the options supported for language, where language + is the name of one of the languages supported in this + version of GCC. + + common + Display the options that are common to all languages. + + These are the supported qualifiers: + + undocumented + Display only those options that are undocumented. + + joined + Display options taking an argument that appears after an + equal sign in the same continuous piece of text, such as: + --help=target. + + separate + Display options taking an argument that appears as a + separate word following the original option, such as: -o + output-file. + + Thus for example to display all the undocumented target- + specific switches supported by the compiler, use: + + --help=target,undocumented + + The sense of a qualifier can be inverted by prefixing it with + the ^ character, so for example to display all binary warning + options (i.e., ones that are either on or off and that do not + take an argument) that have a description, use: + + --help=warnings,^joined,^undocumented + + The argument to --help= should not consist solely of inverted + qualifiers. + + Combining several classes is possible, although this usually + restricts the output so much that there is nothing to display. + One case where it does work, however, is when one of the + classes is target. For example, to display all the target- + specific optimization options, use: + + --help=target,optimizers + + The --help= option can be repeated on the command line. Each + successive use displays its requested class of options, + skipping those that have already been displayed. + + If the -Q option appears on the command line before the + --help= option, then the descriptive text displayed by --help= + is changed. Instead of describing the displayed options, an + indication is given as to whether the option is enabled, + disabled or set to a specific value (assuming that the + compiler knows this at the point where the --help= option is + used). + + Here is a truncated example from the ARM port of gcc: + + % gcc -Q -mabi=2 --help=target -c + The following options are target specific: + -mabi= 2 + -mabort-on-noreturn [disabled] + -mapcs [disabled] + + The output is sensitive to the effects of previous command- + line options, so for example it is possible to find out which + optimizations are enabled at -O2 by using: + + -Q -O2 --help=optimizers + + Alternatively you can discover which binary optimizations are + enabled by -O3 by using: + + gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts + gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts + diff /tmp/O2-opts /tmp/O3-opts | grep enabled + + -no-canonical-prefixes + Do not expand any symbolic links, resolve references to /../ + or /./, or make the path absolute when generating a relative + prefix. + + --version + Display the version number and copyrights of the invoked GCC. + + -wrapper + Invoke all subcommands under a wrapper program. The name of + the wrapper program and its parameters are passed as a comma + separated list. + + gcc -c t.c -wrapper gdb,--args + + This invokes all subprograms of gcc under gdb --args, thus the + invocation of cc1 is gdb --args cc1 .... + + -fplugin=name.so + Load the plugin code in file name.so, assumed to be a shared + object to be dlopen'd by the compiler. The base name of the + shared object file is used to identify the plugin for the + purposes of argument parsing (See -fplugin-arg-name-key=value + below). Each plugin should define the callback functions + specified in the Plugins API. + + -fplugin-arg-name-key=value + Define an argument called key with a value of value for the + plugin called name. + + -fdump-ada-spec[-slim] + For C and C++ source and include files, generate corresponding + Ada specs. + + -fada-spec-parent=unit + In conjunction with -fdump-ada-spec[-slim] above, generate Ada + specs as child units of parent unit. + + -fdump-go-spec=file + For input files in any language, generate corresponding Go + declarations in file. This generates Go "const", "type", + "var", and "func" declarations which may be a useful way to + start writing a Go interface to code written in some other + language. + + @file + Read command-line options from file. The options read are + inserted in place of the original @file option. If file does + not exist, or cannot be read, then the option will be treated + literally, and not removed. + + Options in file are separated by whitespace. A whitespace + character may be included in an option by surrounding the + entire option in either single or double quotes. Any + character (including a backslash) may be included by prefixing + the character to be included with a backslash. The file may + itself contain additional @file options; any such options will + be processed recursively. + + Compiling C++ Programs + C++ source files conventionally use one of the suffixes .C, .cc, + .cpp, .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, + .hpp, .H, or (for shared template code) .tcc; and preprocessed C++ + files use the suffix .ii. GCC recognizes files with these names + and compiles them as C++ programs even if you call the compiler + the same way as for compiling C programs (usually with the name + gcc). + + However, the use of gcc does not add the C++ library. g++ is a + program that calls GCC and automatically specifies linking against + the C++ library. It treats .c, .h and .i files as C++ source + files instead of C source files unless -x is used. This program + is also useful when precompiling a C header file with a .h + extension for use in C++ compilations. On many systems, g++ is + also installed with the name c++. + + When you compile C++ programs, you may specify many of the same + command-line options that you use for compiling programs in any + language; or command-line options meaningful for C and related + languages; or options that are meaningful only for C++ programs. + + Options Controlling C Dialect + The following options control the dialect of C (or languages + derived from C, such as C++, Objective-C and Objective-C++) that + the compiler accepts: + + -ansi + In C mode, this is equivalent to -std=c90. In C++ mode, it is + equivalent to -std=c++98. + + This turns off certain features of GCC that are incompatible + with ISO C90 (when compiling C code), or of standard C++ (when + compiling C++ code), such as the "asm" and "typeof" keywords, + and predefined macros such as "unix" and "vax" that identify + the type of system you are using. It also enables the + undesirable and rarely used ISO trigraph feature. For the C + compiler, it disables recognition of C++ style // comments as + well as the "inline" keyword. + + The alternate keywords "__asm__", "__extension__", + "__inline__" and "__typeof__" continue to work despite -ansi. + You would not want to use them in an ISO C program, of course, + but it is useful to put them in header files that might be + included in compilations done with -ansi. Alternate + predefined macros such as "__unix__" and "__vax__" are also + available, with or without -ansi. + + The -ansi option does not cause non-ISO programs to be + rejected gratuitously. For that, -Wpedantic is required in + addition to -ansi. + + The macro "__STRICT_ANSI__" is predefined when the -ansi + option is used. Some header files may notice this macro and + refrain from declaring certain functions or defining certain + macros that the ISO standard doesn't call for; this is to + avoid interfering with any programs that might use these names + for other things. + + Functions that are normally built in but do not have semantics + defined by ISO C (such as "alloca" and "ffs") are not built-in + functions when -ansi is used. + + -std= + Determine the language standard. This option is currently + only supported when compiling C or C++. + + The compiler can accept several base standards, such as c90 or + c++98, and GNU dialects of those standards, such as gnu90 or + gnu++98. When a base standard is specified, the compiler + accepts all programs following that standard plus those using + GNU extensions that do not contradict it. For example, + -std=c90 turns off certain features of GCC that are + incompatible with ISO C90, such as the "asm" and "typeof" + keywords, but not other GNU extensions that do not have a + meaning in ISO C90, such as omitting the middle term of a "?:" + expression. On the other hand, when a GNU dialect of a + standard is specified, all features supported by the compiler + are enabled, even when those features change the meaning of + the base standard. As a result, some strict-conforming + programs may be rejected. The particular standard is used by + -Wpedantic to identify which features are GNU extensions given + that version of the standard. For example -std=gnu90 + -Wpedantic warns about C++ style // comments, while -std=gnu99 + -Wpedantic does not. + + A value for this option must be provided; possible values are + + c90 + c89 + iso9899:1990 + Support all ISO C90 programs (certain GNU extensions that + conflict with ISO C90 are disabled). Same as -ansi for C + code. + + iso9899:199409 + ISO C90 as modified in amendment 1. + + c99 + c9x + iso9899:1999 + iso9899:199x + ISO C99. Note that this standard is not yet fully + supported; see for + more information. The names c9x and iso9899:199x are + deprecated. + + c11 + c1x + iso9899:2011 + ISO C11, the 2011 revision of the ISO C standard. Support + is incomplete and experimental. The name c1x is + deprecated. + + gnu90 + gnu89 + GNU dialect of ISO C90 (including some C99 features). This + is the default for C code. + + gnu99 + gnu9x + GNU dialect of ISO C99. When ISO C99 is fully implemented + in GCC, this will become the default. The name gnu9x is + deprecated. + + gnu11 + gnu1x + GNU dialect of ISO C11. Support is incomplete and + experimental. The name gnu1x is deprecated. + + c++98 + c++03 + The 1998 ISO C++ standard plus the 2003 technical + corrigendum and some additional defect reports. Same as + -ansi for C++ code. + + gnu++98 + gnu++03 + GNU dialect of -std=c++98. This is the default for C++ + code. + + c++11 + c++0x + The 2011 ISO C++ standard plus amendments. Support for + C++11 is still experimental, and may change in + incompatible ways in future releases. The name c++0x is + deprecated. + + gnu++11 + gnu++0x + GNU dialect of -std=c++11. Support for C++11 is still + experimental, and may change in incompatible ways in + future releases. The name gnu++0x is deprecated. + + c++1y + The next revision of the ISO C++ standard, tentatively + planned for 2017. Support is highly experimental, and + will almost certainly change in incompatible ways in + future releases. + + gnu++1y + GNU dialect of -std=c++1y. Support is highly + experimental, and will almost certainly change in + incompatible ways in future releases. + + -fgnu89-inline + The option -fgnu89-inline tells GCC to use the traditional GNU + semantics for "inline" functions when in C99 mode. + This option is accepted and ignored by GCC versions 4.1.3 up + to but not including 4.3. In GCC versions 4.3 and later it + changes the behavior of GCC in C99 mode. Using this option is + roughly equivalent to adding the "gnu_inline" function + attribute to all inline functions. + + The option -fno-gnu89-inline explicitly tells GCC to use the + C99 semantics for "inline" when in C99 or gnu99 mode (i.e., it + specifies the default behavior). This option was first + supported in GCC 4.3. This option is not supported in + -std=c90 or -std=gnu90 mode. + + The preprocessor macros "__GNUC_GNU_INLINE__" and + "__GNUC_STDC_INLINE__" may be used to check which semantics + are in effect for "inline" functions. + + -aux-info filename + Output to the given filename prototyped declarations for all + functions declared and/or defined in a translation unit, + including those in header files. This option is silently + ignored in any language other than C. + + Besides declarations, the file indicates, in comments, the + origin of each declaration (source file and line), whether the + declaration was implicit, prototyped or unprototyped (I, N for + new or O for old, respectively, in the first character after + the line number and the colon), and whether it came from a + declaration or a definition (C or F, respectively, in the + following character). In the case of function definitions, a + K&R-style list of arguments followed by their declarations is + also provided, inside comments, after the declaration. + + -fallow-parameterless-variadic-functions + Accept variadic functions without named parameters. + + Although it is possible to define such a function, this is not + very useful as it is not possible to read the arguments. This + is only supported for C as this construct is allowed by C++. + + -fno-asm + Do not recognize "asm", "inline" or "typeof" as a keyword, so + that code can use these words as identifiers. You can use the + keywords "__asm__", "__inline__" and "__typeof__" instead. + -ansi implies -fno-asm. + + In C++, this switch only affects the "typeof" keyword, since + "asm" and "inline" are standard keywords. You may want to use + the -fno-gnu-keywords flag instead, which has the same effect. + In C99 mode (-std=c99 or -std=gnu99), this switch only affects + the "asm" and "typeof" keywords, since "inline" is a standard + keyword in ISO C99. + + -fno-builtin + -fno-builtin-function + Don't recognize built-in functions that do not begin with + __builtin_ as prefix. + + GCC normally generates special code to handle certain built-in + functions more efficiently; for instance, calls to "alloca" + may become single instructions which adjust the stack + directly, and calls to "memcpy" may become inline copy loops. + The resulting code is often both smaller and faster, but since + the function calls no longer appear as such, you cannot set a + breakpoint on those calls, nor can you change the behavior of + the functions by linking with a different library. In + addition, when a function is recognized as a built-in + function, GCC may use information about that function to warn + about problems with calls to that function, or to generate + more efficient code, even if the resulting code still contains + calls to that function. For example, warnings are given with + -Wformat for bad calls to "printf" when "printf" is built in + and "strlen" is known not to modify global memory. + + With the -fno-builtin-function option only the built-in + function function is disabled. function must not begin with + __builtin_. If a function is named that is not built-in in + this version of GCC, this option is ignored. There is no + corresponding -fbuiltin-function option; if you wish to enable + built-in functions selectively when using -fno-builtin or + -ffreestanding, you may define macros such as: + + #define abs(n) __builtin_abs ((n)) + #define strcpy(d, s) __builtin_strcpy ((d), (s)) + + -fhosted + Assert that compilation targets a hosted environment. This + implies -fbuiltin. A hosted environment is one in which the + entire standard library is available, and in which "main" has + a return type of "int". Examples are nearly everything except + a kernel. This is equivalent to -fno-freestanding. + + -ffreestanding + Assert that compilation targets a freestanding environment. + This implies -fno-builtin. A freestanding environment is one + in which the standard library may not exist, and program + startup may not necessarily be at "main". The most obvious + example is an OS kernel. This is equivalent to -fno-hosted. + + -fopenmp + Enable handling of OpenMP directives "#pragma omp" in C/C++ + and "!$omp" in Fortran. When -fopenmp is specified, the + compiler generates parallel code according to the OpenMP + Application Program Interface v3.0 . + This option implies -pthread, and thus is only supported on + targets that have support for -pthread. + + -fgnu-tm + When the option -fgnu-tm is specified, the compiler generates + code for the Linux variant of Intel's current Transactional + Memory ABI specification document (Revision 1.1, May 6 2009). + This is an experimental feature whose interface may change in + future versions of GCC, as the official specification changes. + Please note that not all architectures are supported for this + feature. + + For more information on GCC's support for transactional + memory, + + Note that the transactional memory feature is not supported + with non-call exceptions (-fnon-call-exceptions). + + -fms-extensions + Accept some non-standard constructs used in Microsoft header + files. + + In C++ code, this allows member names in structures to be + similar to previous types declarations. + + typedef int UOW; + struct ABC { + UOW UOW; + }; + + Some cases of unnamed fields in structures and unions are only + accepted with this option. + + -fplan9-extensions + Accept some non-standard constructs used in Plan 9 code. + + This enables -fms-extensions, permits passing pointers to + structures with anonymous fields to functions that expect + pointers to elements of the type of the field, and permits + referring to anonymous fields declared using a typedef. + This is only supported for C, not C++. + + -trigraphs + Support ISO C trigraphs. The -ansi option (and -std options + for strict ISO C conformance) implies -trigraphs. + + -traditional + -traditional-cpp + Formerly, these options caused GCC to attempt to emulate a + pre-standard C compiler. They are now only supported with the + -E switch. The preprocessor continues to support a pre- + standard mode. See the GNU CPP manual for details. + + -fcond-mismatch + Allow conditional expressions with mismatched types in the + second and third arguments. The value of such an expression + is void. This option is not supported for C++. + + -flax-vector-conversions + Allow implicit conversions between vectors with differing + numbers of elements and/or incompatible element types. This + option should not be used for new code. + + -funsigned-char + Let the type "char" be unsigned, like "unsigned char". + + Each kind of machine has a default for what "char" should be. + It is either like "unsigned char" by default or like "signed + char" by default. + + Ideally, a portable program should always use "signed char" or + "unsigned char" when it depends on the signedness of an + object. But many programs have been written to use plain + "char" and expect it to be signed, or expect it to be + unsigned, depending on the machines they were written for. + This option, and its inverse, let you make such a program work + with the opposite default. + + The type "char" is always a distinct type from each of "signed + char" or "unsigned char", even though its behavior is always + just like one of those two. + + -fsigned-char + Let the type "char" be signed, like "signed char". + + Note that this is equivalent to -fno-unsigned-char, which is + the negative form of -funsigned-char. Likewise, the option + -fno-signed-char is equivalent to -funsigned-char. + + -fsigned-bitfields + -funsigned-bitfields + -fno-signed-bitfields + -fno-unsigned-bitfields + These options control whether a bit-field is signed or + unsigned, when the declaration does not use either "signed" or + "unsigned". By default, such a bit-field is signed, because + this is consistent: the basic integer types such as "int" are + signed types. + + Options Controlling C++ Dialect + This section describes the command-line options that are only + meaningful for C++ programs. You can also use most of the GNU + compiler options regardless of what language your program is in. + For example, you might compile a file "firstClass.C" like this: + + g++ -g -frepo -O -c firstClass.C + + In this example, only -frepo is an option meant only for C++ + programs; you can use the other options with any language + supported by GCC. + + Here is a list of options that are only for compiling C++ + programs: + + -fabi-version=n + Use version n of the C++ ABI. The default is version 2. + + Version 0 refers to the version conforming most closely to the + C++ ABI specification. Therefore, the ABI obtained using + version 0 will change in different versions of G++ as ABI bugs + are fixed. + + Version 1 is the version of the C++ ABI that first appeared in + G++ 3.2. + + Version 2 is the version of the C++ ABI that first appeared in + G++ 3.4. + + Version 3 corrects an error in mangling a constant address as + a template argument. + + Version 4, which first appeared in G++ 4.5, implements a + standard mangling for vector types. + + Version 5, which first appeared in G++ 4.6, corrects the + mangling of attribute const/volatile on function pointer + types, decltype of a plain decl, and use of a function + parameter in the declaration of another parameter. + + Version 6, which first appeared in G++ 4.7, corrects the + promotion behavior of C++11 scoped enums and the mangling of + template argument packs, const/static_cast, prefix ++ and --, + and a class scope function used as a template argument. + + See also -Wabi. + + -fno-access-control + Turn off all access checking. This switch is mainly useful + for working around bugs in the access control code. + + -fcheck-new + Check that the pointer returned by "operator new" is non-null + before attempting to modify the storage allocated. This check + is normally unnecessary because the C++ standard specifies + that "operator new" only returns 0 if it is declared throw(), + in which case the compiler always checks the return value even + without this option. In all other cases, when "operator new" + has a non-empty exception specification, memory exhaustion is + signalled by throwing "std::bad_alloc". See also new + (nothrow). + + -fconstexpr-depth=n + Set the maximum nested evaluation depth for C++11 constexpr + functions to n. A limit is needed to detect endless recursion + during constant expression evaluation. The minimum specified + by the standard is 512. + + -fdeduce-init-list + Enable deduction of a template type parameter as + "std::initializer_list" from a brace-enclosed initializer + list, i.e. + + template auto forward(T t) -> decltype (realfn (t)) + { + return realfn (t); + } + + void f() + { + forward({1,2}); // call forward> + } + + This deduction was implemented as a possible extension to the + originally proposed semantics for the C++11 standard, but was + not part of the final standard, so it is disabled by default. + This option is deprecated, and may be removed in a future + version of G++. + + -ffriend-injection + Inject friend functions into the enclosing namespace, so that + they are visible outside the scope of the class in which they + are declared. Friend functions were documented to work this + way in the old Annotated C++ Reference Manual, and versions of + G++ before 4.1 always worked that way. However, in ISO C++ a + friend function that is not declared in an enclosing scope can + only be found using argument dependent lookup. This option + causes friends to be injected as they were in earlier + releases. + + This option is for compatibility, and may be removed in a + future release of G++. + + -fno-elide-constructors + The C++ standard allows an implementation to omit creating a + temporary that is only used to initialize another object of + the same type. Specifying this option disables that + optimization, and forces G++ to call the copy constructor in + all cases. + + -fno-enforce-eh-specs + Don't generate code to check for violation of exception + specifications at run time. This option violates the C++ + standard, but may be useful for reducing code size in + production builds, much like defining NDEBUG. This does not + give user code permission to throw exceptions in violation of + the exception specifications; the compiler still optimizes + based on the specifications, so throwing an unexpected + exception results in undefined behavior at run time. + + -fextern-tls-init + -fno-extern-tls-init + The C++11 and OpenMP standards allow thread_local and + threadprivate variables to have dynamic (runtime) + initialization. To support this, any use of such a variable + goes through a wrapper function that performs any necessary + initialization. When the use and definition of the variable + are in the same translation unit, this overhead can be + optimized away, but when the use is in a different translation + unit there is significant overhead even if the variable + doesn't actually need dynamic initialization. If the + programmer can be sure that no use of the variable in a non- + defining TU needs to trigger dynamic initialization (either + because the variable is statically initialized, or a use of + the variable in the defining TU will be executed before any + uses in another TU), they can avoid this overhead with the + -fno-extern-tls-init option. + + On targets that support symbol aliases, the default is + -fextern-tls-init. On targets that do not support symbol + aliases, the default is -fno-extern-tls-init. + + -ffor-scope + -fno-for-scope + If -ffor-scope is specified, the scope of variables declared + in a for-init-statement is limited to the for loop itself, as + specified by the C++ standard. If -fno-for-scope is + specified, the scope of variables declared in a for-init- + statement extends to the end of the enclosing scope, as was + the case in old versions of G++, and other (traditional) + implementations of C++. + + If neither flag is given, the default is to follow the + standard, but to allow and give a warning for old-style code + that would otherwise be invalid, or have different behavior. + + -fno-gnu-keywords + Do not recognize "typeof" as a keyword, so that code can use + this word as an identifier. You can use the keyword + "__typeof__" instead. -ansi implies -fno-gnu-keywords. + + -fno-implicit-templates + Never emit code for non-inline templates that are instantiated + implicitly (i.e. by use); only emit code for explicit + instantiations. + + -fno-implicit-inline-templates + Don't emit code for implicit instantiations of inline + templates, either. The default is to handle inlines + differently so that compiles with and without optimization + need the same set of explicit instantiations. + + -fno-implement-inlines + To save space, do not emit out-of-line copies of inline + functions controlled by #pragma implementation. This causes + linker errors if these functions are not inlined everywhere + they are called. + + -fms-extensions + Disable Wpedantic warnings about constructs used in MFC, such + as implicit int and getting a pointer to member function via + non-standard syntax. + + -fno-nonansi-builtins + Disable built-in declarations of functions that are not + mandated by ANSI/ISO C. These include "ffs", "alloca", + "_exit", "index", "bzero", "conjf", and other related + functions. + + -fnothrow-opt + Treat a "throw()" exception specification as if it were a + "noexcept" specification to reduce or eliminate the text size + overhead relative to a function with no exception + specification. If the function has local variables of types + with non-trivial destructors, the exception specification + actually makes the function smaller because the EH cleanups + for those variables can be optimized away. The semantic + effect is that an exception thrown out of a function with such + an exception specification results in a call to "terminate" + rather than "unexpected". + + -fno-operator-names + Do not treat the operator name keywords "and", "bitand", + "bitor", "compl", "not", "or" and "xor" as synonyms as + keywords. + + -fno-optional-diags + Disable diagnostics that the standard says a compiler does not + need to issue. Currently, the only such diagnostic issued by + G++ is the one for a name having multiple meanings within a + class. + + -fpermissive + Downgrade some diagnostics about nonconformant code from + errors to warnings. Thus, using -fpermissive allows some + nonconforming code to compile. + + -fno-pretty-templates + When an error message refers to a specialization of a function + template, the compiler normally prints the signature of the + template followed by the template arguments and any typedefs + or typenames in the signature (e.g. "void f(T) [with T = int]" + rather than "void f(int)") so that it's clear which template + is involved. When an error message refers to a specialization + of a class template, the compiler omits any template arguments + that match the default template arguments for that template. + If either of these behaviors make it harder to understand the + error message rather than easier, you can use + -fno-pretty-templates to disable them. + + -frepo + Enable automatic template instantiation at link time. This + option also implies -fno-implicit-templates. + + -fno-rtti + Disable generation of information about every class with + virtual functions for use by the C++ run-time type + identification features (dynamic_cast and typeid). If you + don't use those parts of the language, you can save some space + by using this flag. Note that exception handling uses the + same information, but G++ generates it as needed. The + dynamic_cast operator can still be used for casts that do not + require run-time type information, i.e. casts to "void *" or + to unambiguous base classes. + + -fstats + Emit statistics about front-end processing at the end of the + compilation. This information is generally only useful to the + G++ development team. + + -fstrict-enums + Allow the compiler to optimize using the assumption that a + value of enumerated type can only be one of the values of the + enumeration (as defined in the C++ standard; basically, a + value that can be represented in the minimum number of bits + needed to represent all the enumerators). This assumption may + not be valid if the program uses a cast to convert an + arbitrary integer value to the enumerated type. + + -ftemplate-backtrace-limit=n + Set the maximum number of template instantiation notes for a + single warning or error to n. The default value is 10. + + -ftemplate-depth=n + Set the maximum instantiation depth for template classes to n. + A limit on the template instantiation depth is needed to + detect endless recursions during template class instantiation. + ANSI/ISO C++ conforming programs must not rely on a maximum + depth greater than 17 (changed to 1024 in C++11). The default + value is 900, as the compiler can run out of stack space + before hitting 1024 in some situations. + + -fno-threadsafe-statics + Do not emit the extra code to use the routines specified in + the C++ ABI for thread-safe initialization of local statics. + You can use this option to reduce code size slightly in code + that doesn't need to be thread-safe. + + -fuse-cxa-atexit + Register destructors for objects with static storage duration + with the "__cxa_atexit" function rather than the "atexit" + function. This option is required for fully standards- + compliant handling of static destructors, but only works if + your C library supports "__cxa_atexit". + + -fno-use-cxa-get-exception-ptr + Don't use the "__cxa_get_exception_ptr" runtime routine. This + causes "std::uncaught_exception" to be incorrect, but is + necessary if the runtime routine is not available. + + -fvisibility-inlines-hidden + This switch declares that the user does not attempt to compare + pointers to inline functions or methods where the addresses of + the two functions are taken in different shared objects. + + The effect of this is that GCC may, effectively, mark inline + methods with "__attribute__ ((visibility ("hidden")))" so that + they do not appear in the export table of a DSO and do not + require a PLT indirection when used within the DSO. Enabling + this option can have a dramatic effect on load and link times + of a DSO as it massively reduces the size of the dynamic + export table when the library makes heavy use of templates. + + The behavior of this switch is not quite the same as marking + the methods as hidden directly, because it does not affect + static variables local to the function or cause the compiler + to deduce that the function is defined in only one shared + object. + + You may mark a method as having a visibility explicitly to + negate the effect of the switch for that method. For example, + if you do want to compare pointers to a particular inline + method, you might mark it as having default visibility. + Marking the enclosing class with explicit visibility has no + effect. + + Explicitly instantiated inline methods are unaffected by this + option as their linkage might otherwise cross a shared library + boundary. + + -fvisibility-ms-compat + This flag attempts to use visibility settings to make GCC's + C++ linkage model compatible with that of Microsoft Visual + Studio. + + The flag makes these changes to GCC's linkage model: + + 1. It sets the default visibility to "hidden", like + -fvisibility=hidden. + + 2. Types, but not their members, are not hidden by default. + + 3. The One Definition Rule is relaxed for types without + explicit visibility specifications that are defined in + more than one shared object: those declarations are + permitted if they are permitted when this option is not + used. + + In new code it is better to use -fvisibility=hidden and export + those classes that are intended to be externally visible. + Unfortunately it is possible for code to rely, perhaps + accidentally, on the Visual Studio behavior. + + Among the consequences of these changes are that static data + members of the same type with the same name but defined in + different shared objects are different, so changing one does + not change the other; and that pointers to function members + defined in different shared objects may not compare equal. + When this flag is given, it is a violation of the ODR to + define types with the same name differently. + + -fno-weak + Do not use weak symbol support, even if it is provided by the + linker. By default, G++ uses weak symbols if they are + available. This option exists only for testing, and should + not be used by end-users; it results in inferior code and has + no benefits. This option may be removed in a future release + of G++. + + -nostdinc++ + Do not search for header files in the standard directories + specific to C++, but do still search the other standard + directories. (This option is used when building the C++ + library.) + + In addition, these optimization, warning, and code generation + options have meanings only for C++ programs: + + -fno-default-inline + Do not assume inline for functions defined inside a class + scope. + Note that these functions have linkage like inline + functions; they just aren't inlined by default. + + -Wabi (C, Objective-C, C++ and Objective-C++ only) + Warn when G++ generates code that is probably not compatible + with the vendor-neutral C++ ABI. Although an effort has been + made to warn about all such cases, there are probably some + cases that are not warned about, even though G++ is generating + incompatible code. There may also be cases where warnings are + emitted even though the code that is generated is compatible. + + You should rewrite your code to avoid these warnings if you + are concerned about the fact that code generated by G++ may + not be binary compatible with code generated by other + compilers. + + The known incompatibilities in -fabi-version=2 (the default) + include: + + · A template with a non-type template parameter of reference + type is mangled incorrectly: + + extern int N; + template struct S {}; + void n (S) {2} + + This is fixed in -fabi-version=3. + + · SIMD vector types declared using "__attribute + ((vector_size))" are mangled in a non-standard way that + does not allow for overloading of functions taking vectors + of different sizes. + + The mangling is changed in -fabi-version=4. + + The known incompatibilities in -fabi-version=1 include: + + · Incorrect handling of tail-padding for bit-fields. G++ + may attempt to pack data into the same byte as a base + class. For example: + + struct A { virtual void f(); int f1 : 1; }; + struct B : public A { int f2 : 1; }; + + In this case, G++ places "B::f2" into the same byte as + "A::f1"; other compilers do not. You can avoid this + problem by explicitly padding "A" so that its size is a + multiple of the byte size on your platform; that causes + G++ and other compilers to lay out "B" identically. + + · Incorrect handling of tail-padding for virtual bases. G++ + does not use tail padding when laying out virtual bases. + For example: + + struct A { virtual void f(); char c1; }; + struct B { B(); char c2; }; + struct C : public A, public virtual B {}; + + In this case, G++ does not place "B" into the tail-padding + for "A"; other compilers do. You can avoid this problem + by explicitly padding "A" so that its size is a multiple + of its alignment (ignoring virtual base classes); that + causes G++ and other compilers to lay out "C" identically. + + · Incorrect handling of bit-fields with declared widths + greater than that of their underlying types, when the bit- + fields appear in a union. For example: + + union U { int i : 4096; }; + + Assuming that an "int" does not have 4096 bits, G++ makes + the union too small by the number of bits in an "int". + + · Empty classes can be placed at incorrect offsets. For + example: + + struct A {}; + + struct B { + A a; + virtual void f (); + }; + + struct C : public B, public A {}; + + G++ places the "A" base class of "C" at a nonzero offset; + it should be placed at offset zero. G++ mistakenly + believes that the "A" data member of "B" is already at + offset zero. + + · Names of template functions whose types involve "typename" + or template template parameters can be mangled + incorrectly. + + template + void f(typename Q::X) {} + + template