javascript

java

python

c#

android

node.js

reactjs

c++

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

C ++中的命名空间

有没有办法(ab)使用C预处理器在C中模拟名称空间?

我正在按照以下思路思考:

#define NAMESPACE name_of_ns
some_function() {
    some_other_function();
}

这将被转换为:

name_of_ns_some_function() {
    name_of_ns_some_other_function();
}
trans by 2020-01-20T00:27:09Z

c-从int *转换后,我的char指针指向无效值

我正在学习C编程语言,我刚刚开始学习带有指针的数组。 我在这个问题上有问题,希望输出必须是2,但必须是2,有人可以解释为什么吗?

int main(){
   int arr[] = {1, 2, 3, 4, 5};
   char *ptr = (char *) arr;
   printf("%d", *(ptr+4));
   return 0;
}
trans by 2020-01-19T22:55:34Z

c-在不使用abs函数的if语句的情况下获取绝对值

我在考虑如何在不使用if语句或abs()的情况下获得整数的绝对值。起初,我在使用左移位(<<),试图将负号移出范围,然后将右移回原来的位置 ,但不幸的是,这对我不起作用。 请让我知道为什么它不起作用以及其他替代方法。

trans by 2020-01-19T21:56:19Z

如何在C或C ++中创建单个实例应用程序

您对创建单个实例应用程序有什么建议,以便一次只允许一个进程运行? 文件锁,互斥锁还是什么?

trans by 2020-01-19T18:32:15Z

C标准是否允许将任意值分配给指针并递增?

该代码的行为定义是否正确?

#include <stdio.h>
#include <stdint.h>

int main(void)
{
    void *ptr = (char *)0x01;
    size_t val;

    ptr = (char *)ptr + 1;
    val = (size_t)(uintptr_t)ptr;

    printf("%zu\n", val);
    return 0;
}

我的意思是,即使指针指向某个随机地址,我们也可以为其分配一些固定数字并使其递增吗? (我知道您不能取消引用它)

trans by 2020-01-19T17:49:33Z

最佳捕获从system()命令的标准输出

这个问题已经在这里有了答案:

  • 如何使用POSIX在C ++中执行命令并获取命令的输出?                                     9个答案

我正在尝试通过system()(例如system("ls"))启动外部应用程序。我想捕获其发生的输出,以便将其发送到另一个函数进行进一步处理。 在C / C ++中执行此操作的最佳方法是什么?

trans by 2020-01-19T17:19:08Z

c-字符串输入到flex lex

我想使用flex / bison解析器创建一个read-eval-print循环。 麻烦的是,flex生成的词法分析器想要输入FILE *类型,而我希望它是char *。 反正有这样做吗?

一种建议是创建一个管道,将其送入字符串并打开文件描述符,然后发送给词法分析器。 这相当简单,但是令人费解,并且与平台无关。 有没有更好的办法?

trans by 2020-01-19T02:24:07Z

编译-C中的头文件和源文件如何工作?

我仔细研究了可能的重复项,但是那里没有答案。

tl; dr:source.c中的源文件和头文件如何关联? 项目在构建时是否隐式地整理了声明/定义依赖项?

我试图了解编译器如何理解source.cheader.h文件之间的关系。

鉴于这些文件:

header.h:

int returnSeven(void);

source.c:

int returnSeven(void){
    return 7;
}

main.c:

#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main(void){
    printf("%d", returnSeven());
    return 0;
}

这个烂摊子会编译吗? 我目前正在使用来自Cygwin的gcc在NetBeans 7.0中完成我的工作,它可以自动完成很多构建任务。 编译项目时,所涉及的项目文件是否会根据header.h761中的声明来整理隐式包含source.c的内容?

trans by 2020-01-18T20:04:45Z

c-使用指针从单链列表中删除项目

在最近的Slashdot访谈中,Linus Torvalds给出了一个示例,该示例说明了某些人如何使用指针,表明他们并不真正了解如何正确使用它们。

不幸的是,由于我是他所谈论的人之一,所以我也无法理解他的榜样:

我见过太多的人通过跟踪“上一个”条目来删除单链接列表条目,然后删除该条目,   就像是

*pp = entry->next

每当我看到这样的代码时,我都会说“这个人不会   理解指针。”这可悲的是很普遍。   了解指针仅使用“指向入口指针的指针”,并且   用list_head的地址初始化它。 然后当他们   遍历列表,他们可以删除条目而无需使用任何   有条件的,只要做

*pp = entry->next

有人可以提供更多有关这种方法为什么更好的解释,以及在没有条件语句的情况下如何工作的更多解释吗?

trans by 2020-01-18T15:11:55Z

浮点平方根近似如何工作?

我发现了一个相当奇怪但有效的平方根近似,为std::sqrt()s; 我真的不明白。 有人可以向我解释为什么此代码有效吗?

float sqrt(float f)
{
    const int result = 0x1fbb4000 + (*(int*)&f >> 1);
    return *(float*)&result;   
}

我已经对其进行了一些测试,它输出的值从std::sqrt()降低了大约1-3%。 我知道Quake III的快速反平方根,我想这里有点类似(没有牛顿迭代),但是我非常感谢对其工作原理的解释。

(注意:我已经将其标记为c和c ++,因为它们都是有效的(参见注释)C和C ++代码)

trans by 2020-01-18T12:05:43Z

c-什么是双星(例如NSError **)?

所以,我看到了这个:

error:(NSError **)error

在苹果文档中。 为什么要两颗星? 有什么意义?

trans by 2020-01-18T02:45:10Z

OpenMP:局部变量是否自动私有?

#pragma omp parallel
{
    int x; // private to each thread ?
}

#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
    int x; // private to each thread ?
}

