小编Nil*_*nck的帖子

为什么C没有无符号浮点数?

我知道,这个问题似乎很奇怪.程序员有时会想太多.请继续阅读......

在CI中使用signedunsigned整数很多.我喜欢这样一个事实:如果我执行诸如将有符号整数分配给无符号变量之类的操作,编译器会发出警告.如果我将带符号与无符号整数进行比较,我会得到警告.

我喜欢这些警告.他们帮助我保持我的代码正确.

为什么我们不能为花车提供同样的奢侈品?平方根绝对不会返回负数.还有其他地方负浮动值没有意义.无符号浮点数的完美候选者.

顺便说一句 - 我并不是真的热衷于通过从浮点数中移除符号位来获得的单一额外精度.float因为他们现在对我非常满意.我只想将浮点数标记为无符号,并获得与整数相同的警告.

我不知道任何支持无符号浮点数的编程语言.

知道为什么他们不存在吗?


编辑:

我知道x87 FPU没有处理无符号浮点数的指令.让我们使用带符号的浮点指令.滥用(例如,低于零)可以被认为是未定义的行为,就像未定义有符号整数的溢出一样.

c format floating-point unsigned types

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

const int与int const作为C++和C中的函数参数

快速提问:

int testfunc1 (const int a)
{
  return a;
}

int testfunc2 (int const a)
{
  return a;
}
Run Code Online (Sandbox Code Playgroud)

这两个功能在每个方面都是相同的还是有区别的?我对C语言的答案感兴趣,但如果C++语言中有一些有趣的东西,我也想知道.

c c++ const

111
推荐指数
6
解决办法
9万
查看次数

内置类型的析构函数(int,char等..)

在C++中,以下代码给出了编译器错误:

void destruct1 (int * item)
{
  item->~int();
}
Run Code Online (Sandbox Code Playgroud)

这段代码几乎相同,我只是将int解压缩到另一种类型,并发生了一些神奇的事情:

typedef int myint;

void destruct2 (myint * item)
{
  item->~myint();
}
Run Code Online (Sandbox Code Playgroud)

为什么第二个代码有效?int是否因为已被typedefed而获得析构函数?

如果你想知道为什么一个人想要这样做:这来自重构C++代码.我们正在删除标准堆并将其替换为自制池.这要求我们调用placement-new和析构函数.我知道调用原始类型的析构函数是没用的,但是我们在代码中想要它们,以防我们后来用实际类替换POD.

发现赤裸裸的int不起作用但是类型合适的东西确实令人惊讶.

顺便说一句 - 我有一个涉及模板功能的解决方案.我们只是在模板中输入dede,一切都很好.

c++ constructor destructor typedef

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

makefile - 一次编译所有c文件

我想尝试GCC整个程序优化.为此,我必须立即将所有C文件传递给编译器前端.但是,我使用makefile来自动化我的构建过程,而且在makefile魔术方面我不是专家.

如果我想使用一次GCC调用来编译(甚至链接),我该如何修改makefile?

供参考 - 我的makefile如下所示:

LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall

OBJ = 64bitmath.o    \
      monotone.o     \
      node_sort.o    \
      planesweep.o   \
      triangulate.o  \
      prim_combine.o \
      welding.o      \
      test.o         \
      main.o

%.o : %.c
    gcc -c $(CFLAGS) $< -o $@

test: $(OBJ)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)
Run Code Online (Sandbox Code Playgroud)

c makefile

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

使用Win32 API安全删除USB驱动器?

如何使用Win32 API删除USB驱动器?我在嵌入式系统上做了很多工作,其中一个我必须将我的程序复制到USB记忆棒上并将其插入目标硬件中.

由于我主要在控制台上工作,所以我不喜欢使用鼠标,每天一百次点击小任务栏图标.

我想写一个小程序来做到这一点,所以我可以把它放到我的makefile中,但我还没有发现任何API调用做同样的事情.

有任何想法吗?

c windows usb winapi

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

Android RemoteExceptions和服务

