APUE_公共库与头文件

// apuesunyj.h
#ifndef APUE_SUNYJ
#define APUE_SUNYJ

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>

int64_t const MAXLINE = 4096; // max line length
int64_t const ARG_MAX = 4096;

void err_quit(const char *fmt, ...);
void err_sys(const char *fmt, ...);
void err_ret(const char *fmt, ...);

#endif
// error.cpp
#include "apuesunyj.h"

/*
 *  * Print a message and return to caller.
 *   * Caller specifies "errnoflag".
 *    */
static void err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
    char buf[MAXLINE];

    vsnprintf(buf, MAXLINE, fmt, ap);
    if (errnoflag)
        snprintf(buf + strlen(buf), MAXLINE - strlen(buf), ": %s", strerror(
                    error));
    strcat(buf, "\n");
    fflush(stdout);/* in case stdout and stderr are the same */
    fputs(buf, stderr);
    fflush(NULL);/* flushes all stdio output streams */
}

/*
 *  * Fatal error unrelated to a system call.
 *   * Print a message and terminate.
 *    */
void err_quit(const char *fmt, ...)
{
    va_list ap;

    va_start(ap, fmt);
    err_doit(0, 0, fmt, ap);
    va_end(ap);
    exit(1) ; // process terminate, not just like return, totally different
}

/*
 *  * Fatal error related to a system call.
 *   * Print a message and terminate.
 *    */
void err_sys(const char *fmt, ...)
{
    va_list ap;

    va_start(ap, fmt);
    err_doit(1, errno, fmt, ap);
    va_end(ap);
    exit(1) ;
}

/*
 * Nonfatal error related to a system call.
 * Print a message and return.
 */
void err_ret(const char *fmt, ...)
{
	va_list		ap;

	va_start(ap, fmt);
	err_doit(1, errno, fmt, ap);
	va_end(ap);
}
# libApueSunyj.a
libApueSunyj.a: error.o
	ar cr libApueSunyj.a error.o
error.o: error.cpp apuesunyj.h
	g++ -c -g error.cpp -o error.o
clean:
	rm error.o libApueSunyj.a
时间: 2024-11-11 03:16:50

APUE_公共库与头文件的相关文章

cocos2d-x3.2如何添加LIb库及头文件的步骤

在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录. 然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名. 3.添加工程引用的dll动态库:把引用的dll放到工程的可执行文件

VS2013如何添加LIb库及头文件的步骤

在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录.         然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名. 3.添加工程引用的dll动态库:把引用的dll放到

一点一点学写Makefile(3)-增加第三方库和头文件

我们在写代码的时候不一定都是有自己来完成,一个工程中会大量使用一些比较优秀的动态库.静态库等,我们在使用这些库完成所有的代码后,需要在编译的时候将这些库使用的头文件添加到我们的工程上,将他的库文件也添加到我们的工程中,接下来我们就来看一下怎么来添加. 我们在项目中很少将第三方库与我们自己的代码放到同一个目录中,而是有一些约定俗成的存放方法: 如上图,我们会将第三方库的头文件放到include文件夹,将第三方的静态库放到lib文件夹,将动态库放到bin文件夹,(注:如果是使用开源库尽可能使用静态库

用 #include &lt;filename.h&gt; 格式来引用标准库的头文件

用 #include <filename.h> 格式来引用标准库的头文件(编译器将从 标准库目录开始搜索). 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 5 6 using namespace std; 7 8 //定义结构 9 struct stud

用 #include “filename.h” 格式来引用非标准库的头文件

用 #include "filename.h" 格式来引用非标准库的头文件(编译器将 从用户的工作目录开始搜索) 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 using namespace std; 5 //参数带有默认值的函数 6 disp(

linux下编译时的默认库和头文件搜索路径

链接库路径 默认的链接库路径,定义在搜索/etc/ld.so.conf下的一些路径,其包含了一些重要的系统位置:LIBRARY_PATH, 但如果定义了LD_LIBRARY_PATH, 动态库的搜索路径会先去该环境变量下搜索 但如果定义了LIBRARY_PATH, 静态库的搜索路径会先去该环境变量下搜索 默认的头文件位置 还没找到默认头文件定义的配置文件,与系统,编译器等都有关系,但可以通过以下命令查看 cpp -v /dev/null -o /dev/null 除此之外,可以通过设置C_INC

动态库,头文件,命令搜索路径

Linux操作系统上面的动态共享库大致分为三类: 1.操作系统级别的共享库和基础的系统工具库 比方说libc.so, libz.so, libpthread.so等等,这些系统库会被放在/lib和/usr/lib目录下面,如果是64位操作系统,还会有/lib64和/usr /lib64目录.如果操作系统带有图形界面,那么还会有/usr/X11R6/lib目录,如果是64位操作系统,还有/usr/X11R6 /lib64目录.此外还可能有其他特定Linux版本的系统库目录.这些系统库文件的完整和版

Golang使用pkg-config自动获取头文件和链接库的方法

为了能够重用已有的C语言库,我们在使用Golang开发项目或系统的时候难免会遇到Go和C语言混合编程,这时很多人都会选择使用cgo. 话说cgo这个东西可算得上是让人又爱又恨,好处在于它可以让你快速重用已有的C语言库,无需再用Golang重造一遍轮子,而坏处就在于它会在一定程度 上削弱你的系统性能.关于cgo的种种劣迹,Dave Cheney大神在他的博客上有一篇专门的文章<cgo is not Go>,感兴趣的同学可以看一看.但话说回来,有时候为了快速开发满足项目需求,使用cgo也实在是不得

第三方库引用,头文件和库文件

头文件:c/c++,将第三方库的头文件所在文件夹包含进去 .cpp文件:link->debug里,将第三方库的lib(静态库)或者dll(动态库)的所在文件夹包含进去 头文件中有函数的申明,库文件实现函数的定义. 比如,printf函数.使用时应包括stdio.h,打开stdio.h你只能看到,printf这 个函数的申明,却看不到printf具体是怎么实现的,而函数的实现在相应的C库 中.而库文件一般是以二进制形式而不是C源文件形式提供给用户使用的.程序 中包括了stdio.h这个头文件.链接