C 简单编译

 

声明:

本文 - 禁止转载 - 

本文所有观点和概念都系个人总结,难免存在疏漏之处,为不至于诱导初学者误入歧途,望各位以自己实践为准,特此声明。

如有错误请告知

标准

C++98/03、C++11、C++14、C++17,以C++11为主流(2018年)

编译

Visual Studio IDE

★ 快速编译指南

1. 打开cmd.exe(快捷键Win+R),输入如下命令:

set VS

结果:

VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
VS120COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 12.0\

VSSDK140Install=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VSSDK\

结果包含VS120COMNTOOLS说明安装有Visual Studio 2013

2. 继续输入如下命令:

(此处采用Visual Studio 2013编译,若需要其他编译器酌情考虑即可)

call "%VS120COMNTOOLS%"vsvars32.bat
cd [cpp目录]
cl main.cpp

若编译出错,按提示修改代码文件后,继续cl操作步骤

PS:main.cpp 换成你需要编译的cpp文件

3. 执行生成的可执行文件

4.清理(可忽略)

del /f /s /q *.exe
del /f /s /q *.obj

g++编译器

★ 快速编译指南

# 简单编译
cd [cpp目录]
g++ main.cpp -std=c++11 -o main
./main

# 多个对象文件联编
g++ -c main.cpp
g++ -c func.cpp
g++ main.o func.o -std=c++11 -o main

# 静态库联编,静态库必须放在最后
g++ -c  main.cpp
g++ -c  func.cpp
ar  crs func.a func.o
g++ main.o func.a -std=c++11 -o main

# 共享库
g++ -shared func.o -o libfunc.so

__GNUC__

__GNUC_MINOR__

__GNUC_PATCHLEVEL__

gcc的主版本号,次版本号,修正版本号

注意

C++标准归于标准,即使按照标准来写代码编译也不是一定就成功,或者按照未现实的标准写代码也不一定就失败,现实取决于编译器对标准的支持程度和编译参数。

例如 >> 操作符 A<B<int>>

是 右移操作符 还是 模板参数表结束界定符?而C++11的标准可以正确识别,认为是后者。

template<int N>
struct AA
{
    // 
}
int main()
{
    AA< 100 >> 2> xx;
    return 0;
}

某C++98/03标准编译器编译成功

某     C++11标准编译器编译失败

正确写法:AA< (100 >> 2) > xx; // 括号手动区分>>操作符

★ 编译过程

1、预处理:  gcc  -E test.c  -o  test.i        // 预处理文件  test.i
2、编译:      gcc  -S test.i   -o  test.S      // 器汇编文件  test.S
3、汇编:      gcc  -c test.S  -o  test.o       // 机器语言     test.o
4、链接:      gcc      test.o  -o   test         // 可运行程序  test

★ 编译参数

-fno-elide-constructors

关闭返回值优化

// A 为class
A GetA()
{
    return A();
}

int main()
{
    A = GetA();
    return 0;
}
/* 
    关闭返回值优化
    A实例构造三次,析构三次
*/
/* 
    打开返回值优化
    A实例构造一次,析构一次
*/

参考

cppreference中文参考网站

cplusplus参考网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值