小编Bad*_*dda的帖子

在Visual Studio C++ 2010中找不到或打开PDB文件

我使用Visual Studio 2010 C++并且我的项目构建没有错误但是当我运行它时我得到了这个.我在Windows XP上.

'Shaders.exe': Loaded 'C:\Documents and Settings\User\My Documents\Visual Studio        2010\Projects\Shaders\Win32\Debug\Shaders.exe', Symbols loaded.
'Shaders.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Cannot find or open the PDB file
'Shaders.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Cannot find or open the PDB  file
'Shaders.exe': Loaded 'C:\qt-everywhere-opensource-src-4.8.3\bin\QtCored4.dll', Symbols  loaded.
'Shaders.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Cannot find or open the PDB file
'Shaders.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', Cannot find or open the PDB file
'Shaders.exe': Loaded 'C:\WINDOWS\system32\ole32.dll', Cannot find or open the PDB file
'Shaders.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll', Cannot find or open the PDB file …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010 pdb-files

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

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

C:转到已知文件行的最佳方式

我有一个文件,其中我想迭代而不处理当前行的任何类型.我正在寻找的是去确定文本文件行的最佳方法.例如,将当前行存储到变量中似乎没用,直到我到达预定行.

示例:

file.txt的

foo
fooo
fo
here
Run Code Online (Sandbox Code Playgroud)

通常,为了得到here,我会做的事情如下:

FILE* file = fopen("file.txt", "r");
if (file == NULL)
    perror("Error when opening file ");
char currentLine[100];
while(fgets(currentLine, 100, file))
{
    if(strstr(currentLine, "here") != NULL)
         return currentLine;
}
Run Code Online (Sandbox Code Playgroud)

但是fgets必须完全阅读三行并且currentLine必须存储foo,fooo并且fo.

有没有更好的方法来做到这一点,知道here第4行?有点像go to文件?

c io file fgets file-processing

8
推荐指数
3
解决办法
823
查看次数

kernel.kallsyms 在 C++ 应用程序运行中的作用

我使用以下开关编译了我的 C++ 代码:

g++ -O0 -g -rdynamic -DNDEBUG -DARMA_NO_DEBUG -std=c++11 -pthread
Run Code Online (Sandbox Code Playgroud)

链接器开关是:

-lboost_system -lboost_thread -lboost_chrono -larmadillo -pthread
Run Code Online (Sandbox Code Playgroud)

但是我在我的应用程序中没有使用线程。我也避免使用任何delay函数。

然后我运行代码并使用perf工具对其进行测试。

sudo perf record ./bin/my_application
sudo perf report -f
Run Code Online (Sandbox Code Playgroud)

结果对我来说很奇怪:

Overhead  Command          Shared Object     Symbol
 50.92%  myApplication  [kernel.kallsyms]  [k] native_sched_clock
 24.73%  myApplication  [kernel.kallsyms]  [k] pick_next_entity
 17.46%  myApplication  [kernel.kallsyms]  [k] prepend_name
  2.57%  myApplication  myApplication      [.] arma::arrayops::copy_small<double>
  1.11%  myApplication  myApplication      [.] arma::Mat<double>::Mat
  1.11%  myApplication  myApplication      [.] myClass::myMethod
  1.11%  myApplication  libblas.so.3       [.] dgemv_
  0.97%  myApplication  myApplication      [.] arma::Mat<double>::init_cold
Run Code Online (Sandbox Code Playgroud)

为什么 kernel.kallsyms函数主宰了执行时间? …

c++ performance-testing linux-kernel perf

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

在函数式编程中绘制UML类图有什么意义吗?

我曾在一个学校项目上被要求显示我用来实现该项目的UML图(如果有的话)。但是我正在从事的项目是用C语言编写的,并且已进行了功能编程。因此,我想证明在不使用面向对象语言时使用类图是没有意义的,但是我担心这不是真的,并且无法证实这一假设。对我来说似乎毫无意义,但我想知道是否确实如此,因为可能以OOP方式思考代码可以帮助理解其工作方式。

使用类图来思考和构建功能程序的方式有什么好处?

uml functional-programming class-diagram

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

C语言中的键值对

