g++编译命令大全

2023-05-16

gcc & g++现在是gnu中最主要和最流行的c & c++编译器 。
g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c。这时候命令换做gcc即可。其实是无关紧要的。
其实编译器是根据gcc还是g++来确定是按照C标准还是C++标准编译链接。


下面以Test.cpp为例:

命令: g++ Test.cpp
功能:生成默认为a.exe的文件,这个过程包含了编译和链接。
再说下-o命令,-o命令表示输出的意思,gcc/g++命令是非常灵活的,你不指定输出的文件名的时候默认生成的是.exe文件。
你要输出Test.exe的话可以用:g++ -o Test.exe Test.cpp。-o命令是输出的意思,这样就输出了Test.exe。

gcc/g++在执行编译工作的时候,总共需要以下几步:

[cpp]  view plain copy
  1. /************************* 
  2.         Test.cpp 
  3.     *************************/  
  4.     #include <IOSTREAM>  
  5.   
  6.     static int t = 1;  
  7.     #define T 9  
  8.   
  9.     using namespace std;  
  10.   
  11.     typedef int Status;  
  12.   
  13.     int main()  
  14.     {  
  15.         Status i = 1;  
  16.         cout << T * i << endl; //Test Cout  
  17.         return 0;  
  18.     }  

1.预处理,生成.i的文件[预处理器cpp]

命令:g++ -E Test.cpp > Test.i 

功能:输出预处理后的文件,linux下以.i为后缀名。只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 。这一步主要做了这些事情:宏的替换,还有注释的消除,还有找到相关的库文件。用编辑器打开Test.i会发现有很多很多代码,你只需要看最后部分就会发现,预处理做了宏的替换,还有注释的消除,可以理解为无关代码的清除。下面是Test.i文件的最后部分,可以看见宏的替换和注释的消除。

[cpp]  view plain copy
  1. # 5 "Test.cpp" 2  
  2.   
  3. static int t = 1;  
  4.   
  5. using namespace std;  
  6.   
  7. typedef int Status;  
  8.   
  9. int main()  
  10. {  
  11.  Status i = 1;  
  12.  cout << 9 * i << endl;  
  13.  return 0;  
  14. }  



2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]

命令:g++ -S Test.cpp
功能:会生成Test.s文件,.s文件表示是汇编文件,用编辑器打开就都是汇编指令。

3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

命令:g++ -c Test.cpp 
功能:.o是GCC生成的目标文件,除非你是做编译器和连接器调试开发的,否则打开这种.o没有任何意义。二进制机器码一般人也读不了。

4.连接目标代码,生成可执行程序[链接器ld]

命令:g++ Test.o -L F:\vs2008\VC\include\iostream
功能:将.o文件与所需的库文件链接整合形成.exe文件,这就是可执行文件。-L 表示链接,这里我后面写的是绝对路径,相对各人电脑不同


在上面各个步骤中你可以用-o命令输出你自己想要的各种名字。比如最后一个命令,用下面的输出Test.exe
你可以g++ Test.o -o Test.exe -L F:\vs2008\VC\include\iostream


====================================================================================================

gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步

1.预处理,生成.i的文件[预处理器cpp]

2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]

3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

4.连接目标代码,生成可执行程序[链接器ld]

[参数详解]

