课后的几个问题:

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

会有什么问题?

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

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

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

"Blunder??!??"

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

$cc main.c

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

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

                     ^

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::: warning: unused variable 'i' [-Wunused-variable]
int i; /* loop counter */
^
main.c::: warning: trigraph ignored [-Wtrigraphs]
printf("\"Blunder??!??\"\n");
^
main.c::: warning: unused variable 'xy' [-Wunused-variable]
int xy;
^
warnings generated.

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

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

$clang -E main.c > main.i

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

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

$clang -S main.c > main.s

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

此外还有一些编译选项:

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 开启编译时的宏.

C和C指针小记(二)-注释,三字母词,编译选项的更多相关文章

  1. C语言中的三字母词

    C语言中的三字母词(trigraph) 在ANSI C标准中,定义了9个三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符.三字母词使C语言环境可以在缺少一些必需字符的字符 ...

  2. C和C指针小记(三)-整型,char,枚举

    1.C语言基本数据类型-整型 仅有4中机泵数据类型:整型,浮点型,指针,聚合类型(数组和结构) 整型家族:字符,短整型,整型,长整型.(都分有符号[singed]和无符号[unsinged]) 短整型 ...

  3. C和C指针小记(一)-字符输入,函数,ASCII扩展表

    1.连续接收输入字符时 int ch; while(ch != EOF && ch != '\n') ch 为什么被声明为整形,我们不是需要用它来读取字符的嘛? 因为:EOF是一个整形 ...

  4. redis环境搭建及一主二从三哨兵模式配置

    一.单机redis环境搭建 1.安装: OS:linux redhat6.5 下载redis 官网下载链接:https://redis.io/download 把安装包上传到服务器,进行解压 [roo ...

  5. [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台

    本文转自:http://www.jpsycn.com/hangyexinwen/20160801142354.html “十三五”规划提出,充分运用现代信息技术和大数据,建设一批新型示范性智慧城市.日 ...

  6. 合工大OJ 1337 一加二减三

    Description 题目描述:给一个串,形如一+二-三,求值 Input 第一行为一个正整数T,表示数据的组数,接下来有T行每行都是一个形如一+二-三的串,一,二,三均为正整数 Output 对于 ...

  7. 继承ViewGroup研究(汇总) 一、二、三

    转载过来:为一.二.三版本. 仅供参考: 继承ViewGroup研究(1) --简介和一个小Demo 又翻开一个新篇章了,哈哈,上一回学习的是继承View,关于继承View个人感觉不是那么完美,做技术 ...

  8. 深入理解C指针之二:C内存管理

    原文:深入理解C指针之二:C内存管理 内存管理对所有程序来说都很重要.有时候内存由运行时系统隐式的管理,比如为变量自动分配内存.在这种情况下,变量分配在它所处的函数的栈帧上(每个函数都有它自己的栈帧, ...

  9. C:指针遍历二维数组

    C 指针遍历二维数组 http://blog.csdn.net/lcxandsfy/article/details/55000033 C++ 字符串指针与字符串数组 https://www.cnblo ...

随机推荐

  1. 1 翻译系列:什么是Code First(EF 6 Code First 系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/what-is-code-first.aspx EF 6 Code-First系列文章目录 ...

  2. elasticsearch 忽略大小写模糊搜索实现(转)

    在es查询时不区分大小写,可以让查询更方便,具体设置如下: { "settings": { "analysis": { "analyzer" ...

  3. Disruptor学习笔记

    前言 以前一直听说有Disruptor这个东西,都说性能很强大,所以这几天自己也看了一下. 下面是自己的学习笔记,另外推荐几篇自己看到写的比较好的博客: Disruptor——一种可替代有界队列完成并 ...

  4. Communications link failure due to underlying exception异常处理(转)

    最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql.开发测试没有问题,在运行中每个一段长的空闲时间就出现异常: java 代码 org.hibernate.exception. ...

  5. spring boot user authorities类图

  6. linux 重启和关机

    重启命令有:reboot,  shutdown -ry 0关机命令有:poweroff, shutdown -hy 0

  7. sql操作总结

    SQL 语句的多表查询方式例如:按照 department_id 查询 employees(员工表)和 departments(部门表)的信息.方式一(通用型):SELECT ... FROM ... ...

  8. java 实现websocket

    最近了解了下websocket和socket这个东西,说不得不来说下为何要使用 WebSocket ,和为何不用http. 为何需要WebSocket ? HTTP 协议是一种无状态的.无连接的.单向 ...

  9. 【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入

    实验现象: iCore1s 双核心板上与FPGA相连的三色LED(PCB上标示为FPGA·LED),按键按下红灯点亮,松开按键红灯熄灭. 核心源代码: module KEY( input CLK_12 ...

  10. mac上Python多版本共存(python2.7.10和python3.5.0)

    本文的实现目标是在mac上安装一个python3.5.0的版本,跟当前系统自带的python2.7.10共存. 查看当前版本号 python -V 2.7.10 安装配置Python版本管理器pyen ...