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-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-24
C++ VS c
C++ 曾经被叫做C With class, C++ 是兼容C的,并不是100%兼容 C++ 中的C子集是C++的一部分,C语言中允许的东西到C++中可能会不允许 全局变量初始化: C语言中只能使用 constant初始化全局变量 C++可以通过函数初始化 123456789101112131415#include <stdio.h>int init(){ printf("inside init func\n"); return 100;}int global_int = init(); // 此语句cpp文件能够编译执行,c文件编译失败int main(){ printf("Hello world\n"); printf("global_int= %d\n", global_int); return 0;} C++的C子集 是更好的C,将C中的一些不严格的编译检查,变得相对更严格C++ 编译器编译之后函数的 mangling n...
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#includ...
2020-03-07
About Lint
lint 或者 linter是 一种静态程序分析工具 这里的静态是指在不运行程序的情况下检查代码潜在的问题 最早在Unix平台上开发用于检查C语言程序的 后来被其他的语言借鉴形成了各种各样的lint工具,以提升代码的健壮性 splint 是现在的 linux上的lint工具 安装方法 如下1# apt-get install -y splint splint 从哪里知道的? 来自《C专家编程》中的某个章节 简单用法12345// func.cint func(int /*@unused@*/a,char **b){ return 0;} 1$ splint func.c 会输出警告信息 详细用法可以参考1man splint
2020-02-23
About preprocess
预处理是C/C++ 编译过程中的第一个环节, 处理以#开头的文本行 比如免费版和付费版的功能多少的条件编译 实现代码对于不同平台的兼容,或者对相同平台的不同版本进行兼容 宏的作用常见的就是简单的文本替换功能,实现函数的替换,DEBUG版本加打印,release 版本不加打印12345678910111213141516171819202122232425262728// 此代码来自 Learn C the hard way 一书#ifndef __dbg_h__#define __dbg_h__#include <stdio.h>#include <errno.h>#include <string.h>#ifdef NDEBUG#define debug(M, ...)#else#define debug(M, ...) fprintf(stderr, "DEBUG %s:%d: " M "\n", __FILE__, __LINE__, ##__VA_ARGS__)#endif#define...
Announcement
This is my Blog