如何在#ifdef标识符和#ifndef标识符中声明标识符

问题描述 投票:0回答:2
    #ifdef MATHLIBRARY_EXPORTS
    #define MATHLIBRARY_API __declspec(dllexport)

如何确定上面的标识符?

MATHLIBRARY_API
从哪里来?

    #else
    #define MATHLIBRARY_API __declspec(dllimport)
    #endif
'//another example'
    #ifdef BUILD_DLL
    `same question here.where BUILD_DLL came from?'
        #define DLL_EXPORT __declspec(dllexport)
     
    #else
        #define DLL_EXPORT __declspec(dllimport)
    #endif

我正在努力为 dll 制作头文件,我对此非常有信心。 我很困惑在

#ifdef
#ifndef
指令之后应该使用什么标识符。

c++ dll header-files dllexport ifndef
2个回答
1
投票

#ifdef
#ifndef
是被动的,它们不创建标识符,它们测试标识符是否存在。如果您想创建标识符,请使用
#define

在许多编译器或预处理器中,它们都有一个标识符表。

#ifdef
#if defined
相同,这意味着您正在测试标识符是否已定义,即它在表中。


1
投票

询问

MATHLIBRARY_API
来自哪里似乎不协调,因为它是在代码中定义的。我怀疑你实际上是在问
MATHLIBRARY_EXPORTS
(因为你后来问了
BUILD_DLL
这符合我的怀疑)所以我将以此为基础回答这个问题。

定义通常发生在两个地方之一:

  1. 来自流程早期的
    #define
    。您可以在代码中看到它的定义,例如
    DLL_EXPORT
  2. 作为编译器标志,例如
    -D MATHLIBRARY_EXPORTS
© www.soinside.com 2019 - 2024. All rights reserved.