C++
Hello world
Clang 是苹果官方的用来编译 C 家族的编译器,它是 LLVM 的一部分。相比于 Xcode 5 版本前使用的 GCC 有多项优化。
编译:clang++ main.cpp
编译 C++11:clang++ -std=c++11 main.cpp
文件重定向:./a.out <infile >outfile
<<
是输出运算符,>>
是输入运算符。
endl
是操纵符 (manipulator),写入 endl 的效果是结束当前行,并将设备关联的 buffer 中的内容刷新到设备中。缓冲刷新操作可以保证内存中的数据都真正写入到输出流中。
::
是作用域运算符。
#include <iostream>
int main() {
int sum = 0, value = 0;
// 以 istream 对象的状态作为检测条件
// 当遇到 end-of-file (ctrl+D) 或无效输入(输入的值不是一个整数),istream 状态就会变为无效
while (std::cin >> value) {
sum += value;
}
std::cout << "Sum is " << sum << std::endl;
return 0;
}
编译并链接:clang++ main.cpp fact.cpp
,产出 a.out
文件。
等价于下面的步骤(分离式编译):
- 只编译:
clang++ -c main.cpp
,产出main.o
文件。 - 只编译:
clang++ -c fact.cpp
,产出fact.o
文件。 - 链接:
clang++ main.o fact.o
,产出a.out
文件。
##
is called token concatenation, used to concatenate two tokens in a macro invocation.
#define Flutter_CONCAT2(A, B) A##B
#define Flutter_CONCAT(A, B) Flutter_CONCAT2(A, B)
从标准输入流中获取每一行:
string line;
while (getline(cin, line))
if (!line.empty())
cout << line << endl;