课后的几个问题:

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. node.js中的框架

    node.js中的框架 载自: http://nodeframework.com/ MVC frameworks Sinatra-like These frameworks offer rich co ...

  2. SNF开发平台WinForm-Grid表格控件大全

    我们在开发系统时,会有很多种控件进行展示,甚至有一些为了方便的一些特殊需求. 那么下面就介绍一些我们在表格控件里常用的方便的控件:   1.Grid表格查询条 Grid表格下拉 3.Grid表格弹框选 ...

  3. Winform开发框架之通用Windows摄像头调用拍照--SNF快速开发平台3.3-Spring.Net.Framework

    今天做了一个windows系统下调用摄像头.进行开启.关闭.拍照.设置等等功能演示. 进行源码贡献,欢迎大家下载使用 一.DEMO效果如下: 二.DEMO演示代码如下: using SNF.Utili ...

  4. linux每日命令(23):find命令之xargs

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...

  5. ElasticSearch 内存那点事【转】

    “该给ES分配多少内存?” “JVM参数如何优化?““为何我的Heap占用这么高?”“为何经常有某个field的数据量超出内存限制的异常?““为何感觉上没多少数据,也会经常Out Of Memory? ...

  6. 模仿jQuery的ajax的封装

    /* * 我们使用了ajax 的xmlHttpRequest 跟服务器进行交互. * * 交互了有四个基本步骤 * 1:创建对象 * 2:建立连接 * 3:发送请求 * 4:接收数据 * * 这些操作 ...

  7. django DateTimeField 时间格式化

    ['%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' '%Y-%m-%d %H:%M', # '2006-10-25 14:30' '%Y-%m-%d', # ' ...

  8. 常用curl测试命令

    1.curl 基础用法 2.curl 常用 3.curl 拓展 1.curl基础用法 语法:# curl [option] [url] curl除了用以请求数据,还可以用来上传下载 -A/--user ...

  9. 聊聊Python中的闭包和装饰器

    1. 闭包 首先我们明确一下函数的引用,如下所示: def test1(): print("--- in test1 func----") # 调用函数 test1() # 引用函 ...

  10. Java知多少(25)再谈Java包

    在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...