小编Ces*_*arB的帖子

如何与GCC进行弱连接工作?

似乎有3种方法告诉GCC弱连接符号:

  • __attribute__((weak_import))
  • __attribute__((weak))
  • #pragma weak symbol_name

这些都不适合我:

#pragma weak asdf
extern void asdf(void) __attribute__((weak_import, weak));
...
{
    if(asdf != NULL) asdf();
}
Run Code Online (Sandbox Code Playgroud)

我总是得到这样的链接错误:

Undefined symbols:
  "_asdf", referenced from:
      _asdf$non_lazy_ptr in ccFA05kN.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我在OS X 10.5.5上使用GCC 4.0.1.我究竟做错了什么?

c linker gcc weak

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

应用清单模式

是否有任何文档描述了Windows应用程序清单的所有有效元素,它们所在的命名空间以及哪些Windows版本将使用它们?到目前为止,我发现的所有文档只描述了清单的一部分,并且我看到了用于同一元素的不同XML命名空间.

到目前为止我发现了什么:

  • 清单文件参考/应用程序清单似乎有完整的urn:schemas-microsoft-com:asm.v1命名空间文档和compatibility/ supportedOSstuff(来自urn:schemas-microsoft-com:compatibility.v1命名空间).它有一个链接,这不一个模式文件具有compatibility/ supportedOS东西.
  • 步骤6:创建和嵌入应用程序清单(UAC)trustInfo/ requestedExecutionLevelstuff 记录在urn:schemas-microsoft-com:asm.v2命名空间中.但是,我已经看到其他地方说它在urn:schemas-microsoft-com:asm.v3命名空间中.
  • SetProcessDPIAware函数使用命名空间和命名空间来记录application/ windowsSettings/ .dpiAwareurn:schemas-microsoft-com:asm.v3http://schemas.microsoft.com/SMI/2005/WindowsSettings
  • 应用程序清单XML模式看起来像是一些这些命名空间的模式文件,但它似乎与其他引用相矛盾(例如,除非我误读了xsd,dependencyurn:schemas-microsoft-com:asm.v2命名空间中,而上面的第一个引用暗示它在该urn:schemas-microsoft-com:asm.v1命名空间).

schema winapi manifest

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

实现一个好的C++ 0x error_condition?

我揣摩如何在新system_error一起error_code,error_category而不是(是为了执行最低便携式错误报告)error_condition应该被使用.

我想通过阅读boost.system我明白我应该如何使用error_codeserror_category.该描述省略了在使用system_error`抛出异常时如何结合使用,但是从我可以猜到的那个类的接口.

class system_error : public runtime_error {
public:
  // [...]
  system_error(error_code ec, const string& what_arg);
  system_error(int ev, const error_category& ecat, const string& what_arg);
  system_error(int ev, const error_category& ecat);
  // [...]
Run Code Online (Sandbox Code Playgroud)

所以,我抛出一个system_error-exception与右int+ error_categoryerror_code与它的error_category()-方法.

但是提供便携式接口的方式是什么error_condition

双方error_code error_category都有方法default_error_condition:

class error_category {
public:
  // [...]
  virtual error_condition default_error_condition(int ev) …
Run Code Online (Sandbox Code Playgroud)

error-handling boost exception boost-asio c++11

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

无限循环 - 顶部还是底部?

本着问题的精神,你的循环测试是在顶部还是底部?:

你使用哪种风格进行无限循环,为什么?

  • 而(真){}
  • do {} while(true);
  • for(;;){}
  • label:...转到标签;

c c++ coding-style

10
推荐指数
6
解决办法
3509
查看次数

条件表达式中的常量值

关于无限循环编码风格问题中,有些人提到他们更喜欢for(;;)样式,因为while(true)样式在MSVC上给出关于条件表达式是常量的警告消息.

这让我感到非常惊讶,因为在条件表达式中使用常量值是避免#ifdef地狱的有用方法.例如,您可以在标题中:

#ifdef CONFIG_FOO
extern int foo_enabled;
#else
#define foo_enabled 0
#endif
Run Code Online (Sandbox Code Playgroud)

代码可以简单地使用条件并信任编译器在未定义CONFIG_FOO时删除死代码:

if (foo_enabled) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

每次使用foo_enabled时,不必测试CONFIG_FOO:

#ifdef CONFIG_FOO
if (foo_enabled) {
    ...
}
#endif
Run Code Online (Sandbox Code Playgroud)

这种设计模式一直在Linux内核中使用(例如,include/linux/cpumask.h在禁用SMP时将几个宏定义为1或0,在启用SMP时定义为函数调用).

MSVC警告的原因是什么?另外,有没有更好的方法来避免#ifdef hell而不必禁用该警告?或者这是一个过于广泛的警告,一般不应该启用?

c c++ warnings visual-c++

8
推荐指数
2
解决办法
4900
查看次数

什么是嵌入式Linux的优秀开源消息总线?

我正在寻找一个适合嵌入式Linux设备(Linux和uClinux)的开源消息总线.

它需要满足以下标准:

  • 必须是免费软件和LGPL或更自由的许可证,因为uClinux仅支持静态链接
  • 必须有一个C API
  • 必须占用相对较小的空间,而不依赖于第三方库
  • 必须与Linux/uClinux 2.4.22+兼容
  • 应该经过充分测试,并且最好设置现有的测试框架
  • 应该有一个记录良好的协议
  • 应该可以移植到其他平台

消息总线主要由我们系统上的应用程序使用,以便传递配置参数等,因此它不需要满足实时要求.

c linux embedded ipc

6
推荐指数
2
解决办法
6363
查看次数

我应该在Unix上使用system_category或generic_category作为errno吗?

C++ 0x有两个预定义的error_category对象:generic_category()system_category().从我到目前为止所理解的,system_category()应该用于操作系统返回的错误,并且generic_category()应该用于找到的通用值std::errc,它们对应于errno值.

但是,在类Unix系统上应该做些什么,其中errno操作系统返回的错误?我应该使用system_category()(在非类Unix系统上会出错,需要#ifdef),还是应该使用generic_category()(对于非标准errno值,类Unix系统会出错)?

unix error-handling errno c++11 system-error

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

在同一个类中使用constexpr作为模板参数时出错

如果我尝试编译以下C++ 0x代码,我收到一个错误:

template<int n> struct foo { };

struct bar {
    static constexpr int number() { return 256; }

    void function(foo<number()> &);
};
Run Code Online (Sandbox Code Playgroud)

使用gcc 4.6.1,错误消息是:

test.cc:6:27: error: ‘static constexpr int bar::number()’ used before its definition
test.cc:6:28: note: in template argument for type ‘int’
Run Code Online (Sandbox Code Playgroud)

使用clang 2.8,错误消息是:

test.cc:6:20: error: non-type template argument of type 'int' is not an integral
      constant expression
        void function(foo<number()> &);
                          ^~~~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)

如果我将constexpr函数移动到基类,它适用于gcc,并在clang上给出相同的错误消息:

template<int n> struct foo { };

struct base {
    static constexpr …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors constexpr c++11

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

更改Win32菜单颜色

有没有办法在使用SetSysColors的情况下为单个进程更改普通Win32菜单(背景,文本和高亮显示)使用的颜色?

(SetSysColors执行全局更改,这很糟糕,如果您在退出之前崩溃或忘记再次使用SetSysColors设置颜色,则在您注销之前不会恢复它们.)

winapi menu colors

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