atoi() – 字符串到int

我读到atoi()已被弃用,它相当于: (int)strtol(token_start, (char **)NULL, 10); 这是否意味着我应该使用上面而不是atoi(chr)或者它只是说它们是等价的?

是否有一个C预处理器根据定义/未定义的值消除#ifdef块?

原始问题 我想要的不是标准的C预处理器,而是可以从某处接受的变体 – 可能是命令行通过-DNAME1和-UNAME2选项 – 定义了哪些宏的规范,然后消除了死码。 通过一些例子可能更容易理解我所追求的内容: #ifdef NAME1 #define ALBUQUERQUE “ambidextrous” #else #define PHANTASMAGORIA “ghostly” #endif 如果命令是使用’-DNAME1’运行的,则输出将为: #define ALBUQUERQUE “ambidextrous” 如果命令是使用’-UNAME1’运行的,则输出将为: #define PHANTASMAGORIA “ghostly” 如果命令是在没有选项的情况下运行的,则输出将与输入相同。 这是一个简单的例子 – 我希望代码也可以处理更复杂的情况。 用现实世界但仍然简单的例子来说明: #ifdef USE_VOID #ifdef PLATFORM1 #define VOID void #else #undef VOID typedef void VOID; #endif /* PLATFORM1 */ typedef void * VOIDPTR; #else typedef mint VOID; […]

运算符在C中重载

我试图重载一些运算符: /* Typedef is required for operators */ typedef int Colour; /* Operators */ Colour operator+(Colour colour1, Colour colour2); Colour operator-(Colour colour1, Colour colour2); Colour operator*(Colour colour1, Colour colour2); Colour operator/(Colour colour1, Colour colour2); 我为每次尝试重载都收到此错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘+’ token 我找不到有关运算符重载的任何好文档。 谷歌搜索结果导致使用类的C ++教程。 在C中没有类。 谁能帮我? 谢谢。

Malloc是C中的三维数组?

我正在将一些MATLAB代码翻译成C,我正在转换的脚本大量使用具有10 * 100 * 300复杂条目的3D数组。 数组的大小也取决于传感器的输入,理想情况下应该动态分配数组。 到目前为止,我已经尝试了两种方法,第一种方法是平面1Darrays value = array[x + (y*xSize) + (z*ySize*xSize)] 这伤害了我的大脑使用。 我还尝试了一个指针数组的数组 int main () { int ***array = malloc(3*sizeof(int**)); int i, j; for (i = 0; i < 3; i++) { *array[i] = malloc(3*sizeof(int*)); for (j = 0; j < 3; j++) { array[i][j] = malloc(3*sizeof(int)); } } array[1][2][1] = […]

理解C命名空间

引自这里 , 在C中,有两种不同的类型名称空间:struct / union / enum标记名称的名称空间和typedef名称的名称空间。 name.c $ cat name.c #include typedef long long long2; int long2 () { return 4; } int main() { printf(“hello, world!”); return 0; } $ gcc name.c -o name name.c:4: error: ‘long2’ redeclared as different kind of symbol name.c:3: error: previous declaration of ‘long2’ was here $ name2.c […]

C ++浮点精度

可能重复: 浮点不准确的例子 double a = 0.3; std::cout.precision(20); std::cout << a << std::endl; 结果:0.2999999999999999889 double a, b; a = 0.3; b = 0; for (char i = 1; i <= 50; i++) { b = b + a; }; std::cout.precision(20); std::cout << b << std::endl; 结果:15.000000000000014211 所以..’a’比它应该小。 但是,如果我们采取’a’50次 – 结果会比它应该更大。 为什么是这样? 如何在这种情况下得到正确的结果?

如何在gcc中实现变量参数?

int max(int n, …) 我正在使用cdecl调用约定,其中调用者在被调用者返回后清理变量。 我有兴趣知道宏va_end , va_start和va_arg工作的? 调用者是否将参数数组的地址作为max的第二个参数传递?

使用C / Pthreads:共享变量需要是不稳定的吗?

在C编程语言中,Pthreads作为线程库; 在线程之间共享的变量/结构是否需要声明为volatile? 假设他们可能受到锁定或不受保护(可能是障碍)。 pthread POSIX标准对此有任何发言权,是依赖于编译器还是不依赖于编译器? 编辑添加:感谢您的答案。 但是,如果你不使用锁,那该怎么办? 如果你使用障碍物怎么办? 或者使用比较和交换等原语直接和primefaces地修改共享变量的代码……

C宏和括号中的参数使用

例 #define Echo(a) a #define Echo(a) (a) 我意识到这里可能没有显着差异,但为什么你会想要在宏体内包含a括号内的a ? 它是如何改变它的?

C中文件范围的可变修改数组

我有一些像这样的代码: static int a = 6; static int b = 3; static int Hello[a][b] = { { 1,2,3}, { 1,2,3}, { 1,2,3}, { 1,2,3}, { 1,2,3}, { 1,2,3} }; 但是当我编译它时,它说错误: 在文件范围内可变地修改了“Hello” 怎么会发生这种情况? 我该怎么办呢?