小编max*_*zig的帖子

bool的printf格式说明符是什么?

由于ANSI C99存在_Boolbool通过stdbool.h.但是printfbool 还有一个格式说明符吗?

我的意思是伪代码:

bool x = true;
printf("%B\n", x);
Run Code Online (Sandbox Code Playgroud)

哪个会打印:

true
Run Code Online (Sandbox Code Playgroud)

c c++ printf boolean

413
推荐指数
5
解决办法
59万
查看次数

GOTO仍被视为有害吗?

每个人都知道Dijkstra 给编辑信件:转到被认为有害的声明(也就是这里 .html脚本和这里的 .pdf)并且从那时起就有一个强大的推动,尽可能避开goto声明.虽然可以使用goto来生成不可维护的,庞大的代码,但它仍然保留在现代编程语言中.甚至Scheme中的高级连续控制结构也可以被描述为复杂的goto.

什么情况下可以使用goto?什么时候最好避免?

作为后续问题:C提供了一对函数setjmp和longjmp,它们不仅可以在当前堆栈帧内,而且可以在任何调用帧中进行转换.这些应该被视为像goto一样危险吗?更危险吗?


Dijkstra本人对这个头衔表示遗憾,他对此不负责任.在EWD1308(也是这里 .pdf)结束时,他写道:

最后是一个短篇小说的记录.1968年,ACM的通讯以" 被认为有害的goto声明 "的标题发表了我的一篇文章,遗憾的是,在后来的几年中,这一期刊最常被引用,但是,经常被作者看到的不多于标题,通过成为一个模板成为我的名声的基石:我们会看到几乎任何X的标题"X被认为有害"的各种文章,包括一个标题为"Dijkstra被认为有害"的文章.但是发生了什么?我提交了一份题为" 反对goto声明的案件 "的论文"为了加快出版速度,编辑已经变成了一封"给编辑的信",并在此过程中给了他一个新的自己的发明名称!编辑是Niklaus Wirth.

关于这个主题的经过深思熟虑的经典论文,与Dijkstra的相关,是结构化编程,由Donald E. Knuth撰写.阅读都有助于重新建立背景和对主题的非教条性理解.在本文中,Dijkstra对此案的观点得到了报道,甚至更为强烈:

Donald E. Knuth:我相信通过提出这样一种观点,我实际上并不同意Dijkstra的观点,因为他最近写了以下内容:"请不要陷入相信我非常悲惨的陷阱.去发言.我有其他人正在一个宗教出来的不舒服的感觉,就好像编程的概念问题可以通过一个单一的技巧来解决,通过编码规则的简单形式! "

language-agnostic goto

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

在C练习中使用灵活的阵列成员?

我最近读到在C中使用灵活的阵列成员是糟糕的软件工程实践.但是,该声明没有任何论据支持.这是公认的事实吗?

(灵活的数组成员是C99中引入的C特性,其中可以将最后一个元素声明为未指定大小的数组.例如:)

struct header {
    size_t len;
    unsigned char data[];
};
Run Code Online (Sandbox Code Playgroud)

c arrays data-structures flexible-array-member

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

使用Monadic QuickCheck测试IO操作

有人能给我一个使用Monadic QuickCheck测试IO操作的简单示例吗?

io haskell quickcheck

49
推荐指数
2
解决办法
5613
查看次数

如何在Mac OSX下使用gcc设置可执行文件的运行时路径(-rpath)?

我想在编译时在Mac OSX下设置可执行文件的运行时路径(对于链接器),这样在程序启动时动态链接器可以找到非标准位置的共享库.

在Linux下,可以使用-Xlinker -rpath -Xlinker /path/to(或使用-Wl,-rpath,/path/to),在Solaris下,您可以添加-R/path/to到编译器命令行.

我发现一些信息,Mac OS X gcc自10.5以来就支持-rpath,即自2008年以来.

我尝试用最小的例子来实现它 - 没有成功:

$ cat blah.c 
int blah(int b)
{
  return b+1;
}
Run Code Online (Sandbox Code Playgroud)

和:

$ cat main.c 

#include <stdio.h>

int blah(int);

int main ()
{
  printf("%d\n", blah(22));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译它像这样:

$ gcc -c  blah.c
$ gcc -dynamiclib blah.o -o libblah.dylib
$ gcc main.c -lblah -L`pwd`  -Xlinker -rpath -Xlinker `pwd`/t
Run Code Online (Sandbox Code Playgroud)

现在测试:

$ mkdir t
$ mv libblah.dylib t
$ ./a.out
dyld: Library …
Run Code Online (Sandbox Code Playgroud)

macos linker gcc shared-libraries dyld

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

读复杂的const声明的简单规则?

对于读取复杂指针声明,有左右规则.

但是这条规则没有提到如何阅读const修饰语.

例如,在简单的指针声明中,const可以通过多种方式应用:

char *buffer; // non-const pointer to non-const memory
const char *buffer; // non-const pointer to const memory
char const *buffer; // equivalent to previous declartion
char * const buffer = {0}; // const pointer to non-const memory
char * buffer const = {0}; // error
const char * const buffer = {0}; // const pointer to const memory
Run Code Online (Sandbox Code Playgroud)

现在用const指针声明指针怎么样?

char **x; // no const;
const char **x;
char * …
Run Code Online (Sandbox Code Playgroud)

c c++ const declaration

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

std :: byte指针是否与char*具有相同的别名含义?

C++(和C)严格别名规则包括a char*unsigned char*可以别名任何其他指针.

AFAIK没有类似的规则uint8_t*.

因此我的问题是:std::byte指针的别名规则是什么?

C++参考目前只是指定:

与字符类型(char,unsigned char,signed char)一样,它可用于访问其他对象占用的原始内存(对象表示),但与这些类型不同,它不是字符类型,也不是算术类型.

c++ strict-aliasing c++17

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

在postgresql中添加一个二分之一的非空约束

如果我在Postgresql中有一个表:

create table Education ( 
    id                  integer references Profiles(id),
    finished            YearValue not null,
    started             YearValue,
    qualification       text,
    schoolName          text,
    studiedAt           integer references Organizations(id),
    primary key (id)
);
Run Code Online (Sandbox Code Playgroud)

我需要创建一个约束,以便schoolName或者studiedAt不需要为null(其中一个必须包含信息).

我该怎么做呢?

sql postgresql constraints database-schema

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

gdb前端与vim一起使用?

我可以使用什么gdb前端来调试C和C++代码?目前我使用cgdb并对它感到满意.只是想知道那里还有什么?

c c++ linux vim gdb

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

如何使用CMAKE_EXPORT_COMPILE_COMMANDS?

我一直在尝试使用clang-modernizeCMAKE_EXPORT_COMPILE_COMMANDS在该工具的帮助推荐.

使用此选项,cmake会生成一个包含编译信息(如include路径)的JSON文件(另请参阅).

此变量在cmake的命令行中被接受,但cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS不起作用(这与此邮件列表发布一致).

有人知道如何使用它吗?

我也可以用cppcheck.

更多信息

我在clang开发者论坛上发现,这个cmake功能并非在所有生成器上都可用.这可能会在未来发生变化,同时我的问题仍然存在,我也会尝试看看如果我使用其他生成器而不是Visual Studio会发生什么.

c++ cmake clang cppcheck

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