【问题标题】:MSVC 2010 project-wide macro with parameters带参数的 MSVC 2010 项目范围宏
【发布时间】:2012-11-21 15:05:03
【问题描述】:

我正在尝试为包含的代码创建一个 Visual Studio 项目

DL_EXPORT(void) initlua(void);

所以我基本上需要一个类似的宏

#define DL_EXPORT(retVal) __declspec(dllexport) retVal

哪个有效,但特定于操作系统/编译器,所以我想把它放在项目中*。但我不知道在 Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions (或在命令行中)放什么来做到这一点。我认为这两种方法都可以:

DL_EXPORT(retVal) __declspec(dllexport) retVal
DL_EXPORT(retVal)=__declspec(dllexport) retVal

我倾向于后者,但似乎都不起作用 - 编译时出现以下错误:

error C2061: syntax error : identifier 'initlua'
error C2059: syntax error : ';'
error C2059: syntax error : 'type'

使用 /P 编译以获得预处理器结果解释了原因:什么都没发生,因此编译器将其解释为 int DL_EXPORT(void) 并期望 ;

定义的正确语法是什么?还是没有,正如this question 中的人们所假设的那样?

谢谢。

* 我没有对 MSVC 使用简单的#ifdef-check,因为我只是想用我不想破坏的现有构建脚本为现有库(疯狂的 python)创建一个 Visual Studio 项目。虽然我当然可以使用#ifndef DL_EXPORT - 但我仍然想知道我是否遗漏了什么,或者这在 Visual Studio 中是不可能做到的。

【问题讨论】:

  • AFAIK,不可能在 cl 的命令行上定义类似函数的宏。

标签: c++ visual-c++


【解决方案1】:

我认为应该可以在命令行上使用/FI 来指定一个包含文件以自动包含在每个源文件中。在该文件中,您放置您需要的 #define 语句。

【讨论】:

  • 是的,这就是我目前正在使用的解决方法。只是想知道 /D 是否也可以。
猜你喜欢
  • 2011-02-26
  • 2013-12-29
  • 2012-02-29
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 2013-04-12
相关资源
最近更新 更多