-x language filename

 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。

  可以使用的参数吗有下面的这些

  `c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp'.

  看到英文,应该可以理解的。

  例子用法:

  gcc -x c hello.pig

  

-x none filename

  关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型

  例子用法:

  gcc -x c hello.pig -x none hello2.c

  

-c

  只激活预处理,编译,和汇编,也就是他只把程序做成obj文件

  例子用法:

  gcc -c hello.c

  他将生成.o的obj文件

-S

  只激活预处理和编译,就是指把文件编译成为汇编代码。

  例子用法

  gcc -S hello.c

  他将生成.s的汇编代码,你可以用文本编辑器察看

-E

  只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.

  例子用法:

  gcc -E hello.c > pianoapan.txt

  gcc -E hello.c | more

  慢慢看吧,一个hello word 也要与处理成800行的代码

-o

  制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它,哈哈

  例子用法

  gcc -o hello.exe hello.c (哦,windows用习惯了)

  gcc -o hello.asm -S hello.c

-pipe

  使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题

  gcc -pipe -o hello.exe hello.c

-ansi

  关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏,

-fno-asm

  此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。     

-fno-strict-prototype

  只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.

  而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型

  

-fthis-is-varialble

  就是向传统c++看齐,可以使用this当一般变量使用.

  

-fcond-mismatch

  允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型

  

-funsigned-char

-fno-signed-char

-fsigned-char

-fno-unsigned-char

  这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参数)或者 signed char(后两个参数)

  

-include file

  包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include<filename>

  例子用法:

  gcc hello.c -include /root/pianopan.h

  

-imacros file

  将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中

  

-Dmacro

  相当于C语言中的#define macro

  

-Dmacro=defn

  相当于C语言中的#define macro=defn

  

-Umacro

  相当于C语言中的#undef macro

-undef

  取消对任何非标准宏的定义

  

-Idir

  在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他

  回先在你所制定的目录查找,然后再按常规的顺序去找.

  对于#include<file>,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找

  

-I-

  就是取消前一个参数的功能,所以一般在-Idir之后使用

  

-idirafter dir

  在-I的目录里面查找失败,讲到这个目录里面查找.

  

-iprefix prefix

-iwithprefix dir

  一般一起使用,当-I的目录查找失败,会到prefix+dir下查找

  

-nostdinc

  使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置

  

-nostdin C++

  规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg++库使用

  

-C

  在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的

  

-M

  生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。

  

-MM

  和上面的那个一样,但是它将忽略由#include<file>造成的依赖关系。

  

-MD

  和-M相同,但是输出将导入到.d的文件里面

  

-MMD

  和-MM相同,但是输出将导入到.d的文件里面

  

-Wa,option

  此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序

  

-Wl.option

  此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.

  

-llibrary

  制定编译的时候使用的库

  例子用法

  gcc -lcurses hello.c

  使用ncurses库编译程序

  

-Ldir

  制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然

  编译器将只在标准库的目录找。这个dir就是目录的名称。

  

-O0

-O1

-O2

-O3

  编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高     

-g

  只是编译器,在编译的时候,产生调试信息。

  

-gstabs

  此选项以stabs格式声称调试信息,但是不包括gdb调试信息.

  

-gstabs+

  此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.

  

-ggdb

  此选项将尽可能的生成gdb的可以使用的调试信息.

-static

  此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么

动态连接库,就可以运行.

-share

  此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-traditional

  试图让编译器支持传统的C语言特性

[参考资料]

-Linux/UNIX高级编程

  中科红旗软件技术有限公司编著.清华大学出版社出版

-Gcc man page

  

[ChangeLog]

-2002-08-10

  ver 0.1 发布最初的文档

-2002-08-11

  ver 0.11 修改文档格式

-2002-08-12

  ver 0.12 加入了对静态库,动态库的参数

-2002-08-16

  ver 0.16 增加了gcc编译的4个阶段的命令

运行 gcc/egcs

**********运行 gcc/egcs***********************

  GCC 是 GNU 的 C 和 C++ 编译器。实际上,GCC 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。

  如果你有两个或少数几个 C 源文件,也可以方便地利用 GCC 编译、连接并生成可执行文件。例如,假设你有两个源文件 main.c 和 factorial.c 两个源文件,现在要编译生成一个计算阶乘的程序。

代码:

-----------------------

清单 factorial.c

-----------------------

int factorial (int n)

{

  if (n <= 1)

   return 1;

  else

   return factorial (n - 1) * n;

}

-----------------------

清单 main.c

-----------------------

#include <stdio.h>

#include <unistd.h>

int factorial (int n);

int main (int argc, char **argv)

{

  int n;

  if (argc < 2)

  {

    printf ("Usage: %s n\n", argv [0]);

    return -1;

  }

  else

  {

   n = atoi (argv[1]);

   printf ("Factorial of %d is %d.\n", n, factorial (n));

   }

  return 0;

}

-----------------------

利用如下的命令可编译生成可执行文件,并执行程序:

$ gcc -o factorial main.c factorial.c

$ ./factorial 5

Factorial of 5 is 120.

  GCC 可同时用来编译 C 程序和 C++ 程序。一般来说,C 编译器通过源文件的后缀名来判断是 C 程序还是 C++ 程序。在 Linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。但是,gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。假设我们有一个如下的 C++ 源文件(hello.C):

#include <iostream>

void main (void)

{

  cout << "Hello, world!" << endl;

}

则可以如下调用 g++ 命令编译、连接并生成可执行文件:

$ g++ -o hello hello.C

$ ./hello

Hello, world!

**********************gcc/egcs 的主要选项*********

gcc 命令的常用选项

选项 解释

-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,

例如 asm 或 typeof 关键词。

-c 只编译并生成目标文件。

-DMACRO 以字符串“1”定义 MACRO 宏。

-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。

-E 只运行 C 预编译器。

-g 生成调试信息。GNU 调试器可利用该信息。

-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。

-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。

-lLIBRARY 连接时搜索指定的函数库LIBRARY。

-m486 针对 486 进行代码优化。

-o FILE 生成指定的输出文件。用在生成可执行文件时。

-O0 不进行优化处理。

-O 或 -O1 优化生成代码。

-O2 进一步优化。

-O3 比 -O2 更进一步优化,包括 inline 函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

g++编译命令大全 的相关文章

  • React系列--JSX到底是什么东西

    JSX 简介 JSX的全称是 Javascript and XML xff0c React发明了JSX xff0c 它是一种可以在JS中编写XML的语言 JSX更像一种模板 xff0c 类似于Vue中的 template 为什么使用JSX
  • https请求+basic认证

    目录 1 工具类 SSLClient 2 工具类HttpsClientUtil 3 使用 1 工具类 SSLClient 此类可绕过https证书 import org apache http conn ClientConnectionMa
  • 自旋锁的原理及使用

    什么是自旋锁 是指当一个线程在获取锁的时候 xff0c 如果锁已经被其它线程获取 xff0c 那么该线程将循环等待 xff0c 然后不断的判断锁是否能够被成功获取 xff0c 直到获取到锁才会退出循环 获取锁的线程一直处于活跃状态 xff0
  • 实验11 多线程

    1 设有一个银行账户 xff0c 里面有2000元钱 该账户归tom和jack两个人共同所有 每个人每 次可以取100元钱 编写一个类BankAccount表示银行账户 xff0c void withdraw int count 方法表 示
  • stm32 esp8266 ota升级-自建mqtt和文件服务器全量升级

    stm32 esp8266 ota系列文章 xff1a stm32 esp8266 ota 快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级 tcp模拟http stm32 esp8266 o
  • rk1126开发板开发记录—SDK环境准备和系统烧录

    序言 最近在弄rk系列的开发板 xff0c 手上正好有一台rk1126的板子 xff0c 因为之前很少接触到嵌入式的东西 xff0c 所以在模型部署的同时遇到了很多坑 xff0c 在此期间也有很多收获 xff0c 习惯性的用文章记录一下开发
  • linux 应用层串口调试函数

    tcgetattr函数与tcsetattr函数 xff08 获取终端信息 xff09 波特率的设置通常使用cfsetospeed和cfsetispeed函数来完成
  • 安装MySQl 8.0遇到的问题及解决方法

    一 官网下载最新版本mysql xff0c 安装完成后 xff0c 安装SQLyog 二 在 C Program Files MySQL MySQL Server 8 0目录中查找是否存在 my ini文件 xff0c 如不存在 xff0c
  • Cmakelists.txt添加.h和.cpp文件

    文件目录结构是这样 代码都是最基本的代码 仅仅是个小的demo cmakelists txt里面的内容 span class token comment cmake的版本要求 span cmake minimum required span
  • 【tcpdump命令使用总结】

    1 tcpdump说明 linux系统的tcpdump命令用来分析数据包分析工具 xff0c 相似的工具有wireshark等 xff0c wireshark使用见 wireshark报文解析ping baidu com 执行tcpdump
  • 使用graphviz+pycallgraph绘制python调用关系图

    绘制python代码调用关系图 前言1 工具安装1 1 安装graphviz1 2 安装pycallgraph2 可视化调用关系 参考文献 前言 一个 python project 中往往包含很多 py 文件 python文件中又会包含很多
  • 用树莓派实现人脸识别打卡门禁系统

    用树莓派实现人脸识别打卡门禁系统的构建 背景功能硬件效果源码摄像头测试代码录入信息人脸识别 结论 背景 源于实习公司的人脸识别打卡系统 xff0c 完成之前的项目后正好没有事情干 xff0c 于是想到了这个 xff0c 公司的这个打卡系统操
  • 一个多功能智能小车的想法

    其实一直以来都有这个想法 xff0c 但是一直没有付出行动 xff0c 学了一些专业知识之后就有了一个想法 xff0c 制作一个智能的 xff0c 非常炫酷的并且看起来就很不普通的一个机器人 xff0c 比如像机器人总动员里的瓦力 xff1
  • “2020 博客之星”年度总评选 TOP 200 名单已出,速来认领!

    经过为期半个月的激烈角逐 xff0c 2020博客之星海选投票已正式落下帷幕 成功的程序员离不开技术之路的踽踽独行 xff0c 同时也离不开社区同盟的鼎力拥趸 以下博主们在此次票选中获得了强有力的支持 xff0c 为他们一整年的技术输出添上
  • 三自由度机械臂的三维设计

    三自由度机械臂的三维设计 背景底座设计机械臂设计关节连接方式底座与机械臂的连接方式效果 背景 写本篇文章的时候只是模型设计完成以及部分零件进行了采购 xff0c 最终是否能实现不能确定 xff0c 某些图片过于辣眼 xff0c 请多担待 继
  • 气动爬行机器人设计

    气动爬行机器人设计 简介项目规则想法原理电控原理腿部机构转向机构其他结构 结语 简介 最近在学校做一个气动的爬行机器人 xff0c 算是一个二级项目 xff0c 虽然名义上有分组 xff0c 但是基本上是我自己在做 xff0c 觉得有些东西
  • ImportError: cannot import name 'Flask'解决方法

    在写bug的时候发现了这么一个错误 xff0c ImportError cannot import name Flask xff0c 自己建一个test脚本 xff0c 代码复制过去后发现可以运行 xff0c 经检查发现脚本文件的名称可能和
  • python lambda表达式详解

    64 python lambda表达式详解 1 lambda简介 先来看一段代码示例 xff1a 第一行是lambda声明 xff0c x y相当于传入的参数 xff0c 整个函数会返回x 43 y的值 lambda作为一个表达式 xff0
  • CNN(卷积神经网络)详解

    CNN卷积神经网络详解 Why CNN局部感受野 local receptive fields 权值共享 Shared weights and biases 池化 Pooling 总的来看 Why CNN 首先回答这样一个问题 xff0c
  • mysql索引笔记 innodb null

    1 列有null 索引不失效 2 is not null 不会用索引 3 模糊查询 左边匹配 不会用索引 4 组合索引最左原则 5 设置索引 不加长度 默认长度为字段长度如varcher 255 单个索引字节不超过767 组合索引不超过30

随机推荐

  • Mysql避免索引失效

    要尽量避免这些不走索引的sql xff1a SELECT 96 sname 96 FROM 96 stu 96 WHERE 96 age 96 43 10 61 30 不会使用索引 xff0c 因为所有索引列参与了计算 SELECT 96
  • MySQL中的semi-join半连接

    MySQL中的semi join半连接
  • JDK8 lamdba

    1 方法调用
  • try catch finally执行顺序

    try catch finally执行顺序 内容简介代码示例执行结果 xff1a 分析 内容简介 代码中经常会在catch 或者finally中再次抛出异常 xff0c 传给调用者 xff08 如文件上传处理工具类 xff09 xff0c
  • C++中全局变量的使用

    在C 43 43 中全局变量的定义与使用做一下下面简单的记录 xff0c 方便日后查阅 xff0c 也与大家一起学习 1 全局变量的声明 1 在头文件 h中进行声明 xff0c 如果在此文件之外也要使用该变量 xff0c 则在变量声明前加e
  • mysql innodb

    mysql s sql优化 io 使用limit返回用到的字段 xff0c 不要返回太多无用字段和一些大字段 避免索引失效 创建索引 dd
  • C语言之什么是大小端,数组大小端,位域大小端,结构体大小端

    公众号 xff1a 嵌入式不难 本文仅供参考学习 xff0c 如有错误之处 xff0c 欢迎留言指正 理解大小端之前必须明白的三点 内存地址始终以字节为单位大小端只针对基本数据类型存在位域的情况下 xff0c 小端模式下先定义的位域从LSB
  • <Linux开发> linux应用开发-之-can通信开发例程

    xff1c Linux开发 xff1e linux应用开发 之 can通信开发例程 一 简介 对于Can通信的相关介绍 xff0c 读作不过多介绍了 xff0c 网上其它网友的介绍有很多 二 环境搭建 本次测试can通信的应用例程是运行在u
  • 使用RGBD相机模拟激光数据,用于move_base中添加新图层避障功能

    参考文章 xff1a ROS depthimage to laserscan ROS导航 向cost map中添加超声波障碍图层 一 RGBD模拟激光雷达数据 我使用的是RealSense双目相机 xff0c 首先使用的是ros自带的功能包
  • 公安视图库1400的协议

    一 平台注册 注销 1 1 注册 注销流程 注册流程1如图所示 图 1 下级平台主动向上级平台注册 xff1b 注册鉴权信息 xff08 用户名和密码 xff09 由上级平台提供 xff1b 1 2 报文说明 1 2 1 下级第一次注册 P
  • linux cmake交叉编译

    linux cmake交叉编译 linux cmake交叉编译下载测试添加依赖库需要注意的问题 linux cmake交叉编译 linux cmake交叉编译 xff0c 使用环境 xff1a ubuntu cmake gcc arm 10
  • OpenCV中使用RANSAC算法实现多张图像拼接

    思路 xff1a xff08 1 xff09 获取图像的特征点 xff0c 将每张图片的特征点保存到一个vector中 xff1b xff08 2 xff09 通过特征点匹配的方法 xff0c 找到每张图片的共有特征点 xff0c 并将其保
  • 数据安全--安全网关

    简介 对于数据安全来说 xff0c 安全网关是数据安全建设中极其重要的一部分 xff0c 我这里把它做了几种分类 xff0c 如下 xff1b 对内 xff1a 零信任安全网关 xff08 7层和4层 xff09 对外 xff1a 应用安全
  • idea使用svn拉取源码,创建分支,合并分支教程

    svn拉取源码 xff0c 创建分支 xff0c 合并分支教程 最近对svn的分支使用比较感兴趣了 xff0c 花时间研究了一下 xff0c 分享给大家 xff1a 此文章记录了idea使用svn的过程 xff1a 包括拉取源码 建立分支
  • Qt中QSS的简单使用

    样式表的组成 样式表由两大元素组成 xff1a 选择器和声明 选择器实际上可以理解为对象 xff0c 声明则是对该对象的属性的设置 样式表的使用 方法一 xff1a 在代码中调用setStyleSheet 来设置样式 xff1b 方法二 x
  • jetson nano pytorch安装及文件系统扩容

    jetson nano扩容 我安装的系统是16GB的 xff0c 如果不扩容的话文件系统只有16GB 首先安装gparted span class token function sudo span span class token func
  • Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths

    fastplanner2 摘要相关工作基于梯度的路径优化拓扑路径规划 路径制导轨迹优化A 优化失效分析B 问题公式化 拓扑路径搜索A 拓扑等价关系B 拓扑路径图C 路径缩短和修剪 实时拓扑路径规划 这篇论文是港科大开源的无人机运动规划fas
  • curl 参数配置详情

    第一类 xff1a 对于下面的这些option的可选参数 xff0c value应该被设置一个bool类型的值 xff1a CURLOPT AUTOREFERER 当根据Location 重定向时 xff0c 自动设置header中的Ref
  • 分区隔离与数据安全交换技术

    一 背景 网络的物理隔离是很多网络设计者都不愿意的选择 xff0c 网络上要承载专用的业务 xff0c 其安全性一定要得到保障 然而网络的建设就是为了互通的 xff0c 没有数据的共享 xff0c 网络的作用也缩水了不少 xff0c 因此网
  • g++编译命令大全

    gcc amp g 43 43 现在是gnu中最主要和最流行的c amp c 43 43 编译器 g 43 43 是c 43 43 的命令 xff0c 以 cpp为主 xff0c 对于c语言后缀名一般为 c 这时候命令换做gcc即可 其实是