Windowsのclおよびgccを使っています。
問題を単純化した例を下記に挙げます。
#include <stdio.h>
int Test1() {
    printf("Test1\n");
    return 0;
}
int Test2() {
    printf("Test2\n");
    return 0;
}
int main(void) {
    int B = Test1() && Test2();
    return 0;
}
上記でTest2()が実行されません。(Bの結果が何であるにせよTest2()は実行したい)
webを調べたところvolatileと言うキーワードに遭遇したので試しに下記にしてもだめでした。
volatile int Test1() {
volatile int Test2() {
volatile int B = Test1() && Test2();

Test2()を確実に実行するには
B1 = Test1();
B2 = Test2();
B = B1 && B2;
のように、2つに分けるしか手がないでしょうか?