小编abl*_*igh的帖子

GCC - 初始化程序周围缺少大括号

关于这个警告有很多问题,但是我尝试过的这些警告似乎都没有让警告消失.

这就是我所拥有的:

typedef struct {
    union {
        float data[16];
        float col_row[4][4];
    };
} matrix44;

// ...

matrix44 result = {0};
Run Code Online (Sandbox Code Playgroud)

我正在尝试将结构初始化为零,但不能让它不给出错误.这是编译为C11.

我也试过其他的变化,有些荒谬:

matrix44 result = {{0}};
matrix44 result = { {0}, {0} };
matrix44 result = { {0}, { {0}, {0} } };
Run Code Online (Sandbox Code Playgroud)

但他们当然都会发出警告.

如果我将结构减少到只是一维data数组,那么我可以在{{0}}没有警告的情况下初始化它.但是将其减少到二维col_row阵列仍然会发出警告.

是否有正确的方法来避免警告?或者在这种情况下警告是否不正确?

c gcc c11

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

C语言中是否有范围解析运算符?

我正在阅读一本关于C语言的书('掌握C'),并::此处找到了有关范围解析运算符()的主题,请参阅第203页的Google Books .

但是当我运行以下代码示例(从本书中复制)时,C编译器给了我一个错误.我在互联网上搜索但我无法在C中找到任何对范围解析运算符的引用.

#include <stdio.h>
int a = 50;
int main(void)
{
    int a =10;  
    printf("%d",a);
    printf("%d\n", ::a);        
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以,如果我想访问一个全局变量,那我怎么能从main()函数中做到这一点呢?

c scope-resolution

4
推荐指数
3
解决办法
8310
查看次数

C标准默认禁止警告

看到另一个问题,如果编译的提问者-Wall让我思考的话答案是显而易见的.

是否存在基于"C标准"的原因-Wall,编译器默认无法启用?

据我所知,没有一个主要的编译器这样做(当然在历史上没有人这样做),我想知道这是否符合标准或其他一些原因(惯性,背面兼容性或其他) .推测其他原因可能是偏离主题(基于意见),但我认为询问标准是否需要这种行为是关于主题的(事实).

c language-lawyer

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

C - Linux稀疏文件:如何检查文件是否稀疏并打印0填充的磁盘块

我想要做的是在linux上编写一个C程序,如果有稀疏文件,应该在当前目录中检查,并且我还要打印已经代表文件中的间隙和数量的磁盘块数量磁盘块是0填充但占用磁盘空间.

到目前为止,我可以访问当前目录并打印文件

DIR *dirp;
struct dirent *dp;
Run Code Online (Sandbox Code Playgroud)

为了完成第二部分,我尝试使用稀疏文件,stat()但它似乎没有工作,因为我没有得到所需的结果,因为我希望.

那么,有人能告诉我如何使用稀疏文件做这个部分吗?

c linux stat sparse-matrix readdir

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

C#可以做C++可以做的一切吗?

我是C#程序员已经有几个月了,最近我一直在考虑学习C++.

所以我的问题是,C++无法做到C++所能做的事情吗?

我知道C++中的手动内存管理,但只要我不编写操作系统或非常繁重的内存应用程序,我就不要太担心(因为我听说.NET处理自动内存管理非常好).

但是,我可以在C#中编写C#中的所有内容吗?我还指DLL注入,注册表编辑,驱动程序等类似的东西.

C#被认为和C++一样强大吗?如果没有,那么C#不能做什么呢?

.net c# c++ memory

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

可疑地使用'else'结合i/o,看到';' 'if'附近

以下是导致此问题的代码.

        if 
            :: ((fromProc[0] == MSG_SLEEP) && nempty(proc2clk[0])) -> 
              proc2clk[0] ? fromProc[0]; // Woke up
            :: (!(fromProc[0] == MSG_SLEEP) && !(fromProc[0] == MSG_FIN)) ->
              clk2proc[0] ! 0;  
            ::else -> 
              time = time + 1; // just for debugging
        fi; 
Run Code Online (Sandbox Code Playgroud)

如果我在第一个条件中删除了nempty调用,则错误消失.根据我的阅读,你不能使用else语句,如果你在条件中使用receive或send语句,但据我所知,nempty不是发送或接收语句,而只是检查一个通道是否是不是空的.那么,我在做什么错,我怎么能解决这个问题.

multithreading model-checking spin promela

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

从逗号分隔的for循环内部的语句的从左到右的评估

这两个代码是否相同?for循环中的这些语句写在用逗号分隔的同一行中.他们会从左到右进行评估吗?

此外,我想问我可以使用逗号分隔的for循环内的语句.喜欢(i = 0,j = 0,k = 0; .......)?

for(i=0, j= strlen(s)-1; i<j; i++, j--){ 
     c=s[i];
     s[i]=s[j];
     s[j]=c;
}
Run Code Online (Sandbox Code Playgroud)

for(i=0, j= strlen(s)-1; i<j; i++, j--)
      c=s[i],s[i]=s[j],s[j]=c;
Run Code Online (Sandbox Code Playgroud)

c for-loop comma-operator

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

如果有条件,多行的良好C编码样式

我正在用C语言编写一个项目,但遇到一个问题:我有很多if条件,其他人可能很难阅读。我还没有在互联网上找到类似的问题。

您是否有想法或示例如何使我的代码更具可读性?

这是C代码:

if( ((g_cycle_cnt == uartTxSecondaryMsg[3][msgPos[3]].sliceNo) ||   //correct slicenumber...
    (uartTxSecondaryMsg[3][msgPos[3]].sliceNo == -1) ||             // or as fast as possible...                                            

  ( (uartTxSecondaryMsg[3][msgPos[3]].sliceNo == -2) &&
   ((uartTxSecondaryMsg[3][msgPos[3]].timeFrameBegin>=g_uptime_cnt) && 
    (uartTxSecondaryMsg[3][msgPos[3]].timeFrameEnd<=g_uptime_cnt)))) &&

   ((dataProcessingFlag & SECONDARY_MSG_ANNOUNCED_CH4) == SECONDARY_MSG_ANNOUNCED_CH4) )
Run Code Online (Sandbox Code Playgroud)

c if-statement lines conditional-statements

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

在vim中查找局部变量的引用

我将 vim 与 cscope 和 ctags 一起使用。在我早期的编辑器中,我曾经使用一些映射的键来查找局部变量的引用。在vim中,使用cscope find命令,它也列出了其他函数中所有同名的变量。

有没有办法列出仅限于给定范围或函数的局部变量的用法?

vim ctags cscope

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

套接字编程 - 多个连接:分叉还是 FD_SET?

我试图了解套接字编程和处理多个连接时的不同实践。特别是当服务器需要为多个客户端提供服务时。

我看过一些代码示例;其中一些使用系统调用fd_set,另一些则使用fork()系统调用。

大致:

FD_SET

//Variables
fd_set fds, readfds;

//bind(...)
//listen(...)
FD_ZERO(&fds);
FD_SET(request_socket, &fds);

while(1) {
    readfds = fds;
    if (select (FD_SETSIZE, &readfds, NULL, NULL, NULL) < 0)
        //Something went wrong

    //Service all sockets with input pending
    for(i = 0; i < FD_SETSIZE; i++) {
        if (FD_ISSET (i, &readfds)) {
            if (i == request_socket) {
               /* Connection request on original socket. */
               int new;
               size = sizeof (clientname);
               new = accept (request_socket, (struct sockaddr *) &clientname, &size); …
Run Code Online (Sandbox Code Playgroud)

c sockets client fork server

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