请教大家关于代码中 #ifdef #ifndef 之类的问题, 在哪里找到或是定义这些变量,百分诚心求教(4号字体,大行间距,易于阅读)
请教大家关于头文件中 #ifdef #ifndef 之类的问题在linux中下一些源码来看,经常会在.c 文件中看到类似于下面的关于 #if #ifdef #ifndef 的语句
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
/* if compiling for Windows, use this separate set
(too difficult to ifdef all the autoconf defines) */
#ifdef WIN32
/*** Windows includes ***/
#else
/*** autoconf includes ***/
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <signal.h>
#include <getopt.h>
#include <stdarg.h>
#include <netinet/in.h>
#include "config.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif /* HAVE_UNISTD_H */
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif /* HAVE_STDLIB_H */
#include <string.h>
#include <stddef.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#if HAVE_SYS_FILE_H
#include <sys/file.h>
#endif /* HAVE_SYS_FILE_H */
#ifdef IPV6
#include <netinet/icmp6.h>
#endif
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <arpa/inet.h>
#include <netdb.h>
/* RS6000 has sys/select.h */
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif /* HAVE_SYS_SELECT_H */
#endif /* WIN32 */
#include "options.h"
/*** externals ***/
extern char *optarg;
extern int optind,opterr;
extern int h_errno;
#ifdef __cplusplus
}
#endif /* __cplusplus */
比如#ifdef __cplusplus, #ifdef WIN32
更莫名其妙的如 #ifdef HAVE_STDLIB_H,#ifdef HAVE_UNISTD_H
这些都是什么意思, 我大体明白是说 如果定义了神码神码 就神码神码 之类
关键是我从哪里知道定义还是没有定义这些东西?
下载下来的源码在安装是一般会有 $ ./configure 这一步, 难道是这个配置过程中就自动检测了
机器已经定义了哪些变量?
gcc 编译器在编译时候有 -D name 这个选项 , name 可以是个宏,
难道从这个-D 这里也可以指定 定义哪些变量?
还有就是 最上面那个extern "C" 也经常看到, 又是什么意思?
类似于HAVE_STDLIB_H , HAVE_UNISTD_H 之类,它们的出处是哪里,从哪里可以找到,
我好像在gcc 的 predefined macros 中没有看到这几个变量
问题太多, 对不住了, 这个问题对我来说值200分,那就先放100分上来
诚心求教,希望大家支持
[ 本帖最后由 madfrogme 于 2012-11-9 01:45 编辑 ]