小编Pet*_*erK的帖子

有没有办法'扩展'#define指令?

#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++ macros visual-studio c-preprocessor

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

在C中访问命令行参数

如果这是一个菜鸟问题,请原谅我,但我是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这样的小输入也是如此.这里有什么问题?

c command-line-arguments

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

32x32乘以并添加优化

我正在努力优化应用程序.我发现我需要优化内循环以提高性能.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)

c optimization loops

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

Torch:NN处理文本和数字输入

我有以下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)

neural-network torch conv-neural-network

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

链接具有内联函数的静态库的问题

我有一个静态库,其中(除其他外)实现了一个微小的函数,只返回一个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当从另一个项目链接到库时,关键字是否有任何影响(我猜它确实如此,但我不确定)?

c++ linker inline static-libraries

2
推荐指数
1
解决办法
3284
查看次数

如何使用Perl将指定格式的数据写入二进制文件?

这可能是一个相当新手的问题,但我需要处理某个文本文件并将其内容转储到二进制文件中,我不知道如何 - 我决定使用perl,但我的perl技能非常低.我可能应该用C++编写这个,但对于perl来说这似乎是一个很好的简单任务,所以为什么不学习新的东西呢?;)文本文件有以下格式的数千行:

2A02FC42 4

您可以将其视为十六进制数字(长度始终为 8)和常规数字.现在我需要以这种格式将所有行转储到二进制文件中(当使用十六进制编辑器查看时,它应该如下所示):

42FC022A00000004

更多例子很清楚:

70726F67 36- > 676F727000000024
6A656374 471- > 7463656A000001D7

解析输入文件的部分很简单,但我仍然停留在第二部分,我应该将其写入二进制文件.我不知道如何以这种方式格式化数据,甚至不知道如何以二进制模式输出数据.有人可以帮帮我吗?

谢谢.

编辑:更新了示例,忘记了endiannes - 我在LE系统上.

binary perl file-io hex

2
推荐指数
1
解决办法
3887
查看次数

将结构添加到std :: vector时的std :: bad_alloc

这可能是愚蠢的事,但我无法弄清楚.我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)

至于MyNodenad MyPrimitiveNode,它们来自另一个项目(静态库),定义如下:

class MyNode
        {
        public:
            MyNode() {}
            virtual ~MyNode() {}
        }; …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector bad-alloc

2
推荐指数
1
解决办法
2010
查看次数

C++ reinterpret_cast

我不知道为什么这个简单的代码不起作用.有人可以解释一下吗?

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++ reinterpret-cast

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

如何教程序员如何用C++编写代码?

所以我在这里尝试教我的朋友C++的艺术.他不是编程新手,但他的专业领域远离C++.他非常了解html,php和java,但在编写C++程序时似乎没有用.我们已经完成了基础知识,谈论了指针等.他甚至在他的大学里开了一门关于C++的课程,但他放弃了一半.看起来他真的理解基本理论 - 问题是他在实际使用他所知道的编写程序时失败了.

所以我现在要做的就是给他做作业.任务总是写一个小程序,比如一个原始计算器(输入两个数字和一个确定应该执行操作的字母......)等等.这背后的想法是强迫他实际使用该语言来解决问题,调试它,看看为什么它失败并从中学习.但它似乎不起作用,因为每次我试图让它变得更难并给他一个更复杂的家庭作业,他就无法解决它.我现在应该怎么做?我真的没有家庭作业的想法,我怀疑这种方法是好的.此外,新的学期刚刚好,现在开始,他已经通过了C++当然这个时候.所以甚至有一个截止日期 - 今年年底.

那么,你能在这帮吗?

c++

0
推荐指数
1
解决办法
801
查看次数