小编PSk*_*cik的帖子

NULL是指针吗?

因此,我与我的教授较早地争论过,认为NULL不是指针,但他坚持认为这是因为存在诸如NULL指针之类的东西。所以,现在我有点困惑,如果NULL确实是一个指针

我已经尝试过在互联网上搜索,但找不到任何答案,所以我的最后选择是在这里

c null pointers conceptual concept

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

访问一块内存(/ C/C++数组),就好像它是一个文件流一样

有没有办法在C(或C++)中执行此操作?

背景信息:我将逐行读取内存块或大文件,并逐个处理这些行,我懒得两次写同样的东西,一次用于内存块,一次用于文件流.如果需要使用文件流版本,则该文件将不适合内存.可以理解的是,我可以将内存块保存到文件中,然后使用文件流访问相同的数据,但这样会浪费计算机时间.

我知道linux系统上的/ dev/shm.有没有更便携的东西在语言层(C或C++)给我同样的抽象?

c c++ fstream cfstream

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

Ruby生态系统中Semver的替代品

在红宝石生态系统(甚至其他地方)中是否有功能(即,我可以用它bundlerrubygems替代)SemVer

我对SemVer(MAJOR.MINOR.PATCH)的问题在于它试图量化两个不兼容的东西:

  1. 改变大小(PATCH - 一个小变化)
  2. 向后兼容性(MINOR - 不间断,MAJOR - 打破)

PATCH仍然很可能是一个突破性的变化,这使得它等于MAJOR而小于MINOR,而MINOR小于MAJOR.所以:

  PATCH == MAJOR  && MAJOR > MINOR && MINOR > PATCH
Run Code Online (Sandbox Code Playgroud)

这意味着PATCH <> MINOR同时,这永远不会是真的.

理想情况下,我希望有两个版本控制线 - 一个基于向后兼容性(例如没有破损,可能难以察觉的破损(==补丁),破坏)和一个基于变化大小(无视向后兼容性),一个人性化的版本行,如果你愿意的话.我希望能够同时使用它们.

(仅使用基于纯后向兼容性的版本控制,只要操作系统通过向屏幕写入"hello world"开始,我就可以从"hello world"转到操作系统.)

例如:如果H代表人类友好的版本控制,而B代表向后兼容性是基于后向兼容性的,那么我希望能够说:

  1. 〜> H2.0(==坚持使用H2.X;如果你制作了一个版本H3.0,它增加了200MB的非破坏性附加功能,我不希望你下载它,但确实给我带来了你做的那些不间断的改进H2.0线)
  2. 〜> B0.1(==给我不间断的变化(第3列,相当于Semver的第2列)并可能不知不觉地破坏 变化(第2列,相当于SemVer的第3列))

ruby semantic-versioning

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

Lua错误处理

我是lua的新手.

我试过使用 http://keplerproject.github.io/luafilesystem/examples.html ,它会在无法访问的目录上引发错误.

这似乎是由luaL_error https://github.com/keplerproject/luafilesystem/blob/master/src/lfs.c#L563引起的

我怎么能抓到这个错误? http://www.tutorialspoint.com/lua/lua_error_handling.htm 建议pcall,但这并不能阻止脚本死亡:

pcall(lfs.dir('/etc/passwd')) #this fails to handle the not a directory error
Run Code Online (Sandbox Code Playgroud)

error-handling lua

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

-pthread,-lpthread和最小动态链接时间依赖性

这个答案建议-pthread-lpthread预定义的宏更可取.

根据经验,-pthread只给我一个额外的宏:#define _REENTRANT 1 它似乎也强制libpthread.so.0作为动态链接时间依赖.

当我编译时-lpthread,只有在我实际调用任何pthread函数时才会添加该依赖项.

这对我来说最好,因为那时我不必在构建脚本中以不同方式处理多线程程序.

所以我的问题是,-pthreadvs 还有什么用的-lpthread,是否可以在-pthread不强制表示动态链接时依赖的情况下使用?

