Linux下C测试const
来源:互联网 发布:淘宝连接热敏打印机 编辑:程序博客网 时间:2024/06/07 05:11
根据链接 http://www.cnblogs.com/madonion/articles/2266163.html 里面的关于纯C的描述(不涉及C++的部分)测试结果。
编译器gcc
正确、警告、出错。
正确和警告均可执行,其中警告具有破坏性,
比如明明定义了const TYPE ca=1;但是指定TYPE*p=&ca;或者TYPE*const p=&ca;后序通过*p=3;结果ca的值被改变了!!
错误即编译的时候出错,无法执行。
*********************
只读变量
*********************
无意义
#include<stdio.h>#define VALUE 135typedef int TYPE;int main(){ const TYPE ca;//无意义,只读,没有初始化定义,gcc默认为0 return 0;}
***********************
出错
const_.c: In function ‘main’:
const_.c:9: 错误:向只读变量 ‘ca’ 赋值
//编译 gcc const.c#include<stdio.h>#define VALUE 135typedef int TYPE;int main(){ const TYPE ca; ca=4;//编译出错位置 return 0;}
***********************
正确使用(只读,即:定义并初始化,后续值不可更改)
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135typedef int TYPE;extern const TYPE ca;//声明:大型程序中连接其他文件,其他文件或本文件中有初始值。const TYPE ca=VALUE;//定义+初始化int main(){ const TYPE ca=4;//命名冲突,取范围内的这个ca printf("%d\n",ca); return 0;}
***********************
指针和const的排列组合四种方式(此项extern的不做介绍)
***********************
TYPE *p TYPE *const pconst TYPE *p 等价 TYPE const*pconst TYPE *const p 等价 TYPE const*const p
指针一个是改变指向地址里面的内容,一个是改变指向地址
***********************c(0,0)可在后续进行变量赋值,而位置赋值两种情况,指向的是const TYPE*而进行位置赋值会警告(破坏性),指向的TYPE*进行位置赋值程序正确
正确
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; TYPE a1=VALUE; TYPE*p; p=&a; printf("memory:%p\ndata:%d\n",p,*p); *p=VALUE2; printf("memory:%p\ndata:%d\n",p,*p); p=&a1; printf("memory:%p\ndata:%d\n",p,*p); return 0;}
memory:0x7fffa431b494
data:135
memory:0x7fffa431b494
data:235
memory:0x7fffa431b490
data:135
--------------
警告
const_.c: In function ‘main’:
const_.c:11: 警告:赋值丢弃了指针目标类型的限定
#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ const TYPE ca=VALUE; TYPE*p; p=&ca;//警告 return 0;}
***********************c(0,1)后续变量赋值出错,而关于位置赋值两种情况,指向的是const TYPE*而进行位置赋值会警告(破坏性),指向的TYPE*进行位置赋值程序正确
正确
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; TYPE *const p=&a; printf("TYPE *const p=a;\n"); printf("memory:%p data:%d\n",p,*p); *p=VALUE2; printf("*p=VALUE2\n"); printf("memory:%p data:%d\n",p,*p); return 0;}
--------
警告
const_.c: In function ‘main’:
const_.c:12: 警告:初始化丢弃了指针目标类型的限定
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; TYPE *const p=&a; const TYPE ca=VALUE; TYPE *const pp=&ca;//警告 printf("TYPE *const p=a;\n"); printf("memory:%p data:%d\n",p,*p); *p=VALUE2; printf("*p=VALUE2\n"); printf("memory:%p data:%d\n",p,*p); printf("\n"); printf("TYPE *const p=ca;\n"); printf("memory:%p data:%d\n",pp,*pp); *pp=VALUE2;//警告的原因 printf("*pp=VALUE2\n"); printf("memory:%p data:%d\n",pp,*pp); printf("const TYPE ca 's value %d\n",ca); return 0;}
打印结果:
TYPE *const p=a;
memory:0x7fffff89092c data:135
*p=VALUE2
memory:0x7fffff89092c data:235
TYPE *const p=ca;
memory:0x7fffff890928 data:135
*pp=VALUE2
memory:0x7fffff890928 data:235
const TYPE ca 's value 235
--------
出错
const_.c: In function ‘main’:
const_.c:12: 错误:向只读变量 ‘p’ 赋值
const_.c:13: 错误:向只读变量 ‘p’ 赋值
#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; const TYPE ca=VALUE; TYPE *const p; p=&a; p=&ca; return 0;}
------
出错
const_.c: In function ‘main’:
const_.c:12: 错误:向只读变量 ‘p’ 赋值
#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; TYPE a1=VALUE; TYPE *const p=&a; p=&a1; return 0;}
***********************c(1,0) 可在后续进行变量赋值,位置赋值出错
正确
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; const TYPE ca=VALUE; TYPE const *p; p=&a; printf("memory:%p data:%d\n",p,*p); p=&ca; printf("memory:%p data:%d\n",p,*p); return 0;}
打印结果:
memory:0x7fff6f8175d4 data:135
memory:0x7fff6f8175d0 data:135
---------------
出错
const_.c: In function ‘main’:
const_.c:15: 错误:向只读位置赋值
const_.c:19: 错误:向只读位置赋值
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; const TYPE ca=VALUE; TYPE const *p; p=&a; printf("memory:%p data:%d\n",p,*p); *p=VALUE2;//出错 p=&ca; printf("memory:%p data:%d\n",p,*p); printf("memory:%p data:%d\n",p,*p); *p=VALUE2;//出错 printf("memory:%p data:%d\n",p,*p); return 0;}
***********************c(1,1)--必须定义的时候就确定,后续 变量赋值和位置赋值均出错
正确
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; const TYPE ca=VALUE; TYPE const *const p=&a; TYPE const *const pp=&ca; printf("memory:%p data:%d\n",p,*p); printf("memory:%p data:%d\n",pp,*pp); return 0;}
出错
const_.c: In function ‘main’:
const_.c:13: 错误:向只读变量 ‘p’ 赋值
const_.c:15: 错误:向只读位置赋值
const_.c:16: 错误:向只读变量 ‘p’ 赋值
const_.c:19: 错误:向只读位置赋值
//编译 gcc const.c//运行 ./a.out#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; const TYPE ca=VALUE; TYPE const *const p; p=&a;//出错 printf("memory:%p data:%d\n",p,*p); *p=VALUE2;//出错 p=&ca;//出错 printf("memory:%p data:%d\n",p,*p); printf("memory:%p data:%d\n",p,*p); *p=VALUE2;//出错 printf("memory:%p data:%d\n",p,*p); return 0;}
出错
const_.c: In function ‘main’:
const_.c:17: 错误:向只读变量 ‘p’ 赋值
const_.c:20: 错误:向只读变量 ‘pp’ 赋值
#include<stdio.h>#define VALUE 135#define VALUE2 235typedef int TYPE;int main(){ TYPE a=VALUE; const TYPE ca=VALUE; TYPE a1=VALUE2; const TYPE ca1=VALUE2; TYPE const *const p=&a; TYPE const *const pp=&ca; printf("memory:%p data:%d\n",p,*p); p=&ca1;//出错 printf("memory:%p data:%d\n",p,*p); printf("memory:%p data:%d\n",pp,*pp); pp=&a1;//出错 printf("memory:%p data:%d\n",pp,*pp); return 0;}
- Linux下C测试const
- Linux下C测试多个*两个const
- linux下 c语言cgi测试
- linux 下c语言测试框架
- linux下c连接mysql测试
- Linux下C语言&_测试位
- linux下 C语言 大小端测试
- linux下C编程(三)之 const 的值可以被修改
- linux下C语言实现程序时间测试
- protobuf在linux环境下c代码生成及测试
- Linux-C: const char*如何赋值
- 【C/C++】const在C和C++下的区别
- linux下 usleep 测试
- Linux下稳定性测试
- Linux下测试网速
- linux下测试网速
- Linux下性能测试
- const c
- linux系统定时任务(cron服务)设置
- html:简单布局
- 设置mysql密码
- 自定义圆形经验统计View
- VUE 新手环境搭建-发布
- Linux下C测试const
- Linux学习 十一单元练习题
- 抓取手机(ios/android)https&http请求报文
- 按平台引导至相应页面demo
- Eclipse/MyEclipse 最最常用的快捷键
- WebRTC编译系统之gn files
- office常见错误the setup controller has encountered a problem during install
- socket与http的区别
- 电子稳像