标签: c-preprocessor

什么时候可以在#include指令中省略文件扩展名?

我正在玩gmock并注意到它包含这一行:

#include <tuple>
Run Code Online (Sandbox Code Playgroud)

我原以为是tuple.h.

什么时候可以排除扩展名,它是否赋予指令不同的含义?

c++ standards include c-preprocessor

44
推荐指数
5
解决办法
1万
查看次数

C预处理器测试多个宏的定义

我搜索了网站,但没有找到我正在寻找的答案,所以这里是一个非常快速的问题.

我想做那样的事情:

#ifdef _WIN32 || _WIN64
     #include <conio.h>
#endif
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我知道_WIN32是为32位和64位窗口定义的,所以我可以用于Windows检测.我更感兴趣的是我是否可以使用预处理程序指令这样的逻辑运算符,如果是,如何,因为上述方法不起作用.

用gcc编译我得到:

警告:#ifdef指令结束时的额外令牌,它基本上只需要第一个MACRO并忽略其余的.

c logical-operators c-preprocessor preprocessor-directive

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

如何使用gcc在命令行中取消定义

我如何在编译时使用gcc取消定义编译器宏.我尝试了一些编译args到gcc像-D但我无法看到"未定义"的消息.

谢谢

#include <iostream>

#define MYDEF


int main(){
#ifdef MYDEF
  std::cout<<"defined\n";
#else
  std::cout<<"not defined\n";
#endif

}
Run Code Online (Sandbox Code Playgroud)

macros gcc c-preprocessor

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

是否可以在C中打印预处理器变量?

是否可以在C中打印到stderr预处理器变量的值?例如,我现在拥有的是:

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR is greater than 10
#endif
Run Code Online (Sandbox Code Playgroud)

但我想做的是:

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR=%PP_VAR%
#endif
Run Code Online (Sandbox Code Playgroud)

C中这样的事情可能吗?

c variables c-preprocessor

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

在C++ 11中应该首先发生什么:原始字符串扩展还是宏?

此代码适用于Visual C++ 2013,但不适用于gcc/clang:

#if 0
R"foo(
#else
int dostuff () { return 23; }
// )foo";
#endif
dostuff();
Run Code Online (Sandbox Code Playgroud)

Visual C++首先删除if 0.Clang首先扩展R原始字符串(并且永远不会定义dostuff).谁是对的,为什么?

c++ rawstring c-preprocessor c++11

42
推荐指数
1
解决办法
1819
查看次数

#include指令:相对于哪里?

我查看了C++编程语言,试图找到答案.当我#include "my_dir/my_header.hpp"在标题中,它在哪里寻找这个文件?是相对于包含它的源文件或其他内容的标题?

c++ include c-preprocessor

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

C/C++,您可以将文件#include到字符串文字中吗?

我有一个C++源文件和一个Python源文件.我希望C++源文件能够将Python源文件的内容用作大字符串文字.我可以这样做:

char* python_code = "
#include "script.py"
"
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为每条线的末尾都需要.我可以手动复制并粘贴Python代码的内容,并用引号和终止\n包围每一行,但这很难看.即使python源有效地编译到我的C++应用程序中,我也希望将它保存在一个单独的文件中,因为它更有条理,并且对编辑器更有效(emacs不够聪明,无法识别C字符串文字是python代码,当你在里面时切换到python模式).

请不要建议我使用PyRun_File,这是我首先要避免的;)

c c++ include string-literals c-preprocessor

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

C预处理器,对宏的结果进行字符串化

我想将宏扩展的结果字符串化.

我试过以下内容:

#define QUOTE(str) #str
#define TEST thisisatest
#define TESTE QUOTE(TEST)
Run Code Online (Sandbox Code Playgroud)

并且TESTE扩展到:"TEST",而我正试图获得"thisisatest".我知道这是预处理器的正确行为,但任何人都可以帮我找到另一种方法吗?

Using TESTE #TEST is not valid
Using TESTE QUOTE(thisisatest) is not what I'm trying to do
Run Code Online (Sandbox Code Playgroud)

stringification c-preprocessor

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

C中是否允许空宏定义?他们的表现如何?

假设"空"宏定义

#define FOO
Run Code Online (Sandbox Code Playgroud)

它是有效的标准C吗?如果是这样,FOO这个定义之后是什么?

c c-preprocessor

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

可以通过参数的数量来重载宏吗?

如何做这项工作?如何实现C99/C++ 11可变参数宏以根据给出多少参数来扩展到不同的东西?

c c++ overloading c-preprocessor variadic-macros

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