标签: c99

定义中函数标题后的C变量声明

在阅读一些FreeBSD源代码时(参见:radix.h第158-173行),我在定义中找到了"函数标题"之后的变量声明.

这在ISO C(C99)中有效吗?什么时候应该在生产代码中完成而不是仅仅在"函数标题"中声明变量?为什么要在这里完成?

我指的是标题字符串的函数,如下所示: int someFunction(int i, int b) {

c variables freebsd c99 c89

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

我应该使用C(99)布尔值吗?(也是c ++中的c ++ booleans?)

我没有做太多的c编程,但是当我需要一个假的时候,我把0放在我想要的时候我把它放1,(例如while(1)),在其他情况下我用的是像"while(ptr)"这样的东西或"if(x)".

我是否应该尝试使用C99布尔值,如果我帮助新手编程学习基础知识(思考cs 1 ??学生),我是否应该将它们推荐给其他人?

我很确定Visual Studio编译器支持c99 bools,但是为c89编译了很多项目(工业界的开源和c应用程序)?如果我不使用C bools,我至少应该做#define TRUE 1 #define FALSE 0之类的事情吗?

那么c ++ Booleans(对于c ++)呢?

c c++ boolean c99

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

C++库的C部分是自动C99吗?

符合C++ 98/03/0x实现的所有函数是否完全符合C99?

我认为C++ 0x添加了一些C99(语言)功能,但从未听过或读过任何关于C库函数的确定性.

为了避免任何混淆,我在谈论使用<c*>标头集中声明的函数的C++程序.

谢谢.

c c++ c99 standard-library

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

VS2010中的C99:uint8_t*非法使用类型

我正在使用VC2010,尝试编译一些用C99 for Linux编写的库.以下行给出了错误C2275:'uint8_t':非法使用此类型作为表达式

uint8_t * G = (uint8_t*)calloc(N ,sizeof(uint8_t));
Run Code Online (Sandbox Code Playgroud)

subhint:stdint.h(21):查看'uint8_t'的声明,该行是:

typedef unsigned char uint8_t;
Run Code Online (Sandbox Code Playgroud)

然后来累积的问题:错误C2065:'G':未声明的标识符等什么是非法的?

c++ c99 visual-studio-2010 visual-c++

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

具有相同指针的指针算法(数组下标不是整数)

我只是想确保我对这里发生的事情的解释是正确的.请考虑以下代码片段,这些代码片段在32位环境中编译并在堆栈上声明.

// Declares an array of integers with a length of 10.
int arr[ 10 ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// Performs some pointer arithmetic.
int result = arr[ arr + 2 ];
Run Code Online (Sandbox Code Playgroud)

现在我知道在C中使用方括号只是以下的别名.

*( ... )
Run Code Online (Sandbox Code Playgroud)

因此,在该别名后,该代码段将转换为以下内容.

int result = *( arr + arr + 2 );
Run Code Online (Sandbox Code Playgroud)

现在,我的解释是指针算术将计算为arr加2的地址乘以整数的大小加上arr的地址.因此,我的结论是arr将指向我没有分配的内存.这将导致结果成为一些垃圾值.

但是,当我用clang和gcc编译时,我收到一个错误,说"数组下标不是整数".为什么会这样,我的解释在哪里出错?

c gcc c99 clang

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

C:如何使数组的大小动态化?

我从书中读到:«C Primer Plus»告诉我C99标准,可以使用如下的语法:

    int b=4;
    char a[b];
Run Code Online (Sandbox Code Playgroud)

但是当我把这段代码放到vs2013中时,它告诉我"表达式必须有一个常量值".

这本书错了吗?或者有一些我不知道的关于vs2013的新功能?

c arrays c99 c11 visual-studio-2013

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

`l`长度修饰符对后续的a,A,e,E,f,F,g或G转换说明符没有影响

我想了解以下部分:

l (ell)

用于指定后续的d,i,o,u,x,或X转换说明适用于一个longunsigned long参数; 以下n转换说明符适用于指向long 参数的指针; 以下c转换说明符适用于wint_t 参数; 以下s转换说明符适用于指向wchar_t参数的指针; 或具有在下文中没有任何影响a,A,e,E,f, F,g,或G转换说明.

我还可以看到这与cppreference一致:fprintf在哪里"%f""%lf"等同于printf()家庭.

那么,这个答案错误?或是否C99清楚,现在"%f"float,虽然"%lf"double针对printf() …

c printf c99 format-specifiers language-lawyer

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

结构硬编码初始化中的C结构

我在C99做错了什么:

struct chess {
    struct coordinate {
        char piece;
        int alive;
    } pos[3];
}table[3] =
{
    {
      {'Q', (int)1},{'Q', (int)1},{'Q', (int)1},
      {'B', (int)1},{'B', (int)1},{'B', (int)1},
      {'K', (int)1},{'K', (int)1},{'K', (int)1},
    }
};
Run Code Online (Sandbox Code Playgroud)

它给出了错误:

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
Run Code Online (Sandbox Code Playgroud)

我希望能够访问数据,例如在结构中具有结构:

table[row].pos[column].piece
table[row].pos[column].alive
Run Code Online (Sandbox Code Playgroud)

我尝试了几种组合,似乎没有一种组合适用于这种情况.在此之前我已经完成了之前的struct硬编码初始化,但这次不是结构中的结构.

有什么建议?

c struct c99 hardcoded

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

何时抛弃const合法或非法?(gcc,clang和MSVC)

何时抛弃const非法?

在许多情况下,const它只是用户利益的注释,由编译器强制执行.这个问题要求什么时候抛弃const是严格违法的,C99标准的哪一部分禁止它(如果有的话)?

我怀疑在某些情况下它一定是非法的,因为我发现const全局范围内的函数指针有时被gcc内联.如果这些函数指针可以在程序的后期合法修改,那么这种优化将是无效的.另外我很确定我已经阅读了关于何时丢弃const在StackOverflow上是非法的解释,但我找不到它.(我认为答案是const只有当一个变量最初没有被声明为时才能抛弃const.)

我已经标记了这个C99,因为我希望这是C99标准中指定的内容,但如果答案可以解释C99的gcc,clang和MSVC实现的共同行为,那么这对我来说也足够了.

(显然这是一个非常基本的问题,所以我确实试过并没有找到专门针对C标准的副本.如果其他人可以指出我一个完全重复,我会很乐意结束投票.在任何一种情况下,我认为这个问题标题至少可以帮助SSO解决这类问题.)

c casting const c99 language-lawyer

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

为什么在C99中不允许隐式声明gets()?

我开始学习C语言编程,这是我所指代的代码,其中显示了一些源代码,gets()而我的IDLE也认识到它。但是仍然在编译时,我的编译器不同意它。

谁能帮我吗?我gets()在main函数中使用clang作为编译器。

c gets c99 clang cs50

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