keywords
Created|Updated
|Post Views:
关键字与标识符
经常考察的关键字
- const * 常量 和指针一起 考察
- voliate * 容易修改,禁止编译器优化,嵌入式,和多线程环境
- extern * 外部引用,声明
- static * 本文件,或者本函数可用,本类可用
- auto * 自动变量、栈变量, 类型推导
- register * 请求编译器将 变量放到寄存器
不常见的关键字
- restrict *
Author: wang shaodong
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles
2020-02-15
C 语言中的main函数
C语言中main写法12345678910111213141516171819202122232425// 接受任意参数但不起作用int main(){ return 0;}// 明确不接受任何参数int main(void){ return 0;}// argc 参数的个数, argv 指向参数字符的首地址int main(int argc, char **argv){ return 0;}// 同上,第二个参数的不同写法int main(int argc, char *argv[]){ return 0;}// 此版本可以打印出环境变量int main(int argc, char *argv[], char *env){ return 0;} 关于main函数 main函数并非必须存在,只是约定俗成的一个程序启动入口罢了,main函数被crt(C语言运行时)调用可以通过编译器指令来替换入口函数12345678// entry.c#include ...
2020-05-23
namespace
namespace (命名空间) 是C++的一个关键字 不同的命名空间中相同的标识符在编译的时候不会产生错误 在不同的命名空间中可以使用相同名字的变量或者函数名称 C 语言的标识符 也有命名空间 (内容来自 C语言规范草案 6.2.3 节) label names标签名 包括 goto 语句 中用到的标签和 switch case中的 标签 the tags name of structures, unions and enumurations结构、联合、枚举的tag名 the members of structures or unions; each structure or union has a seperate name space for its number;结构体、联合的成员名 all other identifiers,called ordinary identifiers (declared in ordinary declarators or asenumeration constants)其他普通的变量,或者枚举常量 C++中使用namesapce ...
2020-01-24
About sizeof
sizeof 的误解,sizeof 不是函数(function),是运算符(operator) 函数在程序运行的时候起作用,运算符求出来的大小是在编译时就确定下来的 常见的sizeof操作 对结构体类型求大小 1234567891011typedef struct { char a; int b; char *ptr; double c; char name[19];} Demo;// 结构体的实际所占用内存大小,需要内存对齐,按照4byte或者8byte对齐,// 对齐的原则整体大小能被4整除,而且每个成员的地址偏移都是4的整数倍std::cout << sizeof(Demo) << std::endl; 对联合体求大小 1234567891011#include<stdio.h>// 联合体的大小是能够容纳最大的成员的大小, 还要考虑一下四字节对齐typedef union { int a[3]; char b[8] ;} data;int main(){...
2020-05-24
C++ 11/14/17/20 new feature
自从C++11以来的新特性 auto 自动类型推导 constexpr nullptr 关键字, 用于取代 NULL, 代表空指针 for 循环中的 语法糖 for ( a : array) { } lambda 表达式, 也就是匿名函数 自从C99以来的新特性 变长数组 VLA; 结构体 按成员初始化 restrict 关键字 bool 类型
2020-02-18
位运算、原码、反码、补码
位运算的地位 以下内容摘自《枕边算法书》感觉对于位运算描述的很形象 对于程序员来说,”位” 相当于现实世界中构成水和空气的粒子。编程世界的所有东西都会从位开始,以位结束。刚步入编程世界的初学者看到整数就是整数,看到字符串就是字符串。但功力深厚的程序员眼中无论整数还是字符串,它们都是位。 与系统编程不同,一般应用程序的编程对位运算的要求并不高。即使如此,很少有程序员不懂位运算,因为在不懂位运算的情况下编程写程序,就像在现实世界中不呼吸、不喝水一样,几乎不可能。 位运算的类型 运算符 含义 & 按位与:全1才1,否则都0 | 按位或:有1得1,全0才0 ^ 按位异或:相异为真,相同为假 >> 右移:对于有符号数的右移分为算术右移和逻辑右移 << 左移:比较简单不论是否有符号整数 ~ 取反:每个位1变0,0变1 对于正整数而言,左移1位就是x2,右移就是除2 下图来自《Computer Systems - A Programmer’s Perspective》 算术右移:直接右移n位,...
2020-01-20
About inline function
inline 是C99/C++的关键字之一,目的是取代函数式宏,函数式宏没有类型 内联函数 vs 函数式宏(待考证,可能有谬误) 编译中的差别: 内联函数 在编译时在调用函数中内敛只是是一种建议(像regester 一样),不一定被编译器采纳(The inline specification is only a request to the compiler. The compiler maychoose to ignore this request – – C++ primer),如果内敛函数很复杂(循环嵌套比较多),或者包含静态变量等情况就无法内敛就无法被编译器当做是内联函数 函数式宏 在预处理阶段被文本替换,在预处理阶段必然被替换 二进制的区别: 函数式宏 如果被使用多次 代码区增大 内联函数 如果被使用多次 代码区域没有显著增大 运行时的差别: 函数式宏,不是函数,在运行时没有体现 内联函数,几乎没有函数参数传递的开销 不同编译器对 inline 的支持 clang挖坑 gcc挖坑
Announcement
This is my Blog