我#define
在项目中有很多"愚蠢" ,我想删除它们.不幸的是,我不能做一个简单的搜索和替换,因为它#define
是参数化的.例如:
#define FHEADGRP( x ) bool _process_grp##x( grp_id_t , unsigned char )
Run Code Online (Sandbox Code Playgroud)
这用于生成一些函数的头文件.我想以某种方式做与预处理器一样的事情 - 用结果替换宏的每个调用(插入正确的参数.我希望你理解我想做什么.
我发现使用Visual Studio,可以使用/ P选项获取预处理的中间文件.不幸的是,这对我没有帮助,因为该文件被数千个其他行"污染"并且所有#defines都已扩展.我不想这样做,我只想扩展一些宏,最好在我的IDE(即Visual Studio)中进行.有什么方法可以实现这个目标吗?
如果这是一个菜鸟问题,请原谅我,但我是C的初学者,只学习一段时间.我试着编写一个总结两个数字的程序(作为应用程序的参数提供).代码是这样的:
#include <stdlib.h>
#include <stdio.h>
int main( int argc, char** argv)
{
int a = atoi(argv[0]);
int b = atoi(argv[1]);
int sum = a+b;
printf("%d", sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了不正确的结果 - 即使对于像5和10这样的小输入也是如此.这里有什么问题?
我正在努力优化应用程序.我发现我需要优化内循环以提高性能.rgiFilter是一个16位的arrary.
for (i = 0; i < iLen; i++) {
iPredErr = (I32)*rgiResidue;
rgiFilter = rgiFilterBuf;
rgiPrevVal = rgiPrevValRdBuf + iRecent;
rgiUpdate = rgiUpdateRdBuf + iRecent;
iPred = iScalingOffset;
for (j = 0; j < iOrder_Div_8; j++) {
iPred += (I32) rgiFilter[0] * rgiPrevVal[0];
rgiFilter[0] += rgiUpdate[0];
iPred += (I32) rgiFilter[1] * rgiPrevVal[1];
rgiFilter[1] += rgiUpdate[1];
iPred += (I32) rgiFilter[2] * rgiPrevVal[2];
rgiFilter[2] += rgiUpdate[2];
iPred += (I32) rgiFilter[3] * rgiPrevVal[3];
rgiFilter[3] += rgiUpdate[3];
iPred += (I32) rgiFilter[4] * rgiPrevVal[4]; …
Run Code Online (Sandbox Code Playgroud) 我有以下NN架构:
第1部分:
nn.Sequential {
[input -> (1) -> (2) -> (3) -> (4) -> (5) -> (6) -> (7) -> output]
(1): nn.TemporalConvolution
(2): nn.TemporalMaxPooling
(3): nn.TemporalConvolution
(4): nn.TemporalMaxPooling
(5): nn.Reshape(14336)
(6): nn.Dropout(0.500000)
(7): nn.Linear(14336 -> 128)
}
Run Code Online (Sandbox Code Playgroud)
第2部分:
nn.Sequential {
[input -> (1) -> (2) -> (3) -> output]
(1): nn.Linear(4 -> 8)
(2): nn.ReLU
(3): nn.Linear(8 -> 4)
}
Run Code Online (Sandbox Code Playgroud)
我想做的是使用这两部分的输出作为另一部分的输入:
nn.Sequential {
[input -> (1) -> (2) -> (3) -> (4) -> (5) -> (6) -> output]
(1): …
Run Code Online (Sandbox Code Playgroud) 我有一个静态库,其中(除其他外)实现了一个微小的函数,只返回一个const字符串表中的字符串.此函数不会在库中的任何位置调用,但仍然声明为inline
.为清楚起见,它看起来像这样:
namespace flow
{
inline const char* GetName( BYTE methodType );
}
Run Code Online (Sandbox Code Playgroud)
和实施:
const char* flow::GetName( BYTE methodType )
{
if ( methodType < 5 )
return cszNameTable[ methodType ];
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
在另一个项目中,我正在链接这个库.我有正确的.h文件,我有using namespace flow;
我的代码.问题是,我收到链接器错误:
error LNK2001: unresolved external symbol "char const * __cdecl flow::GetName(unsigned char)" (?GetName@flow@@YAPBDE@Z)
Run Code Online (Sandbox Code Playgroud)
现在我可以通过从静态库中的函数声明中删除"inline"关键字来轻松解决此问题.所以这是我的问题:
1)为什么会出现此错误?如何在不修改静态库源代码的情况下修复它(不删除内联关键字)?
2)inline
在未在库本身内部调用的静态库函数中使用关键字有什么好处?inline
当从另一个项目链接到库时,关键字是否有任何影响(我猜它确实如此,但我不确定)?
这可能是一个相当新手的问题,但我需要处理某个文本文件并将其内容转储到二进制文件中,我不知道如何 - 我决定使用perl,但我的perl技能非常低.我可能应该用C++编写这个,但对于perl来说这似乎是一个很好的简单任务,所以为什么不学习新的东西呢?;)文本文件有以下格式的数千行:
2A02FC42 4
您可以将其视为十六进制数字(长度始终为 8)和常规数字.现在我需要以这种格式将所有行转储到二进制文件中(当使用十六进制编辑器查看时,它应该如下所示):
42FC022A00000004
更多例子很清楚:
70726F67 36
- > 676F727000000024
6A656374 471
- > 7463656A000001D7
解析输入文件的部分很简单,但我仍然停留在第二部分,我应该将其写入二进制文件.我不知道如何以这种方式格式化数据,甚至不知道如何以二进制模式输出数据.有人可以帮帮我吗?
谢谢.
编辑:更新了示例,忘记了endiannes - 我在LE系统上.
这可能是愚蠢的事,但我无法弄清楚.我std::bad_alloc
在以下代码片段中获得异常(这是交换机中的case语句):
case 0:
{
MyPrimitiveNode* node = new MyPrimitiveNode( 1, false );
TheStack.push_back( MyStackItem( node, TYPE_REF ) ); // bad_alloc here
break;
}
Run Code Online (Sandbox Code Playgroud)
TheStack
类型在哪里MyStack
,哪个是typedef std::vector<MyStackItem> MyStack;
MyStackItem
是一个简单的结构,看起来像这样:
struct MyStackItem {
MyNode* value;
uint8_t type;
MyStackItem() {
value = NULL;
type = TYPE_UNDEF;
}
MyStackItem( MyNode* val, uint8_t t ) {
value = val;
type = t;
}
};
Run Code Online (Sandbox Code Playgroud)
至于MyNode
nad MyPrimitiveNode
,它们来自另一个项目(静态库),定义如下:
class MyNode
{
public:
MyNode() {}
virtual ~MyNode() {}
}; …
Run Code Online (Sandbox Code Playgroud) 我不知道为什么这个简单的代码不起作用.有人可以解释一下吗?
int main()
{
const char* c = "ret";
typedef unsigned char GOK_UINT8;
typedef GOK_UINT8* pGOK_UINT8;
const pGOK_UINT8 y = reinterpret_cast<const GOK_UINT8*>(c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么reinterpret_cast应该不起作用?
谢谢,Gokul.
所以我在这里尝试教我的朋友C++的艺术.他不是编程新手,但他的专业领域远离C++.他非常了解html,php和java,但在编写C++程序时似乎没有用.我们已经完成了基础知识,谈论了指针等.他甚至在他的大学里开了一门关于C++的课程,但他放弃了一半.看起来他真的理解基本理论 - 问题是他在实际使用他所知道的编写程序时失败了.
所以我现在要做的就是给他做作业.任务总是写一个小程序,比如一个原始计算器(输入两个数字和一个确定应该执行操作的字母......)等等.这背后的想法是强迫他实际使用该语言来解决问题,调试它,看看为什么它失败并从中学习.但它似乎不起作用,因为每次我试图让它变得更难并给他一个更复杂的家庭作业,他就无法解决它.我现在应该怎么做?我真的没有家庭作业的想法,我怀疑这种方法是好的.此外,新的学期刚刚好,现在开始,他已经通过了C++当然这个时候.所以甚至有一个截止日期 - 今年年底.
那么,你能在这帮吗?