展开

关键词

PHP源码中的条件编译定义

根据不同情况编译不同代码、产生不同目标文件的机制,称为条件编译有这些预处理命令:#if、#elif、#else #endif ;#ifdef #else #endifPHP源码:#ifdef SERIALIZE_HEADERS smart_str_free(&vec_str) 宏定义VEC_FREE()#else 如果不存在 # define VEC_FREE() do {} while (0) 宏定义空操作#endif#ifdef 宏定义空操作#endif练习: #if _WIN32 printf(windows系统 n); #elif __linux__ printf(linux系统 n); #else printf(其他系统 n); #endif #ifdef N printf(存在宏定义N n); #else printf(不存在宏定义N n); #endif

30440

c语言边角料5:一个跨平台的头文件

defined(_WIN32) || defined(__WIN32__) #define MY_WIN32#elif defined(linux) || defined(__linux) || defined(__ linux__) #define MY_LINUX#endif #if defined(MY_WIN32) #ifdef MY_API_STATIC #ifdef __cplusplus #define MY_API extern C #else #define MY_API #endif #else #ifdef MY_API_EXPORTS #ifdef __cplusplus #define MY_API extern C __declspec(dllexport) #else #define MY_API __declspec(dllexport) #endif #else #ifdef __cplusplus (dllimport) #else #define MY_API __declspec(dllimport) #endif #endif #endif#elif defined(MY_LINUX) #ifdef

