zoukankan      html  css  js  c++  java
  • C和C指针小记(二)-注释,三字母词,编译选项

    课后的几个问题:

    1) int x/*blah blah*/y;

    会有什么问题?

    答:编译器报错,语句中不应该有多行注释

    单行注释也应该放到语句后面或者独自占一行.

    2)打出下面一行字符串(包括引号)会出现什么问题.

    "Blunder??!??"

    答:在Xcode中不会出现问题.但是由于三字母词(trigrph)标准的存在.如果直接用编译命令 cc 则会出现以下警告:

    $cc main.c

    main.c:21:22: warning: trigraph ignored [-Wtrigraphs]

        printf(""Blunder??!??" ");

                         ^

    1 warning generated.

     

    编译器提示我们用忽略三字母词命令.

    3、其他编译相关:

    1)使用 gcc clang 会有同样的提示.因为三字母词(trigrph)是C的一个标准.

    2)使用命令 $gcc main.c 会有一个 a.out 的可执行文件生成.和在Xcode 的控制台输出是一样的.

    3)使用命令 $clang -o demo main.c 的话给可执行文件一个指定的名字demo.

    4)使用 -Wall 编译选项 打印编译过程中的所有警告信息 编译选项区分大小写(-Wall 不能是 -wall)

    $ cc -Wall -o demo main.c
    main.c:12:9: warning: unused variable 'i' [-Wunused-variable]
        int i; /* loop counter */
            ^
    main.c:21:22: warning: trigraph ignored [-Wtrigraphs]
        printf(""Blunder??!??"
    ");
                         ^
    main.c:22:9: warning: unused variable 'xy' [-Wunused-variable]
        int xy;
            ^
    3 warnings generated.

    5)使用-E 编译选项 只输出预编译结果 编译选项区分大小写(-E 不能是 -e)

    源文件同步目录下会生成一个 demo 的文本文件

    $clang -E main.c > main.i

    # 1 "main.c"
    # 1 "<built-in>" 1
    # 1 "<built-in>" 3
    # 361 "<built-in>" 3
    # 1 "<command line>" 1
    # 1 "<built-in>" 2
    # 1 "main.c" 2
    .....

    6)使用 -S 编译选项 输出汇编代码

    $clang -S main.c > main.s

        .section    __TEXT,__text,regular,pure_instructions
        .build_version macos, 10, 14
        .globl    _squares                ## -- Begin function squares
        .p2align    4, 0x90
    _squares:                               ## @squares
        .cfi_startproc
    ## %bb.0:
        pushq    %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset %rbp, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
        movl    %edi, -4(%rbp)
        popq    %rbp
        retq
        .cfi_endproc
                                            ## -- End function
        .globl    _main                   ## -- Begin function main
        .p2align    4, 0x90
    _main:                                  ## @main
        .cfi_startproc
    ## %bb.0:
        pushq    %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset %rbp, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
        subq    $32, %rsp
        leaq    L_.str(%rip), %rax
        movl    $0, -4(%rbp)
        movl    %edi, -8(%rbp)
        movq    %rsi, -16(%rbp)
        movq    %rax, %rdi
        movb    $0, %al
        callq    _printf
        xorl    %ecx, %ecx
        movl    %eax, -24(%rbp)         ## 4-byte Spill
        movl    %ecx, %eax
        addq    $32, %rsp
        popq    %rbp
        retq
        .cfi_endproc
                                            ## -- End function
        .section    __TEXT,__cstring,cstring_literals
    L_.str:                                 ## @.str
        .asciz    ""Blunder??!??"
    "
    
    
    .subsections_via_symbols
    View Code

    此外还有一些编译选项:

    7)使用 -save-temps 编译选项 输出所有中间代码

    $clang -save-temps main.c

    同级目录下会出现:
    a.out

    main.bc

    main.i

    main.o

    main.s

    8)使用 -l 编译选项 链接共享库 

    #clang -Wall main.c -o main -lFileName

    9)使用 -fPIC 编译选项 创建独立的(无关联的)地址信息代码

    能够快速的定位错误地址.尤其是使用动态链接库时.

    $clang -c -Wall -Werror -fPIC Cfile.c

    10)-v

    11)-ansi 支持ISO C89 programs

    12)-funsigned-char 选项将char类型解释为 unsigned char  类型.

    13)-fsigned-char 将unsigned char类型解释为char 类型.

    14)-D 开启编译时的宏.

     

     

     

       

  • 相关阅读:
    关于时间的一些总结和全屏的一个知识点和百度的一道算法题
    关于超高频的一些研究
    Windows程序设计小结1
    windows系统Java环境配置
    第六章 事务与并发控制
    第五章 存储过程&触发器
    第四章 T-SQL编程
    第三章 数据库查询
    第二章 表的操作
    第一章 数据库的创建
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/10369975.html
Copyright © 2011-2022 走看看