谢谢!

附言 如果局部变量是自动私有的,那么使用private子句有什么意义呢?

trans by 2020-01-17T19:36:23Z

c-在prin中设置可变文本列的宽度

为了确定C语言中列的大小,我们使用%<number>d。例如,我可以输入%3d,它会给我一列width = 3。我的问题是%之后的数字是我收到的变量,所以我需要类似%xd(其中x是我之前在程序中收到的整数变量)之类的东西。但这不起作用。

还有其他方法吗?

trans by 2020-01-17T10:40:00Z

c-警告:左移计数> =典型宽度

我是处理位的新手,在编译时会遇到以下警告:

sizeof

我的第7行看起来像这样

unsigned long int x = 1 << 32;

如果我的系统上sizeof的大小是32位,这将是有道理的。 但是,CHAR_BIT返回8,并且CHAR_BIT被定义为8,建议long应该是8x8 = 64位长。

我在这里想念什么? sizeofCHAR_BIT不正确还是我误解了一些基本知识?

trans by 2020-01-17T05:14:43Z

c-为什么允许gcc以推测方式从结构加载?

显示可能出错的gcc优化和用户代码的示例

以下代码段中的函数“ foo”将仅加载结构成员A或B之一; 至少这是未优化代码的目的。

typedef struct {
  int A;
  int B;
} Pair;

int foo(const Pair *P, int c) {
  int x;
  if (c)
    x = P->A;
  else
    x = P->B;
  return c/102 + x;
}

这是gcc -O3给出的内容:

mov eax, esi
mov edx, -1600085855
test esi, esi
mov ecx, DWORD PTR [rdi+4]   <-- ***load P->B**
cmovne ecx, DWORD PTR [rdi]  <-- ***load P->A***
imul edx
lea eax, [rdx+rsi]
sar esi, 31
sar eax, 6
sub eax, esi
add eax, ecx
ret

因此,似乎允许gcc推测性地加载两个结构成员,以消除分支。 但是,下面的代码被认为是未定义的行为,还是上述的gcc优化是非法的?

#include <stdlib.h>  

int naughty_caller(int c) {
  Pair *P = (Pair*)malloc(sizeof(Pair)-1); // *** Allocation is enough for A but not for B ***
  if (!P) return -1;

  P->A = 0x42; // *** Initializing allocation only where it is guaranteed to be allocated ***

  int res = foo(P, 1); // *** Passing c=1 to foo should ensure only P->A is accessed? ***

  free(P);
  return res;
}

如果在上述情况下会发生负载推测,则由于P-> B的最后一个字节可能位于未分配的内存中,因此加载P-> B会导致异常。 如果关闭优化,则不会发生此异常。

问题

负载推测上方显示的gcc优化是否合法? 规范在哪里说或暗示没问题?如果优化合法,那么“ naughtly_caller”中的代码如何变成未定义的行为?

trans by 2020-01-17T00:09:05Z

SSE内部函数参考

有谁知道列出gcc的SSE内在函数(即<* mmintrin.h>头文件中的函数)操作的参考文件?

谢谢。

trans by 2020-01-16T19:41:38Z

c-如何“ while(* s ++ = * t ++)”复制字符串?

我的问题是,此代码有什么作用(来自[http://www.joelonsoftware.com/articles/CollegeAdvice.html):]

while (*s++ = *t++);

该网站说上面的代码复制了一个字符串,但我不明白为什么...

与指针有关吗?

trans by 2020-01-16T16:02:34Z

什么是C中的时间(NULL)?

我学习了一些基本的C函数,并在某些手册中遇到了time(NULL)

这到底是什么意思?

trans by 2020-01-16T15:32:09Z

内在函数是什么?

谁能解释他们是什么,为什么我会需要它们? 如果需要使用内部函数,我将构建哪种应用程序?

trans by 2020-01-16T02:35:51Z

普通的C语言中类型安全的通用数据结构?

我完成的C ++编程比“普通的C编程”要多得多。 在纯C语言中编程时,我非常想念的一件事是类型安全的通用数据结构,该数据结构是通过C ++通过模板提供的。

为了具体起见,请考虑一个通用的单链表。 在C ++中,定义您自己的模板类,然后将其实例化为所需的类型很简单。

在C语言中,我可以想到几种实现通用单链表的方法:

  1. 使用void指针遍历类型系统,一次编写链接列表类型和支持过程。
  2. 编写带有必要类型名称等的预处理器宏,以生成特定于类型的数据结构和支持过程。
  3. 使用更复杂的独立工具生成所需类型的代码。

我不喜欢选项1,因为它颠覆了类型系统,并且可能会比专门针对类型的实现更糟糕的性能。 据我所知,对所有类型使用统一的数据结构表示形式,并强制转换为空指针/从空指针进行强制转换,就需要一种专门用于元素类型的实现可以避免的间接寻址。

选项2不需要任何其他工具,但感觉有些笨拙,如果使用不当,可能会导致严重的编译器错误。

与专用选项2相比,专用选项3可以提供更好的编译器错误消息,因为专用数据结构代码以扩展形式存在,可以在编辑器中打开并由程序员检查(与预处理器宏生成的代码相对)。 但是,此选项最重,是一种“穷人模板”。 我以前使用过这种方法,使用一个简单的sed脚本来专门化某些C代码的“模板化”版本。

我想用C而不是C ++编写我将来的“低级”项目,但是对于为每种特定类型重写通用数据结构的想法感到震惊。

人们对这个问题有什么经验? 是否存在C中良好的通用数据结构和算法库,而这些库不与选项1一起使用(即,在空指针之间进行强制转换,这会牺牲类型安全性并增加了间接级别)?

trans by 2020-01-15T20:57:20Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共79页