我提供了使用float或double类型编译程序的选项,但是有一个问题:我需要手动设置GL_FLOAT或GL_DOUBLE,因为我不知道如何执行以下操作:typedeffloatMYTYPE;#ifMYTYPE==float#defineGL_MYTYPEGL_FLOAT//usedforvertexarrayparameters.#else#defineGL_MYTYPEGL_DOUBLE#endif注意:我没有C++11或其他任何东西,只有很好的旧C++。 最佳答案 在C++11中,您可以使用std::conditional和s
我想在我的代码中的几个地方开始使用枚举,但我对编译器之前的声明有疑问。目前枚举的声明方式对我来说最有意义:避免这种情况的最佳方法是什么?enumscore_methods_t{NONE,ABS_FROM_PERFECT,ERROR_SQUARED};enumscale_methods_t{NONE,CASES_MULTIPLIER,RANGE_MULTIPLIER};我应该让所有东西都独一无二,还是让命名空间成为范围?我想在类中使用枚举类型,NONE是最具描述性的名称!枚举冲突的另一个原因是因为本质上它们只是引擎盖下的#defines?? 最佳答案
我正在努力从弗兰肯斯坦和一个文件数千行的程序转变为结构良好、组织良好的多文件程序。现在看起来很自然(天真)的是为我的三个文件制作一个包含标题的三角恋:file_1包括file_2、file_4file_2包括file_3、file_4file_3包括file_1....等等等等这些文件具有我在其他文件之间需要的变量、方法、结构等。当然,我遇到了双重包含错误。我的问题:我应该通过在header中使用预处理器指令(例如,完全在header中包括结构、方法等)来避免这些问题,还是应该使用makefile进行编译(我hear也可以用来解决这个问题---但我从来没有做过)?
我需要用C/C++写这样一个定义#definescanf(fscanf(inf,为了将每个scanf(替换为fscanf(inf,literary但是我不知道怎么...谢谢 最佳答案 您想使用Variadicmacro.在你的情况下,我相信你想要:#definescanf(...)fscanf(inf,__VA_ARGS__) 关于c++-#define在C/C++中的用法,我们在StackOverflow上找到一个类似的问题: https://stackov
如何使用预处理器条件编译模板函数?像那样(但它不起作用):templatevoidf(){#if(var==true)//...#endif} 最佳答案 你不能。顾名思义,预处理器在编译器之前处理源文件。因此它不知道您的模板参数的值。 关于c++-预处理器和模板参数或代码段的条件编译,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/13378025/
我正在尝试编写一些可移植的C++库代码,这些代码最初将依赖于Boost.Regex,然后在编译器支持时转移到TR1,并在从std转移后最终转移到C++0x规范::tr1命名空间到标准。下面是我想用预处理器做的一些伪代码:if(exists(regex))//checkifIcan#include{#include//perTR1if(is_namespace(std::tr1))//areweonTR1orC++0x?{usingstd::tr1::regex;}else{usingstd::regex;}}else//fall-backtoboost{#includeusingboo
我需要知道C++中的#define指令是否声明了全局标签?我所说的全局是指在每个文件中都可见吗?我正在使用VisualStudio2008,(猜猜这是否重要) 最佳答案 不,仅在当前翻译单元中。即每个具有#define的文件,或包含具有#define的文件的每个文件都将看到定义。编辑,以回应您的评论:要在每个文件中获得一个定义,要么将其放在随处包含的header中,要么使用一些编译器选项来添加定义。例如对于gcc一个会做gcc-Dthedefine=itsvalue不确定如何在VC++中指定此类包含,但我确信它有可能以某种方式实现。
#defineN10;intmain(){intx;for(inti=0;i用g++编译的结果:test-define.cpp:Infunction‘intmain()’:test-define.cpp:7:22:error:expectedprimary-expressionbefore‘;’tokentest-define.cpp:7:22:error:expected‘)’before‘;’tokentest-define.cpp:7:24:error:namelookupof‘i’changedforISO‘for’scoping[-fpermissive]test-defin
我遇到了这个断言示例,想知道#的用途:#defineASSERT(x)if(!(x)){\int*p=NULL;\DBGPRINTF("Assertfailed:[%s]\r\nHalting.",#x);\*p=1;\} 最佳答案 它是“stringize”预处理操作符。它将标记作为参数传递给宏参数x并将它们转换为字符串文字。#defineASSERT(x)#xASSERT(abcd)//isreplacedby"abcd" 关于c++-使用%s格式化时#的作用是什么,我们在Stack
我有以下代码片段:#ifdefDO_LOG#definelog(p)record(p)#else#definelog(p)#endifvoidrecord(char*data){..........}现在如果我在我的代码中调用log("helloworld")而DO_LOG没有定义,该行是否会被编译,换句话说它会吃掉增加字符串“helloworld”的内存?附言程序中record调用较多,对内存敏感,有没有其他方法可以条件编译,只依赖于#defineDO_LOG? 最佳答案 通过检查生成的二进制文件来自行验证这应该是微不足道的。我会