根据节点js说明手册,强烈建议不要在全局安装任何节点模块.
我尝试过各种各样的事情.我在我的主目录,我的git文件(带有node_modules)文件夹和实际的node_modules文件夹中执行了以下命令.
> var express=require('express');
undefined
> var express=require('node_modules/express');
Error: Cannot find module 'node_modules/express'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at repl:1:13
at REPLServer.self.eval (repl.js:110:21)
at repl.js:249:20
at REPLServer.self.eval (repl.js:122:7)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
Run Code Online (Sandbox Code Playgroud)
请注意,在上面,我期望它们在我的git文件夹中(带有node_modules).我发现这条线很好奇
> var express=require('express');
Run Code Online (Sandbox Code Playgroud)
产生
undefined
Run Code Online (Sandbox Code Playgroud)
在主目录中,我只是得到相同的"找不到模块"错误.
以下结果让我很困惑:
int i1 = 20-80u; // -60
int i2 = 20-80; // -60
int i3 =(20-80u)/2; // 2147483618
int i4 =(20-80)/2; // -30
int i5 =i1/2; // -30
Run Code Online (Sandbox Code Playgroud)
i3
似乎计算为(20u-80u)/2
,而不是(20-80u)/2
i3
是一样的i5
.我的问题主要涉及第四节第六段.
这两种符合实施形式是托管和独立的.符合要求的托管实现应接受任何严格符合的程序.
据我所知,这构成了典型的应用程序环境,包括文件系统,分配内存和线程......
一个符合独立实现应接受任何严格符合程序,其中使用的库条款(第7节)中指定的功能被限制在标准报头的内容
<float.h>
,<iso646.h>
,<limits.h>
,<stdalign.h>
,<stdarg.h>
,<stdbool.h>
,<stddef.h>
,<stdint.h>
,和<stdnoreturn.h>
.
......这构成了典型的内核和/或嵌入式最小环境,它没有标准文件系统,分配内存或线程(以及其他内容).
符合实现的实现可能具有扩展(包括附加库函数),前提是它们不会改变任何严格符合程序的行为.
似乎这给托管实现自由地称自己为托管或独立实现,当涉及到文件系统,分配内存或线程(以及其他内容)时,这些可以属于扩展类别,因此它只能实现每次都返回一个指示错误的值的接口.仅举几个:
fopen
,fgets
并且malloc
可以返回NULL
fprintf
,fscanf
,fputc
并且fgetc
可以返回EOF
thrd_create
可以返回thrd_error
(表示"请求无法兑现")这意味着区分第四节第六段给出的内容实际上毫无意义.是否有任何要求保证托管和独立实施中这些功能的某些实际功能级别?例如,是否要求上述函数实际上能够返回除相应故障值之外的其他函数?
C11或C99的6.8.1节或C89的 3.6.1节似乎都表明default
和case x
(其中x
一些是常量表达式)是标记语句的示例,identifier:
适用于的旁边标签goto
.
我知道,我可以简单地放置identifier:
风格的标签直接跟随default:
或case x:
标签.这不是这个问题的关键所在.我更加好奇是否有任何实际的理由背后禁止这种行为.
如果可以在选择结构default:
之外声明标签switch
,那么我会理解,因为goto
在switch
选择结构的内部旨在瞄准的位置之间会存在一些冲突.然而,C11的部分6.4.1或C99或3.1.1 C89禁止使用default
作为除了关键字之外的任何,并且6.8.1进一步限制了其使用,以switch
仅结构(或generic
结构在C11,这是无关紧要这里).
我也理解,如果多个(可能是嵌套的)switch
结构,每个都带有default:
(或case x:
)标签引入了歧义,但是这些标签的范围似乎被限制在其最内部的周围switch
结构中,并且引用其范围之外的任何标识符是显然是一个需要在编译时进行诊断的错误.
是否已在任何标准文件(例如理由)中讨论过这个问题?除了"因为它是"还是"因为规范是这样的"以外,对这种行为有什么解释吗?如果是这样,那是什么解释?
我正在尝试编写外部Lua模块.
我在Windows 8.1上工作,我使用gcc作为编译器.
我的要求是自己构建/编译所有内容,而无需使用在线提供的预编译文件.
首先,我构建了Lua 5.2.4的C源代码如下:
gcc -c*.c
ren lua.o lua.obj
ren luac.o luac.obj
ar rcs luaX.XXlib*.o
gcc -shared -o luaX.XXdll*.o
gcc lua.c luaX.XXlib -o luaX.XXexe
gcc luac.c luaX.XXlib -o luacX.XXexe
del*.o*.obj
X.X.X
源代码修订在哪里.
一旦我创建了我的.exe,我就编写了我的模块的C代码(让我们称之为LuaMath):
#include<windows.h>
#include<math.h>
#include "lauxlib.h"
#include "lua.h"
static int IdentityMatrix(lua_State *L)
{
int in = lua_gettop(L);
if (in!=1)
{
lua_pushstring(L,"Maximum 1 argument");
lua_error(L);
}
lua_Number n = lua_tonumber(L,1);
lua_newtable(L); /* tabOUT n */
int i,j;
for (i=1;i<=n;i++)
{
lua_newtable(L); /* row(i) tabOUT n */
lua_pushnumber(L,i); /* …
Run Code Online (Sandbox Code Playgroud) 根据C标准,返回的任何字符fgetc
都以unsigned char
值的形式返回,"转换为int
"(该引用来自C标准,表明确实存在转换).
当sizeof (int) == 1
,许多unsigned char
值超出范围.因此,这些unsigned char
值中的一些可能最终被转换为一个int
值(转换的结果是"实现定义的或实现定义的信号被引发")EOF
,尽管文件实际上并不存在,但它将被返回处于错误或文件结束状态.
我惊讶地发现这样的实现确实存在.TMS320C55x CCS手册文档UCHAR_MAX
的相应值为65535,INT_MAX
具有32767,fputs
并fopen
支持二进制模式......更令人惊讶的是,它似乎将环境描述为完全符合的完整实现(减去信号).
C55x C/C++编译器完全符合ISO规范定义的ISO C标准......
编译器工具带有完整的运行时库.所有库函数都符合ISO C库标准....
这样的实现是否可以返回一个值,表示没有的错误,真的完全符合?这是否可以证明在循环的条件部分中使用feof
和ferror
(看起来很可怕)?例如,while ((c = fgetc(stdin)) != EOF || !(feof(stdin) || ferror(stdin))) { ... }
void WriteToPipe(void)
// Read from a file and write its contents to the pipe for the child's STDIN.
// Stop when there is no more data.
{
DWORD dwRead, dwWritten;
CHAR chBuf[BUFSIZE];
BOOL bSuccess = FALSE;
char * name = malloc(100);
fgets(name, 100, stdin);
bSuccess = WriteFile(g_hChildStd_IN_Wr, name, 10, &dwWritten, NULL);
if (!bSuccess)
ErrorExit("");
}
void ReadFromPipe(void)
// Read output from the child process's pipe for STDOUT
// and write to the parent process's pipe for STDOUT.
// Stop when …
Run Code Online (Sandbox Code Playgroud) 我多次被告知volatile
无法优化对对象的访问,但在我看来,C89,C99和C11标准中的这一部分建议不然:
...实际实现不需要评估表达式的一部分,如果它可以推断出它的值未被使用并且不产生所需的副作用(包括由调用函数或访问易失性对象引起的任何副作用).
如果我理解正确,这句话就说明实际的实现可以优化表达式的一部分,只要满足这两个要求:
在我看来,很多人都把"包括"的含义与"排除"的含义混为一谈.
编译器是否可以区分"需要"的副作用和不需要的副作用?如果时间被认为是一个必要的副作用,那么为什么允许编译器优化掉像/ do_nothing();
或类似的空操作int unused_variable = 0;
?
如果编译器能够推断函数什么都不做(例如void do_nothing() { }
),那么编译器是否可能有理由优化对该函数的调用?
如果编译器能够推断出一个volatile
对象没有被映射到任何关键的东西(也许它被映射/dev/null
到形成一个空操作),那么编译器是否也可能有理由来优化那个非关键的副作用远?
如果编译器可以执行优化来消除不必要的代码,例如do_nothing()
在称为"死代码消除"的过程中调用(这是很常见的做法),那么为什么编译器也不能消除对空设备的易失性写入?
据我所知,编译器可以优化对函数或易失性访问的调用,或者由于5.1.2.3p4,编译器也无法优化掉.
我有样条曲线的数据
我需要使用绘制这条曲线Direct2D
.目前我正在使用ID2D1GeometrySink接口绘制几何图形,但似乎它没有实现可能的AddSpline
方法.
有没有办法通过Direct2D
?绘制样条?即使是DirectX
可以在Direct2D
应用程序中使用的实现也没问题.
我试图在C中创建一个char数组,用int的数字填充它,但int可以是任意数量的数字.
我正在使用一个名为的创建函数getDigits(int num)
,它返回int所具有的多个数字.
char buffer[getDigits(number)] = "";
snprintf(buffer, sizeof(buffer),"%d",number);
Run Code Online (Sandbox Code Playgroud)
但是当我使用gcc编译时,它返回:
error: variable-sized object may not be initialized
我已经尝试了一切.当我宣布它时char fileSizeStr[5] = "";
,它是有效的.当我尝试动态声明缓冲区大小时,我可以看到问题正在上升,但我真的想知道是否是实现此目的的一种方法.