zoukankan      html  css  js  c++  java
  • 1.gcc的有关知识

    1.gcc的有关知识

    运行环境:

    Vbox and redhat 6.4

    1.1 gcc特点:

        Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。Gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。

    1.2 gcc基本用法:

    Gcc最基本的用法是:

        Gcc [options] filenames

    Options:编译器所需要的编译选项。

    Filenames:要编译的文件名。

    新建一个hello.c文件,内容如下:

    #include <stdio.h>

    int main(void)

    {

    printf("Hello forfish! ");

    return 0;

    }

    编辑的过程如下:

    1.3

    2.1编译的流程:

    Gcc编译器能将C/C++语言源程序、汇编程序形成可执行文件。整个形成过程可以被细分为四个阶段:

    1.预处理:

    Hello.i的内容:

    # 1 "hello.c"

    # 1 "<built-in>"

    # 1 "<command-line>"

    # 1 "hello.c"

    # 1 "/usr/include/stdio.h" 1 3 4

    # 28 "/usr/include/stdio.h" 3 4

    # 1 "/usr/include/features.h" 1 3 4

    # 361 "/usr/include/features.h" 3 4

    # 1 "/usr/include/sys/cdefs.h" 1 3 4

    # 365 "/usr/include/sys/cdefs.h" 3 4

    # 1 "/usr/include/bits/wordsize.h" 1 3 4

    # 366 "/usr/include/sys/cdefs.h" 2 3 4

    # 362 "/usr/include/features.h" 2 3 4

    # 385 "/usr/include/features.h" 3 4

    # 1 "/usr/include/gnu/stubs.h" 1 3 4

    # 1 "/usr/include/bits/wordsize.h" 1 3 4

    # 5 "/usr/include/gnu/stubs.h" 2 3 4

    # 1 "/usr/include/gnu/stubs-32.h" 1 3 4

    # 8 "/usr/include/gnu/stubs.h" 2 3 4

    # 386 "/usr/include/features.h" 2 3 4

    # 29 "/usr/include/stdio.h" 2 3 4

    # 1 "/usr/lib/gcc/i686-redhat-linux/4.4.7/include/stddef.h" 1 3 4

    # 211 "/usr/lib/gcc/i686-redhat-linux/4.4.7/include/stddef.h" 3 4

    typedef unsigned int size_t;

    # 35 "/usr/include/stdio.h" 2 3 4

    # 1 "/usr/include/bits/types.h" 1 3 4

    # 28 "/usr/include/bits/types.h" 3 4

    # 1 "/usr/include/bits/wordsize.h" 1 3 4

    # 29 "/usr/include/bits/types.h" 2 3 4

    typedef unsigned char __u_char;

    typedef unsigned short int __u_short;

    typedef unsigned int __u_int;

    typedef unsigned long int __u_long;

    typedef signed char __int8_t;

    typedef unsigned char __uint8_t;

    typedef signed short int __int16_t;

    typedef unsigned short int __uint16_t;

    typedef signed int __int32_t;

    typedef unsigned int __uint32_t;

    __extension__ typedef signed long long int __int64_t;

    __extension__ typedef unsigned long long int __uint64_t;

    __extension__ typedef long long int __quad_t;

    __extension__ typedef unsigned long long int __u_quad_t;

    # 131 "/usr/include/bits/types.h" 3 4

    # 1 "/usr/include/bits/typesizes.h" 1 3 4

    # 132 "/usr/include/bits/types.h" 2 3 4

    __extension__ typedef __u_quad_t __dev_t;

    __extension__ typedef unsigned int __uid_t;

    __extension__ typedef unsigned int __gid_t;

    __extension__ typedef unsigned long int __ino_t;

    __extension__ typedef __u_quad_t __ino64_t;

    __extension__ typedef unsigned int __mode_t;

    __extension__ typedef unsigned int __nlink_t;

    __extension__ typedef long int __off_t;

    __extension__ typedef __quad_t __off64_t;

    __extension__ typedef int __pid_t;

    __extension__ typedef struct { int __val[2]; } __fsid_t;

    __extension__ typedef long int __clock_t;

    __extension__ typedef unsigned long int __rlim_t;

    __extension__ typedef __u_quad_t __rlim64_t;

    __extension__ typedef unsigned int __id_t;

    __extension__ typedef long int __time_t;

    __extension__ typedef unsigned int __useconds_t;

    __extension__ typedef long int __suseconds_t;

    __extension__ typedef int __daddr_t;

    __extension__ typedef long int __swblk_t;

    __extension__ typedef int __key_t;

    __extension__ typedef int __clockid_t;

    __extension__ typedef void * __timer_t;

    __extension__ typedef long int __blksize_t;

    __extension__ typedef long int __blkcnt_t;

    __extension__ typedef __quad_t __blkcnt64_t;

    __extension__ typedef unsigned long int __fsblkcnt_t;

    __extension__ typedef __u_quad_t __fsblkcnt64_t;

    __extension__ typedef unsigned long int __fsfilcnt_t;

    __extension__ typedef __u_quad_t __fsfilcnt64_t;

    __extension__ typedef int __ssize_t;

    typedef __off64_t __loff_t;

    typedef __quad_t *__qaddr_t;

    typedef char *__caddr_t;

    __extension__ typedef int __intptr_t;

    __extension__ typedef unsigned int __socklen_t;

    # 37 "/usr/include/stdio.h" 2 3 4

    # 45 "/usr/include/stdio.h" 3 4

    struct _IO_FILE;

    typedef struct _IO_FILE FILE;

    # 65 "/usr/include/stdio.h" 3 4

    typedef struct _IO_FILE __FILE;

    # 75 "/usr/include/stdio.h" 3 4

    # 1 "/usr/include/libio.h" 1 3 4

    # 32 "/usr/include/libio.h" 3 4

    # 1 "/usr/include/_G_config.h" 1 3 4

    # 15 "/usr/include/_G_config.h" 3 4

    # 1 "/usr/lib/gcc/i686-redhat-linux/4.4.7/include/stddef.h" 1 3 4

    # 16 "/usr/include/_G_config.h" 2 3 4

    # 1 "/usr/include/wchar.h" 1 3 4

    # 83 "/usr/include/wchar.h" 3 4

    typedef struct

    {

    int __count;

    union

    {

    unsigned int __wch;

    char __wchb[4];

    } __value;

    } __mbstate_t;

    # 21 "/usr/include/_G_config.h" 2 3 4

    typedef struct

    {

    __off_t __pos;

    __mbstate_t __state;

    } _G_fpos_t;

    typedef struct

    {

    __off64_t __pos;

    __mbstate_t __state;

    } _G_fpos64_t;

    # 53 "/usr/include/_G_config.h" 3 4

    typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));

    typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));

    typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));

    typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));

    # 33 "/usr/include/libio.h" 2 3 4

    # 53 "/usr/include/libio.h" 3 4

    # 1 "/usr/lib/gcc/i686-redhat-linux/4.4.7/include/stdarg.h" 1 3 4

    # 40 "/usr/lib/gcc/i686-redhat-linux/4.4.7/include/stdarg.h" 3 4

    typedef __builtin_va_list __gnuc_va_list;

    # 54 "/usr/include/libio.h" 2 3 4

    # 170 "/usr/include/libio.h" 3 4

    struct _IO_jump_t; struct _IO_FILE;

    # 180 "/usr/include/libio.h" 3 4

    typedef void _IO_lock_t;

    struct _IO_marker {

    struct _IO_marker *_next;

    struct _IO_FILE *_sbuf;

    int _pos;

    # 203 "/usr/include/libio.h" 3 4

    };

    enum __codecvt_result

    {

    __codecvt_ok,

    __codecvt_partial,

    __codecvt_error,

    __codecvt_noconv

    };

    # 271 "/usr/include/libio.h" 3 4

    struct _IO_FILE {

    int _flags;

    char* _IO_read_ptr;

    char* _IO_read_end;

    char* _IO_read_base;

    char* _IO_write_base;

    char* _IO_write_ptr;

    char* _IO_write_end;

    char* _IO_buf_base;

    char* _IO_buf_end;

    char *_IO_save_base;

    char *_IO_backup_base;

    char *_IO_save_end;

    struct _IO_marker *_markers;

    struct _IO_FILE *_chain;

    int _fileno;

    int _flags2;

    __off_t _old_offset;

    unsigned short _cur_column;

    signed char _vtable_offset;

    char _shortbuf[1];

    _IO_lock_t *_lock;

    # 319 "/usr/include/libio.h" 3 4

    __off64_t _offset;

    # 328 "/usr/include/libio.h" 3 4

    void *__pad1;

    void *__pad2;

    void *__pad3;

    void *__pad4;

    size_t __pad5;

    int _mode;

    char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];

    };

    typedef struct _IO_FILE _IO_FILE;

    struct _IO_FILE_plus;

    extern struct _IO_FILE_plus _IO_2_1_stdin_;

    extern struct _IO_FILE_plus _IO_2_1_stdout_;

    extern struct _IO_FILE_plus _IO_2_1_stderr_;

    # 364 "/usr/include/libio.h" 3 4

    typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);

    typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,

    size_t __n);

    typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);

    typedef int __io_close_fn (void *__cookie);

    # 416 "/usr/include/libio.h" 3 4

    extern int __underflow (_IO_FILE *);

    extern int __uflow (_IO_FILE *);

    extern int __overflow (_IO_FILE *, int);

    # 460 "/usr/include/libio.h" 3 4

    extern int _IO_getc (_IO_FILE *__fp);

    extern int _IO_putc (int __c, _IO_FILE *__fp);

    extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__));

    extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__));

    extern int _IO_peekc_locked (_IO_FILE *__fp);

    extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__));

    extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__));

    extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__));

    # 490 "/usr/include/libio.h" 3 4

    extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,

    __gnuc_va_list, int *__restrict);

    extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,

    __gnuc_va_list);

    extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);

    extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);

    extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);

    extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);

    extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__));

    # 76 "/usr/include/stdio.h" 2 3 4

    typedef __gnuc_va_list va_list;

    # 91 "/usr/include/stdio.h" 3 4

    typedef __off_t off_t;

    # 103 "/usr/include/stdio.h" 3 4

    typedef __ssize_t ssize_t;

    typedef _G_fpos_t fpos_t;

    # 161 "/usr/include/stdio.h" 3 4

    # 1 "/usr/include/bits/stdio_lim.h" 1 3 4

    # 162 "/usr/include/stdio.h" 2 3 4

    extern struct _IO_FILE *stdin;

    extern struct _IO_FILE *stdout;

    extern struct _IO_FILE *stderr;

    extern int remove (__const char *__filename) __attribute__ ((__nothrow__));

    extern int rename (__const char *__old, __const char *__new) __attribute__ ((__nothrow__));

    extern int renameat (int __oldfd, __const char *__old, int __newfd,

    __const char *__new) __attribute__ ((__nothrow__));

    extern FILE *tmpfile (void) ;

    # 208 "/usr/include/stdio.h" 3 4

    extern char *tmpnam (char *__s) __attribute__ ((__nothrow__)) ;

    extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__)) ;

    # 226 "/usr/include/stdio.h" 3 4

    extern char *tempnam (__const char *__dir, __const char *__pfx)

    __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;

    extern int fclose (FILE *__stream);

    extern int fflush (FILE *__stream);

    # 251 "/usr/include/stdio.h" 3 4

    extern int fflush_unlocked (FILE *__stream);

    # 265 "/usr/include/stdio.h" 3 4

    extern FILE *fopen (__const char *__restrict __filename,

    __const char *__restrict __modes) ;

    extern FILE *freopen (__const char *__restrict __filename,

    __const char *__restrict __modes,

    FILE *__restrict __stream) ;

    # 294 "/usr/include/stdio.h" 3 4

    # 305 "/usr/include/stdio.h" 3 4

    extern FILE *fdopen (int __fd, __const char *__modes) __attribute__ ((__nothrow__)) ;

    # 318 "/usr/include/stdio.h" 3 4

    extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)

    __attribute__ ((__nothrow__)) ;

    extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__)) ;

    extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__));

    extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,

    int __modes, size_t __n) __attribute__ ((__nothrow__));

    extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,

    size_t __size) __attribute__ ((__nothrow__));

    extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__));

    extern int fprintf (FILE *__restrict __stream,

    __const char *__restrict __format, ...);

    extern int printf (__const char *__restrict __format, ...);

    extern int sprintf (char *__restrict __s,

    __const char *__restrict __format, ...) __attribute__ ((__nothrow__));

    extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,

    __gnuc_va_list __arg);

    extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);

    extern int vsprintf (char *__restrict __s, __const char *__restrict __format,

    __gnuc_va_list __arg) __attribute__ ((__nothrow__));

    extern int snprintf (char *__restrict __s, size_t __maxlen,

    __const char *__restrict __format, ...)

    __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));

    extern int vsnprintf (char *__restrict __s, size_t __maxlen,

    __const char *__restrict __format, __gnuc_va_list __arg)

    __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));

    # 416 "/usr/include/stdio.h" 3 4

    extern int vdprintf (int __fd, __const char *__restrict __fmt,

    __gnuc_va_list __arg)

    __attribute__ ((__format__ (__printf__, 2, 0)));

    extern int dprintf (int __fd, __const char *__restrict __fmt, ...)

    __attribute__ ((__format__ (__printf__, 2, 3)));

    extern int fscanf (FILE *__restrict __stream,

    __const char *__restrict __format, ...) ;

    extern int scanf (__const char *__restrict __format, ...) ;

    extern int sscanf (__const char *__restrict __s,

    __const char *__restrict __format, ...) __attribute__ ((__nothrow__));

    # 447 "/usr/include/stdio.h" 3 4

    extern int fscanf (FILE *__restrict __stream, __const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf")

    ;

    extern int scanf (__const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf")

    ;

    extern int sscanf (__const char *__restrict __s, __const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf")

    __attribute__ ((__nothrow__));

    # 467 "/usr/include/stdio.h" 3 4

    extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,

    __gnuc_va_list __arg)

    __attribute__ ((__format__ (__scanf__, 2, 0))) ;

    extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)

    __attribute__ ((__format__ (__scanf__, 1, 0))) ;

    extern int vsscanf (__const char *__restrict __s,

    __const char *__restrict __format, __gnuc_va_list __arg)

    __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__scanf__, 2, 0)));

    # 498 "/usr/include/stdio.h" 3 4

    extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")

    __attribute__ ((__format__ (__scanf__, 2, 0))) ;

    extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")

    __attribute__ ((__format__ (__scanf__, 1, 0))) ;

    extern int vsscanf (__const char *__restrict __s, __const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf")

    __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__scanf__, 2, 0)));

    # 526 "/usr/include/stdio.h" 3 4

    extern int fgetc (FILE *__stream);

    extern int getc (FILE *__stream);

    extern int getchar (void);

    # 554 "/usr/include/stdio.h" 3 4

    extern int getc_unlocked (FILE *__stream);

    extern int getchar_unlocked (void);

    # 565 "/usr/include/stdio.h" 3 4

    extern int fgetc_unlocked (FILE *__stream);

    extern int fputc (int __c, FILE *__stream);

    extern int putc (int __c, FILE *__stream);

    extern int putchar (int __c);

    # 598 "/usr/include/stdio.h" 3 4

    extern int fputc_unlocked (int __c, FILE *__stream);

    extern int putc_unlocked (int __c, FILE *__stream);

    extern int putchar_unlocked (int __c);

    extern int getw (FILE *__stream);

    extern int putw (int __w, FILE *__stream);

    extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)

    ;

    extern char *gets (char *__s) ;

    # 660 "/usr/include/stdio.h" 3 4

    extern __ssize_t __getdelim (char **__restrict __lineptr,

    size_t *__restrict __n, int __delimiter,

    FILE *__restrict __stream) ;

    extern __ssize_t getdelim (char **__restrict __lineptr,

    size_t *__restrict __n, int __delimiter,

    FILE *__restrict __stream) ;

    extern __ssize_t getline (char **__restrict __lineptr,

    size_t *__restrict __n,

    FILE *__restrict __stream) ;

    extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);

    extern int puts (__const char *__s);

    extern int ungetc (int __c, FILE *__stream);

    extern size_t fread (void *__restrict __ptr, size_t __size,

    size_t __n, FILE *__restrict __stream) ;

    extern size_t fwrite (__const void *__restrict __ptr, size_t __size,

    size_t __n, FILE *__restrict __s) ;

    # 732 "/usr/include/stdio.h" 3 4

    extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,

    size_t __n, FILE *__restrict __stream) ;

    extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,

    size_t __n, FILE *__restrict __stream) ;

    extern int fseek (FILE *__stream, long int __off, int __whence);

    extern long int ftell (FILE *__stream) ;

    extern void rewind (FILE *__stream);

    # 768 "/usr/include/stdio.h" 3 4

    extern int fseeko (FILE *__stream, __off_t __off, int __whence);

    extern __off_t ftello (FILE *__stream) ;

    # 787 "/usr/include/stdio.h" 3 4

    extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);

    extern int fsetpos (FILE *__stream, __const fpos_t *__pos);

    # 810 "/usr/include/stdio.h" 3 4

    # 819 "/usr/include/stdio.h" 3 4

    extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__));

    extern int feof (FILE *__stream) __attribute__ ((__nothrow__)) ;

    extern int ferror (FILE *__stream) __attribute__ ((__nothrow__)) ;

    extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__));

    extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;

    extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;

    extern void perror (__const char *__s);

    # 1 "/usr/include/bits/sys_errlist.h" 1 3 4

    # 27 "/usr/include/bits/sys_errlist.h" 3 4

    extern int sys_nerr;

    extern __const char *__const sys_errlist[];

    # 849 "/usr/include/stdio.h" 2 3 4

    extern int fileno (FILE *__stream) __attribute__ ((__nothrow__)) ;

    extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;

    # 868 "/usr/include/stdio.h" 3 4

    extern FILE *popen (__const char *__command, __const char *__modes) ;

    extern int pclose (FILE *__stream);

    extern char *ctermid (char *__s) __attribute__ ((__nothrow__));

    # 908 "/usr/include/stdio.h" 3 4

    extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__));

    extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__)) ;

    extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));

    # 938 "/usr/include/stdio.h" 3 4

    # 2 "hello.c" 2

    int main(void)

    {

    printf("Hello forfish! ");

    return 0;

    }

    2.编译生成汇编文件hello.s:

    Hello.s 的内容:

        .file    "hello.c"

        .section    .rodata

    .LC0:

        .string    "Hello forfish!"

        .text

    .globl main

        .type    main, @function

    main:

        pushl    %ebp

        movl    %esp, %ebp

        andl    $-16, %esp

        subl    $16, %esp

        movl    $.LC0, (%esp)

        call    puts

        movl    $0, %eax

        leave

        ret

        .size    main, .-main

        .ident    "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)"

        .section    .note.GNU-stack,"",@progbits

    3.汇编:

    打开看不见代码,因为是2进制文件。

    4.链接运行:

    2.1 gcc编译流程

    Gcc通过后缀来区别输入文件的类别,常见类型有:

    v .c为后缀的文件: C语言源代码文件

    v .a为后缀的文件: 是由目标文件构成的库文件

    v .C,.cc或.cxx 为后缀的文件: 是C++源代码文件

    v .h为后缀的文件: 头文件

    v .o为后缀的文件: 是编译后的目标文件

    v .s为后缀的文件: 是汇编语言源代码文件

    2.2 gcc编译选项

    掌握Gcc的使用方法,最重要的是掌握Gcc的编译选项,Gcc编译器的编译选项大约有100多个,其中多数我们根本就用不到,这里只介绍其中最基本、最常用的参数。

    -o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

    -O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。

    -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。

    实例:

    #include <stdio.h>

    int main(void){

        double counter;

        double result;

        double temp;

        for(counter = 0; counter< 2000.0*2000.0*2000.0 / 20.0 + 2020;

                counter += (5-1)/4){

            temp = counter/1979;

            result = counter;

        }

        printf("Result is %lf ",result);

        return 0;

    }

    在上面的程序中result是没有用到的变量,该程序优化与否的时间差:

    -c:条件是不链接。编译器只是由输入的.c等源代码文件编译生成.o为后缀的中间文件。

    -g:条件是产生调试工具(GNU的gdb)所需要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。

    加上-g的调试信息与否的文件大小:

    -I dirname:将dirname所指向的目录作为编译器寻找头文件的标准路径。

    C程序中的头文件包含两种情况:

    #include <a.h>

    #include "b.h"

    对于<>,gcc在系统预设的头文件目录/usr/include中寻找相应的文件;而对于"",gcc在当前目录中搜索头文件。-I选项的作用是告诉gcc,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。

    例如:gcc hello.c –I /home/include –o hello

    编译错误与编译警告都是我们的程序设计中经常遇到的问题。编译错误一般是代码中出现语法错误,程序无法编译执行,必须修改。编译错误是编译器发现程序中不合理地方(比如类型不匹配),建议最后修改,但不修改也可以编译执行。

    -Wall:生成所有警告信息

    -w:不生成任何警告信息。

    -Dmydefi:定义mydefi宏,等效于在程序中使用#define mydefi.

    如果在文件里没有定义需要的宏,可以在编译的时候用-D参数指定宏:

  • 相关阅读:
    python并发编程之多线程
    python并发之多线程
    线程理论知识
    Android ViewPager
    Fragment和activity之间的通信
    Android AsyncTask
    Android四大组件
    Android 数据存储
    Android BaseAdapter
    Android Fragment
  • 原文地址:https://www.cnblogs.com/FORFISH/p/5188600.html
Copyright © 2011-2022 走看看