GNU C library 笔记1
内容:Introduction 和 Error Reporting
1. glibc 所实现全部或部分规范下的功能有
ISO C: The international standard for the C programming language.
POSIX: The ISO/IEC 9945 (aka IEEE 1003) standards for operating systems.
Berkeley Unix: BSD and SunOS.
SVID: The System V Interface Description.
XPG: The X/Open Portability Guide.
如果只需要 ISO C 的功能,能在编译时使用 -ansi 选项。glibc 实现了全部的 ISO C 功能。POSIX 是 ISO C 的超集,他额外的包括了 file system interface primitives、device-specific terminal control functions、process control functions。Berkeley Unix 实现了前两者多数功能,源于 4.2 BSD、4.3 BSD, and 4.4 BSD Unix 系统(一般称为 Berkeley Unix)及 SunOS (基于 4.2 BSD 不过又实现了 System V 的部分功能),他额外的包括了 symbolic links、the select function、BSD signal functions、sockets。SVID 是 System V Interface Description,也就是描述 AT&T Unix System V operating system 的一份文件,某种意义上是 POSIX 的超集,不过没有已有的 Unix 实现了其全部功能,glibc 也仅仅实现了其部分功能。他额外实现的功能包括 the methods for inter-process communication(IPC)、shared memory、hsearch、drand48 系列函数、fmtmsg、一些其他的数学函数。XPG(The X/Open Portability Guide)描述了什么样的系统满足类 Unix 系统的基本需要,glibc 服从该需求。
2. 头文件里面某些函数的实现使用 macro 做到的,理由是一般这样会更快。不过不必差别他们,因为一般定义了同名的函数,如 abs(int) 既有函数定义也有 macro 定义,使用 & 操作时,由于 macro 调用时不能匹配到 () 因此仍然能取到函数的地址。如果需要显式的调用函数能用 () 将函数名包围,如 (abs)(3),又或使用 #undef abs 将定义过的 macro 取消。
3. ISO C 允许重复 #include 头文件,不过 glibc 使用了 #define #ifndef 等预处理器命令避免了同一头文件重复装载,因此能放心的 #include glibc 的头文件。
4. 除了 ISO C 定义的一些保留字,由于 glibc 实现了一些额外的功能,建议不要使用可能和之冲突的一些命名方式。
5. 怎么开启某种标准下 glibc 的功能。前面提到能利用 -ansi 仅仅使用 ISO C 以内的功能。其他的通过定义 macro 实现条件编联,实现方式分两种,能在 .c 里面 #define,或用
相关文档:
#include <stdio.h>
long long mod(long long a,long long b)
{
return (a % b + b) % b;
}
struct triple
{
long long d,x,y;
};
long long Euclid(long long a,long long b)
{
if(b == 0)
return a;
else
retu ......
链表定义及操作的源文件:employee.h
//
#pragma once
#ifndef __EMPLOYEE_H__
#define __EMPLOYEE_H__
#include<stdio.h>
#include<malloc.h>
typedef struct employee{
int id;
int age;
int salary;
}EmpType;
typedef struct Node{
EmpType data;
struct Node *next;
}L ......
问:
在构造或析构期间能使用虚函数吗?
答:
能,但最好不要这么做。
前两天在公司游戏项目开发过程中,在析构函数中不小心调用了虚函数,而且还是个纯虚函数。
因为一直是在Rlease模式下工作的,导致系统直接终止客户端,虽然控制台有打印这个错误,但终止太快,也没看到。切换在Debug下调试,则会报R6025 -pure vir ......
(转)C++中extern “C”含义深层探索
1.引言
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象&rdquo ......