小编Cap*_*orn的帖子

stderr未声明的标识符

void
argmatch_valid (const char *const *arglist,
            const char *vallist, size_t valsize)
{
  size_t i;
  const char *last_val = NULL;

  fprintf (stderr, _("Valid arguments are:"));
  for (i = 0; arglist[i]; i++)
    if ((i == 0)|| memcmp (last_val, vallist + valsize * i, valsize))
    {
      fprintf (stderr, "\n  - `%s'", arglist[i]);
      last_val = vallist + valsize * i;
    }
    else
    {
      fprintf (stderr, ", `%s'", arglist[i]);
    }
  putc ('\n', stderr);
}
Run Code Online (Sandbox Code Playgroud)

虽然我在我的.c文件中包含了stdio.h,但我得到了以下内容

warning C4013: 'fprintf' undefined; assuming extern returning int

error C2065: …

c

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

include_next 预处理器指令导致 MSVC 中出现问题

我知道 inlcude_next 恰好是 C 预处理器的 GNU 扩展。我在使用 MSVC 编译 Gnu 库代码时遇到问题。例如,有一个 stdio.h 头文件或者更确切地说GNU-like <stdio.h>. 当使用 MS 编译器编译时,我得到了invalid preprocessor command 'include_next'很好的结果,因为没有什么比#include_nextWindows 的指令更好的了。执行 #include_next 的主要目的是您希望在项目中创建一个名为 stdio.h 的文件,并且该文件将被包含而不是默认标头。

// #include_next <stdio.h>所以,我尝试了 2 个选项:1)在所有文件中注释掉这一行。2) 或者将 #include_next 替换为#include <stdio.h>.

我不知道选择 1) 是否会导致任何问题(最后出现链接器错误)。关于2),我得到了fatal error C1014: too many include files : depth = 1024,这也很好。为此,我将使用wrapper #ifndef包含防护# pragma once指令。

以下是我的担忧:

我需要在头文件 stdio.h 中编写类似#include <stdio>或 的语句吗?#include "stdio.h"为 Windows 编译时是否有意义? …

c windows gnu visual-studio-2010

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

使用 nmake.exe windows 在 makefile 中无法识别 addprefix 命令

all: prd.exe

CC=cl
CFLAGS=-O2 -I../src -I. /W4
LDFLAGS = /Zi
LIBSRC = $(addprefix ../lib/, \
        open.c malloc.c \
     ) \
     $(addprefix ../src/, \
        main.c \
      ) \
      helper.c

LIBOBJS = $(LIBSRC:.c=.o)

prd.exe: ../src/main.obj
$(CC) $(LDFLAGS) -Fe$@ *.o

