课后的几个问题:

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. 《网络编程》IPv4 与 IPv6 相互操作

    前言 因为互联网终端不断添加.IPv4 地址长度(32位)已不可以满足要求.所以出现了 IPv6地址(128位).可是现有应用程序大部分还是採用 IPv4 地址形式,所以必须解决 IPv4 与 IPv ...

  2. Socket网络编程--简单Web服务器(4)

    上一小节已经实现了对图片的传输,接下来就是判断文件是否为js,css,png等格式.我们增加一个函数用于判断格式 int WebServer::get_filetype(char *type,char ...

  3. 【Big Data - Hadoop - MapReduce】初学Hadoop之图解MapReduce与WordCount示例分析

    Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...

  4. [Big Data - Kafka] Kafka设计解析(三):Kafka High Availability (下)

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  5. 【MQTT】Mosquitto的安装与使用流水记

    最近使用MQTT,安装Mosquitto试一下,并记录下来. 软件准备 从官网获取安装包: wget http://mosquitto.org/files/source/mosquitto-1.4.1 ...

  6. 解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o...

    解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o... ...

  7. Java知多少(45)未被捕获的异常

    在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public static void ma ...

  8. 【转帖】Mysql多维数据仓库指南 第一篇 第1章

     Mysql多维数据仓库指南 第一篇基本原理 章节列表: 第1章:基本组成 第2章:维度历史 第3章:维度可加性 第4章:维度查询 本篇概述 你将运用关系数据库来实施一个维度数据仓库.事实表和维表这两 ...

  9. Java Socket 死循环while如何判断客户端断开

    多线程的服务器程序 线程中等待客户端的消息    我的代码能实现服务器与客户端的通信    问题是: 当客户端中断或退出  以上代码却不能判断Socket中断 跳不出while的无限循环 解决方法: ...

  10. Android图片处理(Matrix,ColorMatrix)

    转发说明:原文链接http://www.cnblogs.com/leon19870907/articles/1978065.html 在编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老 ...