我是 C 编程新手,我正在尝试创建一个像 Perl 编程一样的键值结构。我看到了一种解决方案,例如:-

struct key_value
{
   int key;
   char* value;
};

struct key_value kv;

kv.key = 1;
kv.value = "foo";
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从这个结构中访问这些值。有人可以阐明这一点吗?

c struct

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

隐式声明函数,无论标头 include 和 ifndef 如何

我有众所周知的错误:

implicit declaration of function 'STLINKReadSytemCalls' [-Wimplicit-function-declaration]
implicit declaration of function 'printf' [-Wimplicit-function-declaration]
incompatible implicit declaration of built-in function 'printf'

Eclipse(更准确地说是 Atollic TrueStudio)友好地补充道:

include '<stdio.h>' or provide a declaration of 'printf'

阅读了数十亿篇关于如何解决这个问题的帖子,似乎三个问题可能会导致这些错误:

  • 函数定义在main之后;
  • 包含使用函数所需的标头
  • #ifndef#define并且#endif没有正确包装头文件

我发现一个帖子,其中有人似乎有这个错误,并在修复它后说 Eclipse 是问题所在。虽然找不到主题,但他的解决方案对我不起作用。这就像单击函数,source -> addincludes

主程序

int main(void) {

    if (STLINKReadSytemCalls() == 1)
        printf("Error in system calls.\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

文件处理.c

#include "../header/fileProcessing.h"

int STLINKReadSytemCalls(void) {

    // mainly system calls
}
Run Code Online (Sandbox Code Playgroud)

文件处理.h

#ifndef FILEPROCESSING_H_
#define FILEPROCESSING_H_

#include <stdlib.h> …
Run Code Online (Sandbox Code Playgroud)

c eclipse include-path implicit-declaration

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

即使不包含在C中,功能也可见

Amain.c文件中定义了函数.我创建了三个使用该函数A而不导入任何内容的库.代码有效,但我只有一个警告:implicit declaration of function 'A' [-Wimplicit-function-declaration].

该函数如何在单独的文件中定义的函数中A工作B而不导入它?当A除了函数之外的其他函数调用函数时,我怎么可能只有一个警告B

c eclipse static-libraries

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

在源文件或头文件中写入注释

这是一个非常简单的问题,我很惊讶我在SO上没有找到任何其他地方.我想知道哪些评论应该或不应该在标题/源文件中.如果在标题和源上都声明,那将是redondant或required.到目前为止,我一直这样做:

main.c或main.cpp

int main()
{
    // Comments to describe what happens in main
}
Run Code Online (Sandbox Code Playgroud)

foo.h中

 // Comments for documentation and which gives information about the function itself

/**
* \fn void aFunction(void)
* \brief This function is a function
*/
void aFunction(void);
Run Code Online (Sandbox Code Playgroud)

foo.c或foo.cpp

void aFunction(void)
{
    // Comments to describe and explain what happens within this function
}
Run Code Online (Sandbox Code Playgroud)
  • 主要没有太多评论,只是基本上描述了调用哪些函数以及为什么
  • 在标题中,只有注释来描述函数本身 ; 参数,简要,返回等
  • 在源代码中,只有注释来描述函数内发生的事情 ; 循环,条件等

这就是我所知道的.主,源或标题中是否需要更多注释?我是否应该添加我通常只在源代码中添加标题的注释,如下所示:

foo.c或foo.cpp

/**
* \fn void aFunction(void)
* \brief This …
Run Code Online (Sandbox Code Playgroud)

c c++ comments header-files

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

移位计数操作允许的值是多少?

#include <stdio.h>

int main(void)
{
    unsigned int var=1;
    var = var<<32;
    printf("%u ",var);
} 
Run Code Online (Sandbox Code Playgroud)

此代码1作为其输出产生.如果我写 var = var<<31;它的收益率2147483648.

如果我输入var = 12;然后var = var<<32;它产生12.我从我的教科书(旧版本)中读到,ANSI C不允许在单个操作中将所有位移出一个值.

所有主要的编译器都表现相同(复制粘贴输入到输出)或只是GCC确实将粘贴12从输入复制到输出当我指示它做var = var<<32;

c bit-shift

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

while循环输出多个条件

main()
{
    int i=0,j=0;
    while(i<5,j<10)
    {
        i++;
        j++;
    }
    printf("%d,%d,",i,j);
}
Run Code Online (Sandbox Code Playgroud)

输出: 10,10

int main(){
    int x=2,y=2;
    while(x<=5,y<=3)
         printf("%d %d ",++x, ++y);
    return 0;        
}
Run Code Online (Sandbox Code Playgroud)

输出: 3 3 4 4

在第一个代码中,输出如何产生10,10?任何人都可以解释,但第二个代码的输出是3344,是否都运行在不同的逻辑上?

c loops while-loop conditional-statements

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

在STM32的OTP中写入64位数据

我试图在STM32L4芯片的内存闪存中写入数据.这是在编程上下文中完成的,其中我使用C调用ST-Link实用程序命令行.

这是一个闪存的例子:

               0             4             8             C
0x1FFF7000  FFFFFFFF     FFFFFFFF       FFFFFFFF       FFFFFFFF
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经能够在64位数据空间上只写32 :

               0             4             8             C
0x1FFF7000  AAAAAAAF     FFFFFFFF       BBBCCCDD       FFFFFFFF
Run Code Online (Sandbox Code Playgroud)

在前32位写入时,第二个32位被锁定.因此,如果内存处于先前状态,则不允许以下写入:

               0             4             8             C
0x1FFF7000  AAAAAAAF     00000001       BBBCCCDD       FFFFFFFF
                            ^^                            ^^
                         Not allowed                     Locked
Run Code Online (Sandbox Code Playgroud)

我只能在64位数据空间中写入大小受32位限制的数据.我发现这非常奇怪,因为没有理由以这种方式处理内存.

编辑:这是真的,因为我想在OTP中写,当我在别处写的时候,它似乎正常工作

第一种可能的方案

我对上一个问题的回答引用了这个:

级别2:无调试
在此级别中,保证级别1得到保证.此外,Cortex®-M4调试端口,从RAM启动(启动RAM模式)和从系统存储器启动(启动加载器模式)不再可用.在用户执行模式(引导闪存模式)下,Flash主存储器上允许所有操作....... 根本无法删除
2级:这是不可逆转的操作.

有没有办法让启用级别2允许我在64位内存空间上写两次32位?

第二种可行方案

查看芯片的文档,我找到了闪存编程序列(第102页):

  1. 通过检查闪存状态寄存器(FLASH_SR)中的BSY位,检查没有闪存主存储器操作正在进行.
  2. 由于之前的编程,检查并清除所有错误编程标志.如果没有,则设置PGSERR.
  3. 将Flash控制寄存器(FLASH_CR)中的PG位置1.
  4. 在所需的存储器地址,主存储器块或OTP区域内执行数据写操作.只能编程双字. - 在与双字对齐的地址中写入第一个字 - 写第二个字
  5. 等到FLASH_SR寄存器中的BSY位清零.
  6. 检查FLASH_SR寄存器中是否设置了EOP标志(表示编程操作已成功),并通过软件将其清除.
  7. 如果不再有编程请求,则清零FLASH_SR寄存器中的PG位.

我一直无法理解第3步中的PG位是什么.但是当我尝试设置它时,不允许写入. …

embedded stm32 cpu-registers flash-memory

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

处理长度为C的字符串

在C(不是C++)中,我们可以考虑几种处理字符串长度的方法:

  • 只需依赖null终止符(\0):我们假设该字符串不包含\0.将字符串存储到char数组并\0在末尾追加.使用strlen()我们需要它的大小时的功能.

  • 将字符和长度存储到struct:

    typedef struct _String { char* data; int size; } String;

  • 使用另一个变量来存储长度:例如,

    char name[] = "hello"; int name_size = 5; some_func(name, name_size, ...);

就个人而言,我更喜欢使用第二种方法

  • 它可以覆盖一些包含\0在中间的"怪异"字符串.

  • 我们可以实现一些功能,如string_new(),string_del(),string_getitem(),等写一些"OOP般"的代码.

  • 我们没有两个(或更多)变量来处理字符串及其长度.

我的问题是:在C中处理字符串最常用的方法是什么?(特别是:当我们必须使用很多字符串时(例如编写一个解释器))

谢谢.

c string string-length

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