../src/main.obj: ../src/main.c
$(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ 

.c.o:
$(CC) $(CFLAGS) $(LIBOBJS) -c $< -Fo $@ 

.c.i:
$(CC) $(CFLAGS) $(LIBOBJS) -C -E $< > $@

clean:
del /s /f /q ..\lib\*.o ..\src\*.o *.o *.exe *.pdb

distclean: clean
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

致命错误 U1000:语法错误 : ')' …

windows nmake makefile gnu-make

5
推荐指数
1
解决办法
1362
查看次数

在C中类推NULL指针

我有一个结构

struct detail {
int id;
uintptr_t init;
// blah blah
};
struct detail info;
info.id = 1;
info.init = (uintptr_t)NULL;
Run Code Online (Sandbox Code Playgroud)

我必须使该init成员为NULL.如果我进行类型转换(或不进行类型转换)可能会/可能不会发生NULL什么?如果我直接将其分配为NULL,如果它对info.init = NULL;运行时错误有任何不同,该怎么办?它汇编很好.但是代码的执行是我主要关注的问题.

谢谢

c windows null struct

5
推荐指数
1
解决办法
2066
查看次数

Linux 内核中的驱动程序探测和删除方法是否针对多个设备并行执行?

有人可以解释一下驱动程序.probe.remove方法序列化吗?

例如,如果服务器上连接了 10 个 PCIe 卡,并且有一个通用驱动程序来检测(探测)这 10 个设备,那么如何调用探测函数?它是对所有设备并行调用还是逐个执行 - 这意味着,在第一个设备的第一个探测调用返回之前,对探测的第二次调用不会发生?

谢谢,普拉塔梅什

linux device-driver linux-device-driver linux-kernel

5
推荐指数
0
解决办法
906
查看次数

无法从'FARPROC'转换为'BOOL(__ cdecl*)(LPMEMORYSTATUSEX)'

BOOL (WINAPI *gmse)(LPMEMORYSTATUSEX) = GetProcAddress(
                kernel32, "GlobalMemoryStatusEx");
Run Code Online (Sandbox Code Playgroud)

这是一个.cpp文件.在编译上面的代码时,我收到以下错误.

error C2440: 'initializing' : cannot convert from 'FARPROC' to 'BOOL (__cdecl *)(LPMEMORYSTATUSEX)'
    This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚我应该将该GetProcAddress函数转换为什么.有人可以指点我正确的方向吗?

谢谢

c++ winapi

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

声明名为'this'的参数时出现语法错误

typedef struct {
    index_tree_node node;
    uint32_t number;
    lzma_vli block_number_base;
    index_tree groups;
    lzma_vli record_count;
    lzma_vli index_list_size;
    lzma_stream_flags stream_flags;
    lzma_vli stream_padding;
} index_stream;
Run Code Online (Sandbox Code Playgroud)

以下是功能:

static void
index_cat_helper(const index_cat_info *info, index_stream *this)   //problem line
{
    index_stream *left = (index_stream *)(this->node.left);
    index_stream *right = (index_stream *)(this->node.right);

    if (left != NULL)
        index_cat_helper(info, left);

    this->node.uncompressed_base += info->uncompressed_size;
    this->node.compressed_base += info->file_size;
    this->number += info->stream_number_add;
    this->block_number_base += info->block_number_add;
    index_tree_append(info->streams, &this->node);

    if (right != NULL)
        index_cat_helper(info, right);

    return;
}
Run Code Online (Sandbox Code Playgroud)

错误:

错误C2143:语法错误:在'this'之前缺少')'

错误C2447:'{':缺少函数头(旧式正式列表?)

我正在寻找这些错误的来源.

c++ compiler-errors this

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

MSVC中的化合物C99字面当量

options->dict_size = UINT32_C(1) << (uint8_t []){
        18, 20, 21, 22, 22, 23, 23, 24, 25, 26 }[level];
Run Code Online (Sandbox Code Playgroud)

http://svn.r-project.org/R/trunk/src/extra/xz/lzma/lzma_encoder_presets.c

#ifndef UINT32_C
#   if UINT_MAX != 4294967295U
#       error UINT32_C is not defined and unsigned int is not 32-bit.
#   endif
#   define UINT32_C(n) n ## U
#endif
Run Code Online (Sandbox Code Playgroud)

为windows编译它.但是语法错误

error C2059: syntax error : '{'

error C2143: syntax error : missing ';' before '{'

error C2337: 'level' : attribute not found

typedef struct {
    uint32_t dict_size;
    // ...
} lzma_options_lzma;
Run Code Online (Sandbox Code Playgroud)

以前有人试过吗?

另外,我从未见过像这样的代码 …

c

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

在变量之间附加逗号

以下是我的代码。我想通过逗号分隔列表附加 ip:port 字符串。

ip = ['1.1.1.1', '2.2.2.2', '3.3.3.3', '4.4.4.4']
memcache = ''
port = '11211'
for node in ip:
    memcache += str(node) + ':' + port
    # join this by comma but exclude last one
Run Code Online (Sandbox Code Playgroud)

我想要这种格式的输出:

memcache = 1.1.1.1:11211, 2.2.2.2:11211, 3.3.3.3:11211, 4.4.4.4:11211

我怎样才能做到这一点?

python string

0
推荐指数
1
解决办法
2333
查看次数