所以我为Android操作系统编写了一个服务和一个活动.

我的服务在它自己的进程中运行,因此我的活动和服务之间的所有通信都是通过IPC进行的.我使用标准的Android .aidl机制.

到目前为止一切正常.但是,AIDL使用"throws RemoteException"生成所有方法存根,因此我必须处理它们.

我对整个Android源代码做了快速的grep,并且只发现了三个抛出此异常的情况.这些是我不联系的不同服务.

我也检查了C源代码,因为理论上可以使用JNI接口生成RemoteExceptions.没有出现任何问题.

我的印象是每个人都像这样处理它们:

  try {

    mService.someMethodCall (someArguments);

  } catch (RemoteException e) {

    e.printStackTrace();

  }
Run Code Online (Sandbox Code Playgroud)

这不是可靠的代码,我不想在我的代码库中使用这样的东西.

除此之外:我试图通过IPC自己抛出一个RemoteException,我得到的只是一个堆栈跟踪和系统日志消息,它告诉我还不支持异常.我的应用程序从未看到异常,抛出异常的服务最终处于一个非常奇怪的状态(半途工作):-(

问题是:

  • 是否会抛出这些异常?

  • 有没有人见过这样的try-catch块捕获RemoteException?

  • 难道它们不存在而且我们只是被迫处理它们,因为"抛出RemoteException"是死代码还是AIDL编译器内部的遗留问题?

免责声明:我还没有阅读完整的源代码.我使用Grep来查找RemoteException的出现,所以我可能因为不同的空格使用而错过了一些.

service android aidl remoteexception

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

改善我们编写代码的方式?

在考虑软件工程的同时,我遇到了一个问题,为什么我们没有看到编写/记录代码的方式有任何改进.

想一想:自从我们从穿孔卡转向文本编辑以来,没有一个革命性的改进.我见过的最后一项改进是语法高亮和上下文敏感的帮助(例如Intellisense或ctags).不是我称之为革命性的东西.

这让我想知道:为什么会这样?

我会从错过的东西开始:

  • 我的很多代码都涉及几何.对于描述几何关系的文档,总是会出现在一大堆难以阅读的数学内容中(由于缺少适当的ASCII方程式设置).但是,如果我可以在代码中嵌入一些绘图或涂鸦,一切都会更容易,更整洁,更容易被理解.

您能想到什么会使您的编码/文本编辑/文档任务更容易?

language-agnostic editing

22
推荐指数
6
解决办法
2017
查看次数

为什么在c ++中使用c字符串?

现在有没有什么好的理由在C++中使用C-strings?我的教科书在某些方面的例子中使用它们,我觉得使用std :: string会更容易.

c c++ string stl c-strings

18
推荐指数
3
解决办法
6934
查看次数

Common Lisp相当于C枚举

我想学习一些Lisp语言(Common Lisp的)最近,我不知道是否有给定的数字,就像你可以在C通过枚举做一个名字的一种方法.

我不需要枚举的完整功能集.最后我只想有快速可读的代码.

我已经尝试了全局和小函数,但总是伴随着性能的降低.只需将数字插入代码总是更快.

lisp enums common-lisp

18
推荐指数
3
解决办法
4878
查看次数

在C中不必要的指针转换

我在这个帖子上对我的回答发表了评论:

函数调用中的malloc似乎在返回时被释放?

总之,我有这样的代码:

int * somefunc (void)
{
  int * temp = (int*) malloc (sizeof (int));
  temp[0] = 0;
  return temp;
}
Run Code Online (Sandbox Code Playgroud)

我有这个评论:

我可以说,请不要转换malloc的返回值?它不是必需的,可以隐藏错误.

我同意在C中不需要强制转换.它在C++中是强制性的,所以我通常添加它们以防万一我必须在C++中移植代码.

但是,我想知道这样的演员是如何隐藏错误的.有任何想法吗?

编辑:

似乎双方都有非常好的和有效的论据.感谢发帖,伙计们.

c c++ pointers

16
推荐指数
4
解决办法
2370
查看次数