最好的避免写作的方法是什么

someDataStruct.longSubStructName.anotherLongName.theVariable =
    someStruct.longSubStructName.anotherLongName.theVariable + 10;

setter和getter是oop程序中的一个解决方案。但是,在例如C中,没有任何对象的情况下,处理这个问题的最佳方法是什么?

最佳答案

创建指向相关变量的指针:

int *someDataVar1 = &someDataStruct.longSubStructName.anotherLongName.theVariable;
int *someDataVar2 = &someStruct.longSubStructName.anotherLongName.theVariable;

*someDataVar1 = *someDataVar2 + 10;

如果在一个代码块中多次使用这样的深度嵌套字段,那么这样做有助于提高可读性。如果你只需要使用一次或两次,那么你最好还是保持原样。
下面是这样一个构造可能有意义的示例:
for (clientNum = 0; clientNum < clientCount; clientNum++) {
    printf("name: %s\n", mainStructure.subStructure.clientList[clientNum].name);
    printf("address: %s\n", mainStructure.subStructure.clientList[clientNum].address);
    printf("identifier: %x\n", mainStructure.subStructure.clientList[clientNum].identifier);
    printf("file count: %d\n", mainStructure.subStructure.clientList[clientNum].fileCount);

    for (fileNum = 0; fileNum < mainStructure.subStructure.clientList[clientNum].fileCount; fileNum++) {
        printf("filename: %s\n", mainStructure.subStructure.clientList[clientNum].fileList[fileNum].fileName);
        printf("size: %d\n", mainStructure.subStructure.clientList[clientNum].fileList[fileNum].size);
        printf("checksum: %d\n", mainStructure.subStructure.clientList[clientNum].fileList[fileNum].checksum);
        mainStructure.subStructure.clientList[clientNum].fileList[fileNum].printed++;
    }

    mainStructure.subStructure.clientList[clientNum].printed++;
}

这里有很多冗长重复的信息。如此之多以至于很难看清你到底在用什么。可以使其更具可读性,如下所示:
for (clientNum = 0; clientNum < clientCount; clientNum++) {
    struct client *thisClient = &mainStructure.subStructure.clientList[clientNum];
    printf("name: %s\n", thisClient->name);
    printf("address: %s\n", thisClient->address);
    printf("identifier: %x\n", thisClient->identifier);
    printf("file count: %d\n", thisClient->fileCount);

    for (fileNum = 0; fileNum < thisClient->fileCount; fileNum++) {
        struct file *thisFile = &thisClient.fileList[fileNum];
        printf("filename: %s\n", thisFile->fileName);
        printf("size: %d\n", thisFile->size);
        printf("checksum: %d\n", thisFile->checksum);
        thisFile->printed++;
    }

    thisClient->printed++;
}

关于c - 处理嵌套结构访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51883764/

10-12 07:36
查看更多