标签: c-preprocessor

#pragma警告禁用代码列表及其含义

禁用警告的语法如下:

#pragma warning disable 414, 3021
Run Code Online (Sandbox Code Playgroud)

或者,更一般地表达:

#pragma warning disable [CSV list of numeric codes]
Run Code Online (Sandbox Code Playgroud)

是否有这些数字代码的列表以及它们要抑制的警告的描述?令我懊恼的是,我似乎无法通过谷歌找到它.

c# pragma c-preprocessor

25
推荐指数
3
解决办法
3万
查看次数

C预处理器是否删除了"&*"的实例?

我正在玩,gcc并尝试了以下一些代码:

int A = 42;
int *B = &A;
int *C = &*B;
Run Code Online (Sandbox Code Playgroud)

并且C == &A,正如所料.但是当我尝试:

int *B = NULL;
int *C = &*B;
Run Code Online (Sandbox Code Playgroud)

原来C == NULL,没有段错误.因此,在获取其地址之前&*B实际上并未解除引用B.

我的猜测是预处理器剥离出来的情况下,&**&之前,他们甚至得到了编译器,因为他们否定对方,但我无法找到任何文件,以验证这是否是标准ç或编译器特定的.

被预处理器剥离出来&*,并*&和我可以期待从任何给定的编译器这种行为?

c standards addressof indirection c-preprocessor

25
推荐指数
2
解决办法
1208
查看次数

可以轻松检测__VA_OPT__支持?

在C++ 20中,__VA_OPT__如果参数的数量大于零,则预处理器支持作为可选地扩展可变参数宏中的标记的方法.(这消除了对##__VA_ARGS__GCC扩展的需求,这是一个不可移植且丑陋的黑客.)

Clang SVN已实现此功能,但尚未为其添加功能测试宏.任何聪明的预处理器黑客能否找到一种方法来检测__VA_OPT__支持的存在与否,而不会导致硬错误或可移植性警告?

c++ c-preprocessor c++20

25
推荐指数
3
解决办法
3737
查看次数

C语言中宏定义的良好编程实践(#define)

例如,永远不要像这样定义一个宏:

#define DANGER 60 + 2
Run Code Online (Sandbox Code Playgroud)

当我们执行这样的操作时,这可能是危险的:

int wrong_value = DANGER * 2; // Expecting 124
Run Code Online (Sandbox Code Playgroud)

相反,定义这样,因为你不知道宏的用户如何使用它:

#define HARMLESS (60 + 2)
Run Code Online (Sandbox Code Playgroud)

这个例子很简单,但这几乎解释了我的问题.在编写宏时,您会建议使用哪些指南或最佳实践吗?

谢谢你的时间!

c c-preprocessor

24
推荐指数
6
解决办法
2万
查看次数

ASPX页面中的#DEBUG预处理程序语句

我正在尝试在ASPX页面中使用预处理程序指令,但页面无法识别它.这只是我不能做的事情吗?

背景:我试图在DEBUG模式中包含完整版本的jQuery(for,well,debugging =)),以及用于发布的缩小版本.我尝试过这个,但我对ASPX <%语法并不十分熟悉.我只是从根本上误解了这种语法的作用吗?

<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>
Run Code Online (Sandbox Code Playgroud)

c# asp.net c-preprocessor

24
推荐指数
3
解决办法
1万
查看次数

头文件中的变量定义

我对C和编译过程的基本知识最近变得生疏.我试图找出以下问题的答案,但我无法连接编译,链接和预处理阶段基础知识.快速搜索谷歌也没什么帮助.所以,我决定来到最终的知识来源:)

我知道:不应该在.h文件中定义变量.可以在那里宣布它们.

原因:因为头文件可能包含在多个位置,因此重新定义变量多次(链接器给出错误).

可能的解决方法:在头文件中使用header-guard并在其中定义变量.

它真的是一个解决方案:不.因为标题保护是用于预处理阶段.那就是告诉编译器这部分已经包含在内并且不再包含它.但是我们的多重定义错误来自链接器部分 - 在编译之后很久.

整件事让我对预处理和链接的工作方式感到困惑.如果已经定义了头部保护符号,我认为预处理将不包括代码.在那种情况下,不应该解决变量问题的多重定义吗?

这些预处理指令会在标题保护下重新定义编码过程,但是链接器仍会获得符号的多个定义,会发生什么?

c linker include-guards header-files c-preprocessor

24
推荐指数
4
解决办法
3万
查看次数

记录预处理器在Doxygen中定义

是否有可能在Doxygen中记录预处理器定义?我希望能够像变量或函数那样做,但Doxygen输出似乎"丢失"了定义的文档,并且也不包含定义本身.

我尝试了以下内容

/**My Preprocessor Macro.*/
#define TEST_DEFINE(x) (x*x)
Run Code Online (Sandbox Code Playgroud)

/**@def TEST_DEFINE

   My Preprocessor Macro.
*/
#define TEST_DEFINE(x) (x*x)
Run Code Online (Sandbox Code Playgroud)

我也尝试将它们放在一个组(尝试defgroup,addtogroup和ingroup)中,而不仅仅是在"文件范围",但是也没有效果(尽管组中的其他项目是按照预期记录的).

我查看了各种Doxygen选项,但看不到任何可以启用(或阻止)文档定义的内容.

c++ doxygen c-preprocessor

24
推荐指数
2
解决办法
3万
查看次数

如何查看Visual C++预处理器的输出?

我希望在我的代码上看到Visual C++预处理器的输出 - 即相当于gcc -E.对于我的生活,我找不到相关的编译器开关.我该如何做到这一点?

c++ visual-c++ c-preprocessor

24
推荐指数
2
解决办法
2万
查看次数

当#defines正在使用其他#defines时,顺序是否重要?

根据这个问题的答案,以下代码是合法的:

#define three 3
#define nine three*3

int main()
{
    std::cout << nine;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,它编译并运行良好.但是,上述问题的答案还指出,应该注意这些#define指令的顺序,并且#define应该在它们之前定义将在其他s中使用的指令.但是以下代码:

#define nine three*3
#define three 3

int main()
{
    std::cout << nine;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译并运行良好,并打印"9".

我的编译器是否让我轻松,或者订单确实与使用其他#defines的#defines无关?编译是否会在更复杂的项目中失败?

值得一提的是,上述问题涉及C,而我的代码是C++.这是(假设的)行为差异的来源吗?

c++ operator-precedence c-preprocessor

24
推荐指数
2
解决办法
3559
查看次数

用于定义数字的数字常量之前的预期非限定id

我是C++的新手,所以我不知道他们在phidget-code示例中对这个错误的含义是什么:

Main.cpp:8:16:错误:数字常量之前的预期unqualified-id

//verander de volgende informatie naar de informatie voor jouw database

#define dserver "oege.ie.hva.nl"
#define duser "username"
#define dpassword "password"
#define ddatabase "databasename"

#define homeid 1234 //line 8
Run Code Online (Sandbox Code Playgroud)

有语法错误吗?或者是其他东西?我使用#define而不是int.

编辑:添加完整的错误日志..

完整的错误日志:http://pastebin.com/3vtbzmXD

完整的main.cpp代码:http://pastebin.com/SDTz8vni

c++ syntax c-preprocessor

24
推荐指数
2
解决办法
7万
查看次数