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 ...
随机推荐
- 开源中文分词工具探析(六):Stanford CoreNLP
CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...
- Spark 核心篇-SparkContext
本章内容: 1.功能描述 本篇文章就要根据源码分析SparkContext所做的一些事情,用过Spark的开发者都知道SparkContext是编写Spark程序用到的第一个类,足以说明SparkCo ...
- android源码 键盘消息处理机制
键盘消息处理模型: .WMS统一管理Window, 它包含了InputManager变量,其对应c++层的NativeInputManager2.c++层的NativeInputManager包含 i ...
- JAVA 线程池架构浅析
经历了Java内存模型.JUC基础之AQS.CAS.Lock.并发工具类.并发容器.阻塞队列.atomic类后,我们开始JUC的最后一部分:线程池.在这个部分你将了解到下面几个部分: 线程池的基础架构 ...
- pandas DataFrame(4)-向量化运算
pandas DataFrame进行向量化运算时,是根据行和列的索引值进行计算的,而不是行和列的位置: 1. 行和列索引一致: import pandas as pd df1 = pd.DataFra ...
- [转]devm_gpiod_get_optional用法
https://blog.csdn.net/kris_fei/article/details/78932904
- Java知多少(101)图像缓冲技术
当图像信息量较大,采用以上直接显示的方法,可能前面一部分显示后,显示后面一部分时,由于后面一部分还未从文件读出,使显示呈斑驳现象.为了提高显示效果,许多应用程序都采用图像缓冲技术,即先把图像完整装入内 ...
- 【转】HTML embed标签使用方法和属性详解
一.基本语法 代码如下: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,Netscape及新版的IE 都支持.url为音 ...
- expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行命令
自动同步文件 #!/usr/bin/expect set " spawn rsync -av root@.txt /tmp/ expect { "yes/no" { se ...
- [Object Tracking] Overview of algorithms for Object Tracking
From: https://www.zhihu.com/question/26493945 可以载入史册的知乎贴 目标跟踪之NIUBILITY的相关滤波 - 专注于分享目标跟踪中非常高效快速的相关滤波 ...