示范:

$ echo 'int main(){ return 0; }' | c gcc -include pthread.h -x c - -lpthread && ldd a.out | grep pthread
$ echo 'int main(){  return pthread_self(); }' | c gcc -include pthread.h -x c - -lpthread && ldd a.out | grep pthread
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x0000003000c00000)
$ …
Run Code Online (Sandbox Code Playgroud)

c linux gcc glibc pthreads

4
推荐指数
2
解决办法
974
查看次数

C 链接错误(使用 tcc)

我正在尝试从名为 的小型 cc (tcc-0.9.26-win64-bin.zip)运行该示例libtcc_test.c

我已将libtcc.hfrom libtccintoinclude复制libtcc.deflib.
然后我运行tcc ./examples/libtcc_test.c并收到链接错误:/

tcc: error: undefined symbol 'tcc_new'
tcc: error: undefined symbol 'tcc_set_lib_path'
tcc: error: undefined symbol 'tcc_set_output_type'
tcc: error: undefined symbol 'tcc_compile_string'
tcc: error: undefined symbol 'tcc_add_symbol'
tcc: error: undefined symbol 'tcc_relocate'
tcc: error: undefined symbol 'tcc_get_symbol'
tcc: error: undefined symbol 'tcc_delete'
Run Code Online (Sandbox Code Playgroud)

我缺少什么?


更多信息:

P:\cpp\tcc>tcc ./examples/libtcc_test.c -vv
tcc version 0.9.26 (i386 Win32)
-> ./examples/libtcc_test.c
-> p:/cpp/tcc/include/stdlib.h
->  p:/cpp/tcc/include/_mingw.h
-> …
Run Code Online (Sandbox Code Playgroud)

c linker-errors tcc undefined-symbol lib

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

POSIX中未提及的错误

opendir几乎必然是一个内存分配函数,但是opendirPOSIX规范ENOMEM在可能的错误列表中没有提到.

是什么让符合POSIX标准的实现有权errno=ENOMEM在呼叫中设置opendir

c posix language-lawyer

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

将数据放入 .text 时,带有 gcc 警告的汇编器警告

当我编译

__attribute__((section(".text"))) const int x = 42;
int main(){ return x; }
Run Code Online (Sandbox Code Playgroud)

使用 gcc(适用于 tinycc 和 clang),我得到

Warning: ignoring changed section attributes for .text.

警告的原因是什么,如何在仍然保留(始终只读)数据的同时消除它.text

c assembly gcc

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

数组元素之前的取消引用运算符?

like 中的符号有什么int y = *x[0]作用,即当您在数组元素之前有一个取消引用运算符时?

c

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

简单的继承 - 奇怪的编译器错误

我有这个简单的代码片段,它包含struct timespec并添加静态成员的最小值和最大值.

#include <sys/stat.h>
#include <limits>
struct Timespec : public timespec {
    Timespec() :timespec() {};
    Timespec(decltype(tv_sec) s, 
                     decltype(tv_nsec) ns
            ) {
        tv_sec = s;
        tv_nsec = ns;
    }
    static const Timespec max;
    static const Timespec min;
};

const Timespec Timespec::min  = Timespec(0,0);
const Timespec Timespec::max  = Timespec(
        std::numeric_limits<decltype((timespec().tv_sec))>::max(), 
        std::numeric_limits<decltype((timespec().tv_nsec))>::max()
    );
Run Code Online (Sandbox Code Playgroud)

它编译OK,但如果我更换decltype((timespec()/*...*/decltype((Timespec()/*...*/在年底的两行,我得到:

$ make timespec.o
g++ -std=c++0x   -c -o timespec.o timespec.cc
In file included from timespec.cc:2:0:
/usr/include/c++/4.8/limits: In instantiation of ‘static constexpr _Tp std::numeric_limits<_Tp>::max() [with …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11

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