10230
  • 广告
    关闭

    11.11智惠云集

    2核4G云服务器首年70元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言头文件防卫式声明

    条件编译的几种格式格式 1#ifdef 标识符   程序段代码1#else   程序段代码2#endif作用:当标识符被定义过,则对程序段代码 1 进行编译,否则对程序段 2 进行编译。 平时,在进行程序调试过程中,需要输出一些信息方便调试,在调试结束后,不需要这些信息输出,我们可以这样处理:#define DEBUG然后在代码中需要输出调试信息的地方,写一些输出信息,例如:#ifdef 例如;if __Linux__   Linux专有函数代码#elif _Win32   windows专有函数代码#else   其他平台专有函数代码#endif2 头文件防卫式声明在多文件包含的情况下

    1912519

    头文件防卫式声明

    条件编译的几种格式格式 1#ifdef 标识符 程序段代码1#else 程序段代码2#endif 作用:当标识符被定义过,则对程序段代码 1 进行编译,否则对程序段 2 进行编译。 平时,在进行程序调试过程中,需要输出一些信息方便调试,在调试结束后,不需要这些信息输出,我们可以这样处理:#define DEBUG然后在代码中需要输出调试信息的地方,写一些输出信息,例如:#ifdef 例如;if __Linux__ Linux专有函数代码#elif _Win32 windows专有函数代码#else 其他平台专有函数代码#endif 2 头文件防卫式声明在多文件包含的情况下,有些变量何你可能被直接的或者间接的重复定义

    16920

    libuv源码阅读(18)--progress

    = -1) return 0; #ifdef __linux__ err = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); if (err < 0) return UV ) { const void* buf; ssize_t len; int fd; int r; buf = ; len = 1; fd = loop->async_wfd; #if defined(__

    8710

    arean.c

    . * #define HEAP_MIN_SIZE (32*1024) #ifndef HEAP_MAX_SIZE # ifdef DEFAULT_MMAP_THRESHOLD_MAX # define __linux__ * In NPTL, unlocking a mutex in the child process after a    fork() is currently unsafe, whereas defined NO_THREADS * * Initialization routine. * #ifdef _LIBC #include extern char **_environ; static 2 : 8))   mp_.arena_test = NARENAS_FROM_NCORES (1);   narenas = 1; #endif } #ifdef _LIBC # ifdef SHARED secure) { if (memcmp (envline, MMAP_MAX_, 9) == 0)          mALLOPt(M_MMAP_MAX, atoi(&envline)); #ifdef

    35030

    提高代码逼格的利器:宏定义-从入门到放弃

    这里举 3 个例子,在代码中经常看到的关于条件编译:示例1:用来区分 C 和 C++ 代码#ifdef __cplusplus extern C { #endif void hello(); #ifdef hello 就不会被 g++ 编译器改写,因此就可以被 C 代码来调用;示例2:用来区分不同的平台#if defined(linux) || defined(__linux) || defined(__ WIN32) || defined(_WIN32) Sleep(1000 * 1000); 调用 Windows 平台下的库函数(第一个字母是大写)#endif 那么,这些 linux, __linux, __ 示例3:在编写 Windows 平台下的动态库时,声明导出和导入函数#if defined(linux) || defined(__linux) || defined(__linux__) #define LIBA_API #else #ifdef LIBA_STATIC #define LIBA_API #else #ifdef LIBA_API_EXPORTS #define LIBA_API __

    13240

    深度:震惊世间的惊人代码(附完整代码)

    iteration y = y * ( threehalfs - ( x2 * y * y ) ); 2nd iteration, this can be removed #ifndef Q3_VM #ifdef __linux__ assert( ! iteration y = y * ( threehalfs - ( x2 * y * y ) ); 2nd iteration, this can be removed #ifndef Q3_VM #ifdef __linux__ assert( !

    15810

    【redis6.0.6】redis源码慢慢学,慢慢看 -- 第四天:提纲掣领main函数(server)

    第一块#ifdef REDIS_TEST if (argc == 3 && !strcasecmp(argv, test)) { if (! 第二块#ifdef INIT_SETPROCTITLE_REPLACEMENT spt_init(argc, argv);#endif初始化库第三块 setlocale(LC_COLLATE,); 更改字符编码 ) { * Things not needed when running in Sentinel mode. * serverLog(LL_WARNING,Server initialized); #ifdef __linux__ linuxMemoryWarnings(); 打印内存警告 #endif moduleLoadFromQueue(); ACLLoadUsersAtStartup(); InitServerLast

    17030

    libuv源码阅读(8)--idle-compute

    HAVE_PREADV result = preadv(req->file, (struct iovec*) req->bufs, req->nbufs, req->off);#else# if defined(__ ) retry:# endif { result = uv__fs_preadv(req->file, req->bufs, req->nbufs, req->off); }# if defined(__ = req->bufsml) uv__free(req->bufs); req->bufs = NULL; req->nbufs = 0; #ifdef __PASE__ * PASE returns ) { const void* buf; ssize_t len; int fd; int r; buf = ; len = 1; fd = loop->async_wfd; #if defined(__

    7510

    NDK--app卸载监听

    include core_jni_helpers.h #include #include #include #include #include #include #include #if defined(__ jmethodID method_onEvent; static jint android_os_fileobserver_init(JNIEnv* env, jobject object){#if defined(__ endif} static void android_os_fileobserver_observe(JNIEnv* env, jobject object, jint fd){#if defined(__ android_os_fileobserver_startWatching(JNIEnv* env, jobject object, jint fd, jstring pathString, jint mask){ int res = -1; #if defined(__ void android_os_fileobserver_stopWatching(JNIEnv* env, jobject object, jint fd, jint wfd){#if defined(__

    22840

    牛顿迭代法(Newtons Method)

    9 y = y * ( threehalfs - ( x2 * y * y ) ); 2nd iteration, this can be removed10 #ifndef Q3_VM #11 ifdef __linux__ assert( !

    75650

    一文教你搞懂C语言的Q格式

    iteration y = y * ( threehalfs - ( x2 * y * y ) ); 2nd iteration, this can be removed #ifndef Q3_VM #ifdef __linux__ assert( !

    92530

    Redis源码笔记-初步

    *#ifdef HAVE_EVPORT#include ae_evport.c#else#ifdef HAVE_EPOLL#include ae_epoll.c#else#ifdef HAVE_KQUEUE ae_kqueue.c#else#include ae_select.c#endif#endif#endif 宏HAVE_EVPORT、HAVE_EPOLL、HAVE_KQUEUE则在config.h中决议出: #ifdef  __sun#include#ifdef _DTRACE_VERSION#define HAVE_EVPORT 1#endif#endif#ifdef __linux__#define HAVE_EPOLL

    1.2K20

    #if 和#ifdef的区别

    TARGET_LITTLE_ENDINA和TARGET_BIG_ENDINA定义成0或者1,甚至后面不写这个0或者1 ,调用的都是little endina函数,这段代码是有问题的,就是没有理解#if和#ifdef #ifdef的使用#if后面接的是一个宏#ifdef (x) ...code... #endif这个#ifdef 它不管里面的“x”的逻辑是“真”还是“假”,它只管这个程序前面的宏定义里面有没有定义“x”这个宏(即在这里#define  x 1和#define  x 0等效,都等同于# #if defined的使用#if defined() 的使用和#ifdef的用法一致#if !defined()又和 #ifndef 的用法一致。 第二:别忘了#endif明白了之间的区别问题就变得非常的容易,修改上述代码只要把其中的#ifdef改成#if就可以达到目的。

    51780

    #if和#ifdef的区别

    #ifdef 和 #ifndef常用于解决头文件重复包含的问题。#ifdef的使用#ifdef的使用和#if defined()的用法一致#ifndef又和#if !defined()的用法一致。

    43730

    #ifdef宏名和#ifndef宏名

    #ifdef宏名:#include#includeusing namespace std;#define dhy 定义宏名int main(){#ifdef dhy 如果宏名定义了执行ifdef代码 cout

    8220

    Redis(一):服务启动及基础请求处理流程源码解析

    redisServer server; srcserver.c int main(int argc, char **argv) { struct timeval tv; int j; 测试环境变量设置#ifdef *#ifdef INIT_SETPROCTITLE_REPLACEMENT spt_init(argc, argv)ziplistTest;#endif 设置些默认值, 随机数等等 setlocale when running in Sentinel mode. * serverLog(LL_WARNING,Server started, Redis version REDIS_VERSION); #ifdef __linux__ linuxMemoryWarnings(); #endif 从磁盘装载数据进行恢复或者初始化 loadDataFromDisk(); if (server.cluster_enabled HAVE_EVPORT#include ae_evport.c#else #ifdef HAVE_EPOLL #include ae_epoll.c #else #ifdef HAVE_KQUEUE

    15620

    在Node.js中使用SO_RESUEPORT

    #if defined(SO_REUSEPORT) && defined(__linux__) on = 1; if ((flags & UV_TCP_REUSEPORT) && setsockopt( 首先导出一个新的常量#if defined(SO_REUSEPORT) && defined(__linux__) NODE_DEFINE_CONSTANT(constants, UV_TCP_REUSEPORT

    9630

    delphi各个版本编译开关值

    delphi各个版本编译开关值 {$IFDEF VER80} - Delphi 1{$IFDEF VER90} - Delphi 2{$IFDEF VER100} - Delphi 3{$IFDEF VER120 } - Delphi 4{$IFDEF VER130} - Delphi 5{$IFDEF VER140} - Delphi 6{$IFDEF VER150} - Delphi 7{$IFDEF VER160 } - Delphi 8{$IFDEF VER170} - Delphi 2005{$IFDEF VER180} - Delphi 2006{$IFDEF VER180} - Delphi 2007{$ IFDEF VER185} - Delphi 2007{$IFDEF VER200} - Delphi 2009{$IFDEF VER210} - Delphi 2010{$IFDEF VER220} - Delphi XE{$IFDEF VER230} - Delphi XE2{$IFDEF VER240} - Delphi XE3{$IFDEF VER250} - Delphi XE4{$IFDEF

    28120

    相关产品

    • 云服务器

      云服务器

      腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券