jjzjj

c-preprocessor

全部标签

c++ - #包括任何地方

是#include仅用于header,还是只是机械的“在此处注入(inject)此代码”,可以在代码中的任何位置使用?如果我在cpp函数的中间使用它来从单一来源“注入(inject)”代码会怎样?这会奏效还是编译器会为此大喊大叫? 最佳答案 它是机械在此处注入(inject)代码设备。如果您愿意,可以包含一个包含歌德浮士德的文本文件。你可以把它放在任何地方,甚至在函数的中间(当然,#include需要换行!)。但是,仅对头文件使用#include是一种严格的约定。可能有一些我不会反对的原因,例如提取机器生成的代码或将所有翻译单元合并

c++ - #包括任何地方

是#include仅用于header,还是只是机械的“在此处注入(inject)此代码”,可以在代码中的任何位置使用?如果我在cpp函数的中间使用它来从单一来源“注入(inject)”代码会怎样?这会奏效还是编译器会为此大喊大叫? 最佳答案 它是机械在此处注入(inject)代码设备。如果您愿意,可以包含一个包含歌德浮士德的文本文件。你可以把它放在任何地方,甚至在函数的中间(当然,#include需要换行!)。但是,仅对头文件使用#include是一种严格的约定。可能有一些我不会反对的原因,例如提取机器生成的代码或将所有翻译单元合并

c++ - 迭代可变参数宏参数

我正在以编程方式生成一堆仿函数,为了使生成的代码更具可读性,我正在尝试提出一个宏来扩展以下行,SET_STATE(FunctorA,a,b);refa;refb;FunctorA(refa,refb){this->a=a;this->b=b;}基本上它将扩展到第一个参数构造函数。可变参数部分是构造函数的参数数量。是否可以在宏内部循环并在预处理期间生成此代码,即使它对这种特殊情况没有意义,但我有一些具有20个左右变量的仿函数,它们可以访问它会清理我生成的代码很多。所有参数的类型相同,只有名称不同。 最佳答案 如果boost::prep

c++ - 迭代可变参数宏参数

我正在以编程方式生成一堆仿函数,为了使生成的代码更具可读性,我正在尝试提出一个宏来扩展以下行,SET_STATE(FunctorA,a,b);refa;refb;FunctorA(refa,refb){this->a=a;this->b=b;}基本上它将扩展到第一个参数构造函数。可变参数部分是构造函数的参数数量。是否可以在宏内部循环并在预处理期间生成此代码,即使它对这种特殊情况没有意义,但我有一些具有20个左右变量的仿函数,它们可以访问它会清理我生成的代码很多。所有参数的类型相同,只有名称不同。 最佳答案 如果boost::prep

c++ - Boost 是否使用合法的 C++ 预处理指令语法?

我的(相对较旧的)C++编译器在this上卡住了Boost中的文件,开头为:#/*Copyright(C)2001#*HousemarqueOy#*http://www.housemarque.com#*#*DistributedundertheBoostSoftwareLicense,Version1.0.(See#*accompanyingfileLICENSE_1_0.txtorcopyat#*http://www.boost.org/LICENSE_1_0.txt)#*/#这真的是合法的C++吗?预处理器标记的语法规则是什么? 最佳答案

c++ - Boost 是否使用合法的 C++ 预处理指令语法?

我的(相对较旧的)C++编译器在this上卡住了Boost中的文件,开头为:#/*Copyright(C)2001#*HousemarqueOy#*http://www.housemarque.com#*#*DistributedundertheBoostSoftwareLicense,Version1.0.(See#*accompanyingfileLICENSE_1_0.txtorcopyat#*http://www.boost.org/LICENSE_1_0.txt)#*/#这真的是合法的C++吗?预处理器标记的语法规则是什么? 最佳答案

c++ - 重载 C 宏

有没有更好的方法来“重载”这样的宏?我需要一个接受不同数量参数的宏。#defineDEBUG_TRACE_1(p1)std::stringp[]={p1};log_log(__FUNCTION__,p,1)#defineDEBUG_TRACE_2(p1,p2)std::stringp[]={p1,p2};log_log(__FUNCTION__,p,2)#defineDEBUG_TRACE_3(p1,p2,p3)std::stringp[]={p1,p2,p3};log_log(__FUNCTION__,p,3)#defineDEBUG_TRACE_4(p1,p2,p3,p4)std:

c++ - 重载 C 宏

有没有更好的方法来“重载”这样的宏?我需要一个接受不同数量参数的宏。#defineDEBUG_TRACE_1(p1)std::stringp[]={p1};log_log(__FUNCTION__,p,1)#defineDEBUG_TRACE_2(p1,p2)std::stringp[]={p1,p2};log_log(__FUNCTION__,p,2)#defineDEBUG_TRACE_3(p1,p2,p3)std::stringp[]={p1,p2,p3};log_log(__FUNCTION__,p,3)#defineDEBUG_TRACE_4(p1,p2,p3,p4)std:

c++ - 如何包含名称中包含 `>` 的头文件?

我承认,这是一个相当人为的问题,但就是这样。假设您有一个带有>的文件其名称中的字符。这在大多数Unix系统上都是可能的afaik:$touch'weird>name'$ls-l-rw-r--r--1useruser028Mag11:05weird>name现在,假设此文件包含C/C++代码,并且您希望将其作为header包含:#includename>intmain(){returnweird_function();}Clang给我以下错误:test.cpp:1:10:fatalerror:'weird'filenotfound#includename>当然,因为预处理器将指令解析到第

c++ - 如何包含名称中包含 `>` 的头文件?

我承认,这是一个相当人为的问题,但就是这样。假设您有一个带有>的文件其名称中的字符。这在大多数Unix系统上都是可能的afaik:$touch'weird>name'$ls-l-rw-r--r--1useruser028Mag11:05weird>name现在,假设此文件包含C/C++代码,并且您希望将其作为header包含:#includename>intmain(){returnweird_function();}Clang给我以下错误:test.cpp:1:10:fatalerror:'weird'filenotfound#includename>当然,因为预处理器将指令解析到第