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??!??\"\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指针小记(二)-注释,三字母词,编译选项的更多相关文章
- C语言中的三字母词
C语言中的三字母词(trigraph) 在ANSI C标准中,定义了9个三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符.三字母词使C语言环境可以在缺少一些必需字符的字符 ...
- C和C指针小记(三)-整型,char,枚举
1.C语言基本数据类型-整型 仅有4中机泵数据类型:整型,浮点型,指针,聚合类型(数组和结构) 整型家族:字符,短整型,整型,长整型.(都分有符号[singed]和无符号[unsinged]) 短整型 ...
- C和C指针小记(一)-字符输入,函数,ASCII扩展表
1.连续接收输入字符时 int ch; while(ch != EOF && ch != '\n') ch 为什么被声明为整形,我们不是需要用它来读取字符的嘛? 因为:EOF是一个整形 ...
- redis环境搭建及一主二从三哨兵模式配置
一.单机redis环境搭建 1.安装: OS:linux redhat6.5 下载redis 官网下载链接:https://redis.io/download 把安装包上传到服务器,进行解压 [roo ...
- [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台
本文转自:http://www.jpsycn.com/hangyexinwen/20160801142354.html “十三五”规划提出,充分运用现代信息技术和大数据,建设一批新型示范性智慧城市.日 ...
- 合工大OJ 1337 一加二减三
Description 题目描述:给一个串,形如一+二-三,求值 Input 第一行为一个正整数T,表示数据的组数,接下来有T行每行都是一个形如一+二-三的串,一,二,三均为正整数 Output 对于 ...
- 继承ViewGroup研究(汇总) 一、二、三
转载过来:为一.二.三版本. 仅供参考: 继承ViewGroup研究(1) --简介和一个小Demo 又翻开一个新篇章了,哈哈,上一回学习的是继承View,关于继承View个人感觉不是那么完美,做技术 ...
- 深入理解C指针之二:C内存管理
原文:深入理解C指针之二:C内存管理 内存管理对所有程序来说都很重要.有时候内存由运行时系统隐式的管理,比如为变量自动分配内存.在这种情况下,变量分配在它所处的函数的栈帧上(每个函数都有它自己的栈帧, ...
- C:指针遍历二维数组
C 指针遍历二维数组 http://blog.csdn.net/lcxandsfy/article/details/55000033 C++ 字符串指针与字符串数组 https://www.cnblo ...
随机推荐
- 小型IT部门建设之我见
关于IT团队建设,一般的原则是四大块组成: 1:业务分析师,对接业务部门,把业务需求转变成技术需求 专注于BRS( Business Requirement Speci ...
- R绘制3D散点图
目前主要使用ggplot2做一些数据可视化的分析,但是ggplot2有个很大的缺陷是不支持3D作图,所以需要查找其他替代方案. 下面找到的两个替代方案不错,亲测可行,记录于此. 交互3D librar ...
- android 推流解决方案
.LocalSocket + MediaRecorder + librtmp
- FFmpeg: AVPacket 结构体分析
AVPacket是FFmpeg中很重要的一个数据结构,它保存了解封装之后,解码之前的数据(注意:仍然是压缩后的数据)和关于这些数据的一些附加信息,如显示时间戳(pts).解码时间戳(dts).数据时长 ...
- Java编程的逻辑 (83) - 并发总结
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- python : 将txt文件中的数据读为numpy数组或列表
很多时候,我们将数据存在txt或者csv格式的文件里,最后再用python读取出来,存到数组或者列表里,再做相应计算.本文首先介绍写入txt的方法,再根据不同的需求(存为数组还是list),介绍从tx ...
- 【转】WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等 本文主要内容: CheckBox复选框的自定义样式,有两种不同的风格实现: RadioB ...
- (笔记)AT91SAM9260的启动过程详细解说
Bootstrap的启动过程 一. 说明: Bootstrap启动代码是官方提供的一级启动代码,包括汇编和C语言两部分组成.对AT91SAM9260来说编译完成后,代码长度必须小于4KB,烧写到dat ...
- MySQL常见错误码及说明
1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败<=================可以忽略1008:数据库不存在,删除数据库失败<=========== ...
- 06建造者模式Builder
一.什么是建造者模式 Builder模式也叫建造者模式或者生成器模式, 是由GoF提出的23种设计模式中的一种. Builder模式是一种对象创建型模式之一,用来 隐藏复合对象的创建过程,它把复合对象 ...