C++ primer (5th) 随想与学习笔记 3 小试牛刀管中窥豹

昨天把GCC安装好了,写了个简单的文件test.cpp

<span style="font-size:14px;">int main(){
return 0;
}</span>

执行$gcc  test.cpp,报了个错:

gcc: error trying to exec 'cclplus': execvp: No such file or directory

这意思是再次执行$gcc test.cpp,还是报了一个错:

(.eh_frame+0x11) undefined reference to "__gxx_personality_x0"

因为这里不该用gcc,用g++才对,什么原因呢,参考

这里

记得编译cpp文件用g++,gcc的通用参数也要记得:

流程:预处理-->编译-->汇编-->连接-->执行

-c 不连接

-S 只编译不汇编

-E 只是预处理

-o file 指定输出的文件名

-v 打印编译过程

1.2 初识输入输出

iostream库包含了两个类型istream和ostream,cin是istream的标准输入,标准输出ostream有三个分别是cout、cerr和clog,cout由于函数内部正常打印,那么cerr就是错误打印了,clog用于日记方便调试代码吧!

#include语句一般都放在函数外,并统计合并在文件的开始处,但我工作时真的看到过#include出现在文件中某个函数的内部,牛!不过还是统一风格更好,易读可维护。

std::out  << "Enter two numbers" << std::endl;等价于(std::out  << "Enter two numbers") << std::endl;,意味着是左运算,std::endl是操纵符,不表示换行,表示结束当前行,并且刷新缓冲区到设备,调试的时候只有不停的刷新缓冲区才能知道崩溃的及时位置。

std::out和std::in隐藏了数据类型,比C中的print灵活!

1.3 注释简介

修改代码时要同时修改注释,错误的注释比没注释更恐怖,有时看着代码和注释不一样挺困惑的,再忙也要保证注释和代码一致性。

单行注释//

界定符注释/* */,使用时养成在每行开始处添加*的习惯,因为这种风格比较容易辨认。注意不能嵌套,因为编译器在遇见/*后只负责找*/而/*会被忽略掉。另外调试的时候可能需要注释一些含界定符的代码,这是最好用//注释掉每一行,防止嵌套。

回忆一下别的语言的注释:html<!--><--> python""" """ php/* */ matlab%只能一行行的注释。

1.4 控制流

1.4.1 while语句

while(condition){statement}先判断条件再执行语句;

do{statement}while(condition)先执行一次再判断条件。

语句块任何时候都可以用,只要把代码块用{}括起来即可,比较少见。

练习1.9

#include <iostream>
int main(){
    int nBegin=50, nEnd=100, nSum=0;
    while(nBegin != nEnd)
    {
        nSum += nBegin;
        ++nBegin;
    }
}

练习1.10

#include <iostream>
int main()
{
    int cnt=10;
    while(cnt-- >= 0) std::cout << cnt;
}


练习1.11

#include <iostream>
int main(){
    std::out << "Enter two interger numbers:" << std::endl;
    int nBegin=0, nEnd=0;
    std::cin >> nBegin >> nEnd;
    while(nBegin <= nEnd)
    {
        std::cout << nBegin;
        ++nBegin;
    }
}

1.4.2 for语句

for(init; condition; expression){statement},init只在开始的时候执行一次,然后先判断条件在执行statement,最后执行表达式一个循环结束。注意中间是分号";",不是逗号","。

1.4.3 读取不定量的输入数据

while和std::cin配合使用,istream对象遇见异常或者end_of_file,std::cin为假,跳出循环。在界面中执行文件结束,window是CTRL+Z然后按Enter或Return,Mac Os或者Linux是Ctrl+D。

练习1.16

#include <iostream>
int main()
{
    int sum=0, value=0;
    while(std::cin >> value) sum += value;
    std::cout << "Sum is :" << sum <<std::endl;
    return 0;
}

编译错误具有马太效应,使用编辑-编译-调试(edit-compile-debug)模式,解决一条错误数条编译错误会跟着消失。

1.4.4 if语句
赋值运算符=和相等比较运算符==不能混淆。
#include <iostream>
int main(){
    std::out << "Enter two interger numbers:" << std::endl;
    int nBegin=0, nEnd=0;
    std::cin >> nBegin >> nEnd;
    if(nBegin > nEnd)
    {
        int change = nBegin;
        nBegin = nEnd;
        nEnd = change;
    }
    for( ; nBegin <= nEnd; ++nBegin)
        std::cout << nBegin;
    return 0;
}

再次强调风格的重要性,虽然风格各式各样,但养成自己的风格更重要。

1.5 类简介

类类型(class type)是C++最重要的特性之一,好像开始深入C++了!

类的定义放在头文件里,头文件一般以.h为后缀,但也有使用.H、.hpp或.hxx的程序员。标准头文件不带后缀,有些IDE对后缀有要求。

来之标准库的头文件用尖括号<>包围文件名,其余的用双引号""包围。

文件重定向功能$addItems <infile >outfile。执行addItems.exe时会读取当前目录下的infile文件作为输入,然后输出给outfile。

眼看这一章就要结束了,后面还有一个总结,很细致的把这章的术语又重新整理一遍,”虽然自己看不下去,但这种人性化很赞!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值