问题集锦(26-29)
Problem26 how to use access() function?
Ans:
函数原型:
intaccess(const char *pathname, int mode);
判断一个文件是否存在:
if(access(“finame.txt”,F_OK) == 0)
{
printf(“filename.txt已存在”);
}
The modespecifies the accessibility check(s) to be performed, and is
either thevalue F_OK, or a mask consisting of the bitwise OR of one or
moreof R_OK, W_OK, and X_OK. F_OK tests for the existence of the
file. R_OK, W_OK, and X_OK test whether the file exists and grants
read,write, and execute permissions, respectively.
PS:
/*
*Strip blanks from a string.
*Return a pointer into the provided string.
*Modifies input adding a NULL at first
*of trailing blanks.“除头斩尾”
*/
char*
lpc_strip_blanks(char*input)
{
char*iptr;
/*Find first non-blank */
while(*input&& isspace(*input)) ++input;
/*Find last non-blank */
iptr=input+strlen(input);
if(iptr > input) {
while(isspace(*--iptr));
*(iptr+1)='\0';
}
returninput;
}
Problem27 How to install a new font in Linux?
Ans;
step1:copynew font file “font.tty” to a directory in linux.
step2:chmod755 font.tty
step3:mkfontscale
step4:mkfontdir
step5:fc-cache
Problem28:C语言中如何使用宏
Ans:
C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。
关于#和##
在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:
#define WARN_IF(EXP) \
do{ if (EXP) \
fprintf(stderr,"Warning: " #EXP "\n"); } \
while(0)
那么实际使用中会出现下面所示的替换过程:
WARN_IF (divider ==0);
被替换为
do {
if (divider ==0)
fprintf(stderr,"Warning" "divider == 0" "\n");
} while(0);
这样每次divider(除数)为0的时候便会在标准错误流上输出一个提示信息。
而##被称为连接符(concatenator),用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定是宏的变量。比如你要做一个菜单项命令名和函数指针组成的结构体的数组,并且希望在函数名和菜单项命令名之间有直观的、名字上的关系。那么下面的代码就非常实用:
struct command
{
char * name;
void (*function)(void);
};
#defineCOMMAND(NAME) { NAME, NAME ## _command }
//然后你就用一些预先定义好的命令来方便的初始化一个command结构的数组了:
structcommandcommands[]={
COMMAND(quit),
COMMAND(help),
...
}
COMMAND宏在这里充当一个代码生成器的作用,这样可以在一定程度上减少代码密度,间接地也可以减少不留心所造成的错误。我们还可以n个##符号连接n+1个Token,这个特性也是#符号所不具备的。比如:
#defineLINK_MULTIPLE(a,b,c,d) a##_##b##_##c##_##d
typedefstruct_record_typeLINK_MULTIPLE(name,company,position,salary);
//这里这个语句将展开为:
// typedef struct_record_type name_company_position_salary;
关于...的使用
...在C宏中称为VariadicMacro,也就是变参宏。比如:
#definemyprintf(templt,...) fprintf(stderr,templt,__VA_ARGS__)
//或者
#definemyprintf(templt,args...)fprintf(stderr,templt,args)
第一个宏中由于没有对变参起名,我们用默认的宏__VA_ARGS__来替代它。第二个宏中,我们显式地命名变参为args,那么我们在宏定义中就可以用args来代指变参了。同C语言的stdcall一样,变参必须作为参数表的最有一项出现。当上面的宏中我们只能提供第一个参数templt时,C标准要求我们必须写成:
myprintf(templt,);
的形式。这时的替换过程为:
myprintf("Error!\n",);
替换为:
fprintf(stderr,"Error!\n",);
这是一个语法错误,不能正常编译。这个问题一般有两个解决方法。首先,GNUCPP提供的解决方法允许上面的宏调用写成:
myprintf(templt);
而它将会被通过替换变成:
fprintf(stderr,"Error!\n",);
很明显,这里仍然会产生编译错误(非本例的某些情况下不会产生编译错误)。除了这种方式外,c99和GNUCPP都支持下面的宏定义方式:
#definemyprintf(templt,...)fprintf(stderr,templt,##__VAR_ARGS__)
这时,##这个连接符号充当的作用就是当__VAR_ARGS__为空的时候,消除前面的那个逗号。那么此时的翻译过程如下:
myprintf(templt);
被转化为:
fprintf(stderr,templt);
这样如果templt合法,将不会产生编译错误。这里列出了一些宏使用中容易出错的地方,以及合适的使用方式。
Problem29 how to ignore an access violation exception in VC?
ANS:
__try
{
//code
}
__except(GetExceptionCode()==EXCEPTION_ACCESS_VIOLATION?
EXCEPTION_EXECUTE_HANDLER:
EXCEPTION_CONTINUE_SEARCH)
{
//donothing
}
转载于:https://my.oschina.net/fuyajun1983cn/blog/263856
问题集锦(26-29)相关推荐
- Docker 问题集锦(26) - 解决报错:unable to find user root: no matching entries in passwd file
目录 问题 解决 方法一 方法二 方法三 结论 <Docker 问题集锦>系列-总览_liuzhen007的专栏-CSDN博客前言欢迎大家订阅Data-Mining 的<Docker ...
- 一个首项大于0的等差数列的前四项的和为26,前四项的积为880,求此数列。
一个首项大于0的等差数列的前四项的和为26,前四项的积为880,求此数列. **输出格式要求:"%d," "......\n" (只输出前21个数,其他为... ...
- java 字符串乱码_这份Java面试题含答案解析竟然真的让你不用在面试上“如履薄冰”...
面试题集共分为以下十部分: 一.Core Java: 1 - 95 题1 - 24 页 基础及语法: 1 - 61 题1 - 13 页 异常: 62 - 69 题13 - 15 页 集合: 70 - ...
- StarUML开发团队负责人李珉奎交流会-UMLChina讲座-实录
时间 北京时间2006年3月23日(周四)下午15:00-17:00 演讲人 Minkyu Lee(李珉奎)(韩国).StarUML开发团队负责人.StarUML(http://www.staruml ...
- 转载:MATLAB字符串函数
| 网站首页 | 电脑学习 | 英语学堂 | 论文中心 | 试题资源 | 教案集锦 | 课件下载 | 高校联盟 | 求职创业 | 网络营销 | 实用范本 | <script src= ...
- 使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点、最大最小距离点
使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点.最大最小距离点 1. 效果图 2. 源码 2.1 原始数据--xq.txt 2.2 源码 参考 这篇博客将演示如何 ...
- Java Spring @Scheduled 定时任务crontab表达式设置
Java Spring @Scheduled 定时任务crontab表达式设置 1. Cron详解 2. 例子 参考 1. Cron详解 Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或 ...
- keras 的 example 文件 reuters_mlp.py 解析
该文件是一个文本分类的示例, 数据集采用路透社的新闻,我们可以把其内容解析一下: word_index = reuters.get_word_index() word_index = {k: (v + ...
- 整理了 65 个 Matplotlib 案例,这能不收藏?
作者|周萝卜 来源|萝卜大杂烩 Matplotlib 作为 Python 家族当中最为著名的画图工具,基本的操作还是要掌握的,今天就来分享一波 文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到 ...
- 资源 | 2018年值得关注的200场机器学习会议(建议收藏)
2017年马上就要过去了,这一年你的收获怎么样?在学习的过程中,独自学习与向别人学习同样重要,其中通过各种会议了解AI行业研究成果是个不错的提高自己的方法.对于专注于机器学习的伙伴来说,2018年有哪 ...
最新文章
- web api 限制单个IP在一定时间内访问次数
- 数据量高并发的数据库优化
- python3精要(21)-函数(2)
- x722网卡支持百兆吗_同样是无线网卡,为什么要选千兆的?
- 转-httpd 2.4.4 + mysql-5.5.28 + php-5.4.13编译安装过程
- linux安装配置SVN服务器
- 权限管理系统2_权限表,权限模块表
- FreeSql (三十四)CodeFirst 迁移说明
- Arduino笔记-呼吸流水灯
- 怎么能避免浏览器请求超时_浏览器请求服务器超时
- 欧洲互联网将“死于”版权法?
- 如何授权您的Mac播放AppleMusic?
- 视频格式mp4转emf
- 简易看房加权评估案例C++
- 【已解决】瞎设置代理服务器后IE浏览器上不了网
- 输入某辆小轿车三次的 耗油量(升)和行驶里程(公里),计算平均油耗(升/百公里)。
- 建筑施工复习资料-立杆基础
- SpringBoot 整合 Elasticsearch
- Guava - 拯救垃圾代码,写出优雅高效,效率提升N倍
- python批量读取图片处理并保存