小编Pho*_*ong的帖子

Python内置容器是否是线程安全的?

我想知道Python内置容器(list,vector,set ...)是否是线程安全的?或者我是否需要为共享变量实现锁定/解锁环境?

python thread-safety

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

强氧,太重了维持?

我目前正在开始使用doxygen来记录我的源代码.我注意到语法非常繁重,每次我修改源代码时,我还需要更改注释,我真的有这样的印象,即在源代码中为每个更改修改注释时要花太多时间.

您是否有一些技巧可以有效地记录我的源代码?

是否存在doxygen执行以下操作的某些编辑器(或现有编辑器的插件)?

  • 自动跟踪不同步的代码/注释,并警告程序员.
  • 每个新项目的源代码(模板)中自动添加doxygen注释格式(例如,带有参数名称的模板)

PS:我正在开发一个C/C++项目.

c c++ documentation performance doxygen

24
推荐指数
3
解决办法
9024
查看次数

通过参数返回值是一个好的设计吗?

bool is_something_ok(int param,SomeStruct* p)
{
    bool is_ok = false;

    // check if is_ok

    if(is_ok)
       // set p to some valid value
    else
       // set p to NULL
    return is_ok;
}
Run Code Online (Sandbox Code Playgroud)

如果"something is ok",则此函数返回true并将p设置为有效值,否则返回false并将p设置为NULL

这是一个好的或坏的设计?就个人而言,当我使用它时,我感到不舒服.如果没有文件和评论,我真的不知道如何使用它.

顺便说一下:有没有关于API设计的权威书籍/文章?

c++ api

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

全局变量实现

当我写下面的程序时:

档案1:

#include <stdio.h>    
int global;    
void print_global1() {
        printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)

档案2:

#include <stdio.h>
char global;    
void print_global2() {
        printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)

档案3:

void print_global1();
void print_global2();
int main()
{
        print_global1();
        print_global2();

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./a.out
0x804a01c
0x804a01c
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  • 为什么链接器将"int global"和"char global"实现为相同的全局变量:
  • 为什么编译器不会抱怨(不是最小的警告-Wall -Wextra -ansi......)
  • 如何管理全局变量的大小(int和char的大小不同)

PS:第二个问题是架构/编译器相关,所以让我们把gcc或Visual C++(对于C)的int大小为32位

编辑:这不是C++的问题,但对于C!

我使用gcc版本4.4.1和Ubuntu 9.10,这是编译控制台输出:

$ ls
global_data1.c  global_data2.c  global_data.c

$ gcc -Wall -Wextra -ansi global_data*.c
$ ./a.out
0x804a01c
0x804a01c
or 
$ gcc -Wall -Wextra -ansi -c global_data*.c
$ …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction variables global-variables

17
推荐指数
2
解决办法
4378
查看次数

使用LLVM进行静态源代码分析

我最近发现了LLVM(低级虚拟机)项目,据我所知,它可用于对源代码执行静态分析.我想知道是否可以通过函数指针(找到调用函数和被调用函数)在程序中提取不同的函数调用.

我可以在网站上找到那种信息,所以如果你能告诉我LLVM中是否已存在这样的库,或者你能指出我自己如何构建它的好方向(现有的源代码,参考资料),那将会非常有用. ,教程,示例......).

编辑:

通过我的分析,我实际上想要提取调用者/被调用者函数调用.在函数指针的情况下,我想返回一组可能的被调用者.必须在源代码中定义调用者和被调用者(这不包括库中的第三方函数).

c c++ static-analysis llvm

16
推荐指数
3
解决办法
5907
查看次数

如何从MS Access使用SQLite数据库?

我想使用Microsoft Access中的SQLite数据库(从内容访问或将内容传输到Microsoft Access).

  • 如何使用VBA完成?

这适用于无法安装额外软件的客户:

  • VBA中是否存在使用SQLite数据库的库?

database sqlite import ms-access vba

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

预期的'const char**',但参数类型为'char**'

这是我的编译警告:

src/Debugger.c:219:52: warning: passing argument 2 of ‘Debugger_Command[i].Callback’ from incompatible pointer type
                 Debugger_Command[i].Callback(argc, argv);
                                                    ^
src/Debugger.c:219:52: note: expected ‘const char **’ but argument is of type ‘char **’
Run Code Online (Sandbox Code Playgroud)

这是相关的源代码:

/* Definition */
typedef void (*Debugger_Callback_t)(int argc, char const * argv[]);
typedef struct tagDebugger_Command_t {
    /* ... */
    Debugger_Callback_t Callback;   /**< Callback */
} Debugger_Command_t;
Debugger_Command_t const Debugger_Command[] = { /* ... */ }

/* Use of the callback where the warning occurred */
char *argv[DEBUGGER_ARG_COUNT];
Debugger_Command[i].Callback(argc, argv);
Run Code Online (Sandbox Code Playgroud)

将非const变量作为const参数传递有什么问题?据我了解,这是为了确保字符串不会在函数内部被修改.那警告为什么会发生呢?

编译器:Windows/Cygwin上的gcc版本4.9.2(GCC)

c gcc-warning

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

函数重载时的Typedef编译错误

为什么我不能在程序2工作正常时编译程序1?为什么它的行为不同?

计划1:

#include <iostream>
typedef int s1;
typedef int s2;

void print(s1 a){ std::cout << "s1\n"; }
void print(s2 a){ std::cout << "s2\n"; }

int main() {
        s1 a;
        s2 b;

        print(a);
        print(b);

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

计划2:

#include <iostream>
typedef struct{int a;} s1;
typedef struct{int a;} s2;

void print(s1 a){ std::cout << "s1\n"; }
void print(s2 a){ std::cout << "s2\n"; }
int main() {
        s1 a;
        s2 b;

        print(a);
        print(b);

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是从模板类重现的错误,如何验证两个模板参数是否来自同一类型(在程序1的情况下)

c++ typedef overloading

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

sendfile()完成到非阻塞套接字

在我的程序中,我需要在非阻塞套接字中检查sendfile()操作的完成情况.怎么办?

检查文档并在互联网上搜索后,我无法找到如何做到这一点

c sockets nonblocking

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

是以下C++单例实现?

我确实在网上看到了一些实现单例类的模式如下:

class singleton {
public:
    int a;
    void print()
    {
        std::cout << a << std::endl;
    }
} singleton;

int main()
{
    // singleton b; COMPILATION ERROR
    singleton.a = 3;
    singleton.print();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它确实在GCC上编译,但我觉得将实例命名为类的名称并不是一种正确的编码方式.

  • 是否有禁止此类约定的特殊规则(实例名称与类名相同)
  • 源代码是否在其他编译器中编译?

c++ singleton coding-style

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